Hallo
Ich bin gerade mit Arduino angefangen bzw. mit der programmierung.
Ich habe zwei arduinos verbunden (mega + mega)
Das erste Projekt läuft auch schon recht gut bis auf den oben erwähnten punkt.
Wenn ich mit dem serial monitor im receiveEvent abfrage was meine variable enthält, bekomme ich die richtige auswertung.
Wenn ich die variable im Loop abfrage ist die variable aber leer !!!
Muss ich die variable vom receiveEvent zum loop noch irgendwie weiter geben ???
Mein zweiter versuch war ein eigener void sex_on_the_beach().
Dort steht dann mein komplettes programm drin das abgearbeitet werden soll.
Also habe ich im receiveEvent eine if abfrage gemacht ob die variable die ich empfange richtig ist .
Wenn das der fall ist springt er zu meinem void sex_on_the_beach() und sollte es dann abarbeiten.
Er macht das nicht ordentlich. Er beachtet dort keine delay() angaben und bewegt auch keinen motor.
Er rauscht am delay vorbei und steckt in der ersten for schleife wohl fest.
Ich begreif das nicht. Ich hänge mal das slave programm an. Das Master programm vom ersten arduino hat damit ja wohl nicht wirklich viel zu tun oder ???
//--------------------------------------------->> // Verbindung mit master zum Datensenden
void receiveEvent(int howMany)
{
String drink = "";
while (Wire.available())
{
drink += char(Wire.read());
}
//Serial.println(drink);
if (drink == "A1")
{
String drink = "";
sex_on_the_beach();
}
}
void sex_on_the_beach()//------------------>> // Start des Programms (A1) Sex On The Beach
{
lcd.clear(); // Anzeige auf dem Display löschen
lcd.print("Sie wollen einen"); // Anzeige im Display erste Zeile
lcd.setCursor(0, 1); // Setzt den Cursor in die zweite reihe
lcd.print("Sex On The Beach"); // Anzeige im Display in der zweiten Reihe
delay(2000); // Wartezeit 3 sekunden
lcd.clear(); // Anzeige auf dem Display löschen
lcd.print(" Dein Drink ist "); // Anzeige im Display erste Zeile
lcd.setCursor(0, 1); // Setzt den Cursor in die zweite reihe
lcd.print(" In Arbeit! "); // Anzeige im Display in der zweiten Reihe
digitalWrite(ledrot_Pin, LOW); // die Rote LED wird ausgeschaltet
digitalWrite(ledgruen_Pin, HIGH); // die Grüne LED wird eingeschaltet
//--------------------------------------->> // Hier wird der Servo in die erste Position gefahren
for (int Umin = 3; Umin < 255; Umin += 1) // Umdrehungen pro minute weniger als 254 um 1 erhöhen
{
stepper.setSpeed(Umin); // Umdrehungen aus der variablen Umin
stepper.step(1); // schritte pro schleifen durchlauf
}
stepper.step(3610); // schritte die gefahren werden sollen
for (int Umin = 254; Umin > 0; Umin -= 1) // Umdrehungen pro minute mehr 254 um 1 verringern
{
stepper.setSpeed(Umin);
stepper.step(1); // schritte pro schleifen durchlauf
}
//---------------------------------------->> // Servo ist in 0 stellung
delay(1000); // Wartezeit 1 sekunde
for (int pos = 0; pos < 90; pos += 1) // Servo von 0 nach 90 grad drehen in 1 grad schritten
{
myservo.write(pos); // Die variable 'pos' ausführen und auf 90 Grad drehen
}
delay(1000); // Bleibt 1 sekunde bei 90 grad stehen
for (int pos = 90; pos > 0; pos -= 1) // Servo von 90 nach 0 zurück drehen in 1 grad schritten
{
myservo.write(pos); // Die variable 'pos' ausführen und auf 0 Grad drehen
}
//---------------------------------------->> // Zweite mal servo ausführen
delay(1000);
for (int pos = 0; pos < 90; pos += 1) // Servo von 0 nach 90 grad drehen in 1 grad schritten
{
myservo.write(pos); // Die variable 'pos' ausführen und auf 90 Grad drehen
}
delay(1000); // Bleibt 1 sekunde bei 90 grad stehen
for (int pos = 90; pos > 0; pos -= 1) // Servo von 180 nach 0 zurück drehen in 1 grad schritten
{
myservo.write(pos); // Die variable 'pos' ausführen und auf 0 Grad drehen
}
delay(500); // Bleibt 1 sekunde bei 0 grad stehen
//---------------------------------------->> // Nächste flasche anfahren
for (int Umin = 3; Umin < 255; Umin += 1) // Umdrehungen pro minute weniger als 254 um 1 erhöhen
{
stepper.setSpeed(Umin);
stepper.step(-1); // schritte pro schleifen durchlauf
}
stepper.step(-690); // schritte die gefahren werden sollen rechts rum
for (int Umin = 254; Umin > 0; Umin -= 1) // Umdrehungen pro minute 254 um 1 verringen
{
stepper.setSpeed(Umin);
stepper.step(-1); // schritte pro schleifen durchlauf
}
delay(500); // Wartezeit 1 sekunde
//---------------------------------------->> // Servo erstes mal anschalten
for (int pos = 0; pos < 90; pos += 1) // Servo von 0 nach 90 grad drehen in 1 grad schritten
{
myservo.write(pos); // Die variable 'pos' ausführen und auf 90 Grad drehen
}
delay(1000); // Bleibt 1 sekunde bei 90 grad stehen
for (int pos = 90; pos > 0; pos -= 1) // Servo von 90 nach 0 zurück drehen in 1 grad schritten
{
myservo.write(pos); // Die variable 'pos' ausführen und auf 0 Grad drehen
}
delay(500); // Bleibt 1 sekunde bei 0 grad stehen
//--------------------------------------->> // Hier wird die cola Position angefahren
for (int Umin = 3; Umin < 70; Umin += 1) // Umdrehungen pro minute weniger als 254 um 1 erhöhen
{
stepper.setSpeed(Umin); // Umdrehungen aus der variablen Umin
stepper.step(1); // schritte pro schleifen durchlauf
}
stepper.step(170); // schritte die gefahren werden sollen
for (int Umin = 69; Umin > 0; Umin -= 1) // Umdrehungen pro minute mehr 254 um 1 verringern
{
stepper.setSpeed(Umin);
stepper.step(1); // schritte pro schleifen durchlauf
}
//---------------------------------------->> // Einsatz einer getränkepumpe für cola
digitalWrite(cola_Pin, LOW); // cola pumpe mit LOW einschalten
delay(2000); // 2 sekunden abfüllen
digitalWrite(cola_Pin, HIGH); // cola pumpe mit HIGH wieder abschalten
delay(1000); // warten bevor er weiter fährt
//---------------------------------------->> // Grundstellung anfahren
for (int Umin = 3; Umin < 255; Umin += 1) // Umdrehungen pro minute weniger als 254 um 1 erhöhen
{
stepper.setSpeed(Umin);
stepper.step(-1); // schritte pro schleifen durchlauf
}
stepper.step(-2720); // schritte die gefahren werden sollen
for (int Umin = 254; Umin > 0; Umin -= 1) // Umdrehungen pro minute 254 um 1 verringern
{
stepper.setSpeed(Umin);
stepper.step(-1); // schritte pro schleifen durchlauf
}
delay(2000);
if (digitalRead(grundstellung_Pin) == HIGH) // grundstellung am programm ende überprüfen
{
fehlerfrei == 1;
}
else
{
fehlerfrei == 0;
}
}
//-------------------------------------------->> // Ende des programms (A1) Sex On The Beach
Wo liegt dort mein fehler, ich blick echt nicht durch. Habe ich angaben beim void vergessen ?