Hallo zusammen,
ich beschäftige mich jetzt seit ca. 1 Woche intensiv mit dem Thema Arduino und wie Programmiere ich etwas.
Leider ist mein Arduino Mega noch nicht angekommen aber ich hoffe das sich das noch bis Ende dieser Woche ausgeht.
Jedenfalls hab ich schon fleissig meinen ersten Sketch geschrieben. Habe gerade versucht mich in das Thema "wie führe ich 2 Aktionen gleichzeitig aus" einzuarbeiten.
In meinem Sketch habe ich es mit der Funktion millis() versucht. ich bin mir aber nicht sicher ob das so wie ich das da reingeschrieben habe funktionieren kann.
Ich möchte wenn Taster1 gedrückt wird 2 Motoren (Motor1 und Motor2) gleichzeitig anlaufen lassen. Der eine soll 5sek laufen, der andere 3sek.
Wenn Taster2 gedrückt wird sollen sie wieder laufen aber beide mit nur 3sek Laufzeit.
Kann das so wie ich das geschrieben habe funktionieren?
Ich bin mir unsicher ob ich die millis() Befehle an den richtigen Stellen eingefügt habe und ob das gemeinsam mit dem Taster so funktioniert.
Zumindest der Arduino Programmer gibt keine Fehlermeldung ab.
Vielen Dank für eure Hilfe
MfG Patrick
const int Motor1=2;
const int Motor1RichtungA=22;
const int Motor1RichtungB=23;
const int Motor2=3;
const int Motor2RichtungA=24;
const int Motor2RichtungB=25;
const int Taster1=46;
const int Taster2=47;
int TasterStatus1=0;
int TasterStatus2=0;
long previousMillis1 = 0; //für den Anfang definieren, dass PreviousMillis1 noch nicht vorhanden ist
long previousMillis2 = 0;
void setup()
{
pinMode(Motor1,OUTPUT);
pinMode(Motor2,OUTPUT);
pinMode(Motor1RichtungA,OUTPUT);
pinMode(Motor1RichtungB,OUTPUT);
pinMode(Motor2RichtungA,OUTPUT);
pinMode(Motor2RichtungB,OUTPUT);
pinMode(Taster1,INPUT);
pinMode(Taster2,INPUT);
digitalWrite(Motor1,LOW);
digitalWrite(Motor2,LOW);
}
void loop()
{
TasterStatus1 = digitalRead(Taster1); //Auslesen ob Taster1 High ist
if (TasterStatus1 == HIGH) { //wenn Taster gedrückt ist, dann
long dauer1 = 5000; //Motor1 soll 5sek laufen
unsigned long currentMillis1 = millis(); //Merke aktuelle Zeitdauer = currentMillis1
if(currentMillis1 - previousMillis1 < dauer1) //Wenn Aktuelle Zeitdauer - vergangene Zeitdauer < 5sek dann Motoren laufen lassen
digitalWrite(Motor1RichtungA,LOW); //Drehrichtung von Motor1
digitalWrite(Motor1RichtungB,HIGH); //Drehrichtung von Motor1
analogWrite(Motor1,200); //Motor laufen lassen mit dem Wert 200 (also nicht volle Drehzahl)
long dauer2 = 3000; //Motor2 soll gleichzeitig mit Motor 1 Starten aber nur 3sek laufen
unsigned long currentMillis2 = millis(); //Merke aktuelle Zeitdauer = currentMillis2
if(currentMillis2 - previousMillis2 < dauer2) //Wenn Aktuelle Zeitdauer - vergangene Zeitdauer < 3sek dann Motoren laufen lassen
digitalWrite(Motor2RichtungA,LOW); //Drehrichtung von Motor2
digitalWrite(Motor2RichtungB,HIGH); //Drehrichtung von Motor2
analogWrite(Motor2,200); //Motor laufen lassen mit dem Wert 200 (also nicht volle Drehzahl)
previousMillis1 = currentMillis1; //Zeitdauer die vergangen ist seit Motor1 läuft merken
previousMillis2 = currentMillis2; //Zeitdauer die vergangen ist seit Motor2 läuft merken
}
else { //Wenn die Zeitdauer vergangen ist den jeweiligen Motor stoppen
analogWrite(Motor1,LOW);
analogWrite(Motor2,LOW);
}
TasterStatus2 = digitalRead(Taster2); //Selbes Spiel nochmal allerdings wenn Taster2 gedrückt wird und mit anderen Laufzeiten der Motoren
if (TasterStatus2 == HIGH) {
long dauer1 = 3000;
unsigned long currentMillis1 = millis();
if(currentMillis1 - previousMillis1 < dauer1)
digitalWrite(Motor1RichtungA,HIGH);
digitalWrite(Motor1RichtungB,LOW);
analogWrite(Motor1,255);
long dauer2 = 3000;
unsigned long currentMillis2 = millis();
if(currentMillis2 - previousMillis2 < dauer2)
digitalWrite(Motor2RichtungA,HIGH);
digitalWrite(Motor2RichtungB,LOW);
analogWrite(Motor2,255);
previousMillis1 = currentMillis1;
previousMillis2 = currentMillis2;
}
else {
analogWrite(Motor1,LOW);
analogWrite(Motor2,LOW);
}
}