Hallo liebe Forenmitglieder,
in meiner Verzweiflung wende ich mich nun nach langem Probieren, Lesen und Basteln an euch.
ich bastele schon länger an einem Kostümprojekt herum, bei dem eine Fernbedienung in einem Handschuh auf Knopfdruck Signale übertragen soll, um einige Servos (aktuell ist es nur einer) im Kostüm zu bewegen.
Die Fernbedienung ist fertig und funktioniert.
Sie besteht aus einem Arduino Nano (Nachbau von elegoo), einem FS1000A 433 MHz Funksender wird mit einer 9v Batterie betrieben. Vier Taster senden jeweils eine andere 4-stellige Zahlenfolge.
Der Servo in der Maske soll die Fühler / Hörner der Kreatur bewegen, sobald die Zahlenfolge "1234" empfangen wird.
Dies funktioniert leider nur hin und wieder - und ich verstehe nicht, warum das so willkürlich geschieht.
Ich verwende die Servo.h und RCSwitch.h , da diese für mich am einfachsten verständlich ist und für diese Art von Sender / Empfänger empfohlen ist.
Der Aufbau in der Maske besteht aus:
Arduino Nano (elegoo Nachbau, der Gleiche wie oben)
RF-5V 433 MHz Empfänger, im Set gekauft mit dem Sender -> an Pin 2
Servo von Sunfounder für 4,8 - 6 V -> an Pin 9
Zuerst dachte ich, das Ding hat zu wenig Strom (ich habe es mit einer USB Powerbank betrieben)
Jetzt habe ich eine 9V Batterie an den VIN Pin gehängt, leider ist das Ergebnis das Gleiche:
Es wird nur hin und wieder auf den Tastendruck der Fernbedienung reagiert.
Leider scheint der Arduino (zumindest wenn ich den Seriellen Monitor richtig betreibe) jetzt gar nichts mehr zu empfangen.
Meine Vermutung - und das gebe ich ganz ehrlich zu - ist mein nicht wirklich gut geschriebener Code...
Eventuell ist die if-Funktion, die ich mir hier zusammen geschustert habe, nicht das richtige für meinen Zweck.
Leider bin ich im Programmieren (besonders von Schleifen) eine Niete. Ich habe schon einige einfache Arduino Projekte erfolgreich abgeschlossen, aber dies ist mein erster Einsatz von Servos und Funksendern.
Ich wäre sehr dankbar, wenn jemand einen Blick auf meinen Code werfen und mir sagen könnte, was ich da bloß falsch mache:
#include <Servo.h>
#include <RCSwitch.h>
const int servoPin1 = 9; // Servo pin
RCSwitch mySwitch = RCSwitch();
int directionState = 0;
Servo servo1;
int pos = 0;
void setup() {
Serial.begin(9600);
servo1.attach(9);
mySwitch.enableReceive(0); // laut Arduino Nano Referenz ist Pin 2 der Interrupt Pin 0 und der Empfänger muss an den Interrupt Pin, oder hat sich was geändert??
servo1.write(0);
}
void loop(){
Serial.println("Start...");
if (mySwitch.available()) // Wenn ein Code Empfangen wird...
{
int value = mySwitch.getReceivedValue();
Serial.println(value);
if (directionState == 0){
if (value == 1234) {
directionState = 1;
Serial.println(value);
for(pos = 0; pos <= 90; pos += 1)
{
servo1.write(pos);
delay(20); // waits 15ms to reach the position
}
}
} else if (directionState == 1) {
if (value == 1234) {
directionState = 0;
Serial.println(value);
for (pos = 90; pos>=1; pos -=1)
{
servo1.write(pos);
delay(20);
}
}
}
mySwitch.resetAvailable(); // Hier wird der Empfänger "resettet"
}
}
Ich bin für jede Hilfe dankbar!