Hallo Arduino Community,
ich bin relativ neu hier und hab noch nicht viel Ahnung. Mein Ziel ist es, zwei Arduino Unos mit einem 433mhz Sender miteinander kommunizieren zu lassen, woraufhin der eine Arduino Uno (mit dem Empfänger) bei Erhalt des Signals einen Servomotor betätigen soll. Der Servomotor soll zwei verschiedene Stellungen einnehmen, die er dann bis ein neues Signal reinkommt auch einbehält.
Nun habe ich das Problem, dass die beiden Arduino Unos auf Knopfdruck zwar miteinander kommunizieren können (also ein Arduino Uno empfängt das Signal und der andere sendet es), aber da ich versuche auf Knopfdruck das Signal zu senden, werden zu viele Signale versendet und der Servomotor springt hin und her. Ich würde mir aber wünschen, dass der empfangende Arduino Uno nur ein Signal liest und daraufhin den Servomotor betätigt und dann wartet, bis ich den anderen Knopf für eine zweite Stellung des Servomotors betätige.
Hier wäre der Code für den Sender:
#include <RCSwitch.h>
RCSwitch mySwitch = RCSwitch();
int taster1=7; //Das Wort „taster“ steht jetzt für den Wert 7.
int taster2=8;
int tasterstatus1=0; //Das Wort „tasterstatus“ steht jetzt zunächst für den Wert 0. Später wird unter dieser Variable gespeichert, ob der Taster gedrückt ist oder nicht.
int tasterstatus2=0;
void setup() //Hier beginnt das Setup.
{
mySwitch.enableTransmit(10); // Der Sender wird an Pin 10 angeschlossen
pinMode(taster1, INPUT); //Der Pin mit dem Taster (Pin 7) ist jetzt ein Eingang.
pinMode(taster2, INPUT);
}
void loop()
{ //Mit dieser Klammer wird der Loop-Teil geöffnet.
tasterstatus1=digitalRead(taster1); //Hier wird der Pin7 ausgelesen (Befehl:digitalRead). Das Ergebnis wird unter der Variable „tasterstatus“ mit dem Wert „HIGH“ für 5Volt oder „LOW“ für 0Volt gespeichert.
tasterstatus2=digitalRead(taster2);
if (tasterstatus1 == HIGH)//Verarbeitung: Wenn der taster gedrückt ist (Das Spannungssignal ist hoch)
{//Programmabschnitt des IF-Befehls öffnen.
mySwitch.send(5678, 24); // Der 433mhz Sender versendet die Dezimalzahl „5678“
delay (50); // 50 Millisekunden Pause
} //Programmabschnitt des IF-Befehls schließen.
if (tasterstatus2 == HIGH) //...ansonsten...
{ //Programmabschnitt des else-Befehls öffnen.
mySwitch.send(1234, 24); // Der 433mhz Sender versendet die Dezimalzahl „1234“
delay(50);
} //Programmabschnitt des else-Befehls schließen.
} //Mit dieser letzten Klammer wird der Loop-Teil geschlossen.
Und hier der Code für den Empfänger:
#include <RCSwitch.h>
#include <Servo.h>
Servo abwurf;
RCSwitch mySwitch = RCSwitch();
void setup()
{
Serial.begin(9600);
mySwitch.enableReceive(0); // Empfänger ist an Interrupt-Pin "0" - Das ist am UNO der Pin2
abwurf.attach(8);
}
void loop() {
if (mySwitch.available()) // Wenn ein Code Empfangen wird...
{
int value = mySwitch.getReceivedValue(); // Empfangene Daten werden unter der Variable "value" gespeichert.
if (value == 0) // Wenn die Empfangenen Daten "0" sind, wird "Unbekannter Code" angezeigt.
{
Serial.println("Unbekannter Code");
}
else // Wenn der Empfangene Code brauchbar ist, wird er hier an den Serial Monitor gesendet.
{
Serial.print("Empfangen: ");
Serial.println( value );
if (value == 5678) //Verarbeitung: Wenn der Arduino die Zahl "5678" empfängt, dann...
{ //Programmabschnitt des IF-Befehls öffnen.
abwurf.write(90);
delay(50);
} //Programmabschnitt des IF-Befehls schließen.
if (value == 1234);
{
abwurf.write(180);
delay(50);
}
}
mySwitch.resetAvailable(); // Hier wird der Empfänger "resettet"
}
}
Danke schonmal im Voraus für eure Hilfe.