Tests mit den MobaTools

Programmierung der Arduino UNO, Arduino MEGA, Arduino Nano, ........
Antworten
Benutzeravatar
Admin
Administrator
Beiträge: 1194
Registriert: Mo 20. Apr 2020, 09:47
Wohnort: 82441 Ohlstadt
Kontaktdaten:

Tests mit den MobaTools

Beitrag von Admin »

Ich habe mich mal ein wenig mit den MobaTools beschäftigt. Das ist wirklich ein sehr hilfreiches Tool. Ich bin gerade im Umziehen in eine andere Stadt. Habe daher erst mal meine Arduino Arbeiten bis auf weiteres abgebrochen. Mein Arbeitsplatz hier ist schon minnimiert. Da steht nur noch der Drucker und der PC :sad: Der Elektronik Platz steht schon in Ohlstadt. Dort habe ich aber noch kein Internet. Ob das mit der Telekom am 31.12.20 klappt? Ich will es hoffen :agt: Sonst habe ich hier kein Internet und kein Telefon mehr, und am neuen Wohnort noch nicht. :(V):

Aber ich komme wieder. :(V):

Code: Alles auswählen

////////// Example 3 for MoToStepper - attaching a bipolar stepper with step/dir and enable ////////////
/*  Beispiel für die Ansteuerung eines bipolaren Steppers über 4 Taster und
    ein Poti ( für die Geschwindigkeit )
    In diesem Beispiel werden neben der Stepperklasse (MoToStepper), auch die MoToButtons
    und der MoToTimebase genutzt.
    Der Spulenstrom wird abgeschaltet, wenn der Stepper nicht läuft.
    Die Taster müssen gegen Gnd schalten, es sind keine Widerstände notwendig
    Button1:  Dreht rechts, solange Taster gedrückt
    Button2:  Dreht links, solange Taster gedrückt
    Button3:  1 Umdrehung rechts
    Button4:  1 Umdrehung links
*/

#define MAX8BUTTONS // spart Speicher, da nur 4 Taster benötigt werden (saves RAM)
#include <MobaTools.h>
#include <LiquidCrystal_I2C.h> // LCD Display
// -------------LCD Display Acresse 0x3F oder 0x27----------------
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
// Pindefinitions - change to your needs
const byte dirPin       = 6;
const byte stepPin      = 7;
const byte enaPin       = 5;
const byte button1Pin   = A1;
const byte button2Pin   = A2;
const byte button3Pin   = A3;
const byte button4Pin   = A4;
const byte potPin       = A0;   // Analog Poti Eingang

int Umdrehungen = 0;
int Umdrehung_Schritte = 800;   // Referenz zur Treibereinstellung Schritte je Umdrehung
int Rampe = 300;

const int STEPS_REVOLUTION = 6400; //Schritte Auftrag
//Stepper einrichten ( 800 Schritte / Umdrehung - 1/4 Microstep )
MoToStepper myStepper( STEPS_REVOLUTION, STEPDIR );  // 6400 Steps bei 800 pro Umdrehung

// Taster einrichten
enum { Button1 = 0, Button2, Button3, Button4 } ; // Den Tasternamen die Indizes 0...3 zuordnen
const byte buttonPins[] = { button1Pin, button2Pin, button3Pin, button4Pin };    // muss als byte definiert sein, damit ein enfaches sizeof funktioniert
MoToButtons button( buttonPins, sizeof(buttonPins), 20, 500 );

MoToTimebase speedIntervall;    // Zeitinterval zum Auslesen des Speedpotentiometers
// the speed pot ist read only every 'speedintervall' ms

int vspeed = 0;                 //Steppergeschwindigkeit in U/min*10

void setup()
{
  //-----Display
  lcd.begin(20, 4);
  lcd.backlight();
  lcd.clear();
  lcd.setCursor (0, 0);
  lcd.print (F("    MOBA Stepper"));
  lcd.setCursor (0, 1);
  lcd.print (F("--------------------"));
  lcd.setCursor (0, 2);
  lcd.print (F("Umdrehungen"));
  lcd.setCursor (0, 3);
  lcd.print (F("Ramp"));
  lcd.setCursor (10, 3);
  lcd.print (F("Speed"));

  Umdrehungen = STEPS_REVOLUTION / Umdrehung_Schritte;
  lcd.setCursor (13, 2);
  lcd.print (F("    "));
  lcd.setCursor (13, 2);
  lcd.print (Umdrehungen);
  lcd.setCursor (5, 3);
  lcd.print (F("    "));
  lcd.setCursor (5, 3);
  lcd.print (Rampe);
  tone(17, 400, 100);

  //-----Stepper
  myStepper.attach( stepPin, dirPin );
  myStepper.attachEnable( enaPin, 10, LOW );  // Enable Pin aktivieren ( LOW=aktiv )
  myStepper.setSpeed( 200 );                  // 20 Umdrehungen je Minute
  myStepper.setRampLen( Rampe );              // Rampenlänge 300 Steps bei 20U/min
  speedIntervall.setBasetime( 100 );          // 100ms Tickerzeit
}

void loop() {
  button.processButtons();          // Taster einlesen und bearbeiten

  // Speed alle 100ms neu einlesen und setzen
  if ( speedIntervall.tick() ) {
    // wird alle 100ms aufgerufen ( Tickerzeit = 100ms im setup() )
    vspeed = map((analogRead(potPin)), 0, 1023, 20, 240);  //Poti mappen auf 2 ... 240 Umdr/Min
    lcd.setCursor (16, 3);
    lcd.print (F("     "));
    lcd.setCursor (16, 3);
    lcd.print (vspeed);
    //min speed =2 and max speed =180 rpm
    myStepper.setSpeed( vspeed );
  }

  // Drehen rechtsrum
  if (button.pressed(Button1) ) {
    //Taster1 gedrückt
    myStepper.rotate( 1 );          // Stepper dreht vorwärts
  }
  if ( button.released(Button1) ) {
    //Taster1 losgelassen
    myStepper.rotate(0);             // Stepper stoppt
  }

  //Drehen linksrum
  if (button.pressed(Button2) ) {
    //Taster2 gedrückt
    myStepper.rotate( -1 );         // Stepper dreht rückwärts
  }
  if ( button.released(Button2) ) {
    //Taster2 losgelassen
    myStepper.rotate(0);            // Stepper stoppt
  }

  // 1 Umdrehung rechts {
  if (button.pressed(Button3) ) {
    tone(17, 1000, 100);
    //Taster3 wurde gedrückt
    myStepper.doSteps(STEPS_REVOLUTION);
  }

  // 1 Umdrehung links
  if (button.pressed(Button4) ) {
    tone(17, 1000, 100);
    //Taster4 wurde gedrückt
    myStepper.doSteps(-STEPS_REVOLUTION);
  }
}
Antworten

Zurück zu „Programmierung der 8Bit Controller“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast