Hallo,
ich beschäftige mich schon länger mit folgendem Problem.
Ich würde gerne ein analoges Servo fernsteuern und eine LED schalten.
Dazu verwende ich
Für den Sender:
-Arduino Nano
-X-Y Joystick Modul mit Taster
-FS1000A Funkmodul
#include <RH_ASK.h>
#include <SPI.h>
RH_ASK driver(2000, 11, 12, 10); // (speed, RX, TX, PTT)
const int joyX = A0;
const int buttonPin = 4;
void setup() {
Serial.begin(9600);
driver.init();
pinMode(buttonPin, INPUT_PULLUP); // Taster aktiv LOW
}
void loop() {
int xVal = analogRead(joyX); // 0–1023
uint8_t angle = map(xVal, 0, 1023, 0, 180);
bool buttonState = digitalRead(buttonPin) == LOW; // gedrückt = true
// Datenpaket: [Winkel, ButtonStatus]
uint8_t data[2] = { angle, (uint8_t)buttonState };
driver.send(data, sizeof(data));
driver.waitPacketSent();
Serial.print("Angle: ");
Serial.print(angle);
Serial.print(" | Button: ");
Serial.println(buttonState);
delay(50);
}
Für den Empfänger:
-Arduino Mega
-Analogservo MG90
-FS1000A Funkmodul
#include <RH_ASK.h>
#include <SPI.h>
#include <PWMServo.h>
RH_ASK driver(2000, 11, 12, 10); // (speed, RX, TX, PTT)
PWMServo myServo;
const int ledPin = 13; // Onboard-LED Mega
void setup() {
Serial.begin(9600);
driver.init();
myServo.attach(7);
pinMode(ledPin, OUTPUT);
}
void loop() {
uint8_t buf[2];
uint8_t buflen = sizeof(buf);
if (driver.recv(buf, &buflen)) {
int angle = buf[0];
bool buttonPressed = buf[1];
myServo.write(angle);
delay(50);
// LED steuern
digitalWrite(ledPin, buttonPressed ? HIGH : LOW);
Serial.print("Angle: ");
Serial.print(angle);
Serial.print(" | Button: ");
Serial.println(buttonPressed);
}
delay(50);
}
Als Bibliotheken nutze ich Radiohead und PWMServo.
Wenn ich das Setup so in Betrieb nehme sehe ich auf dem seriellen Monitor, das die Werte gesendet und auch korrekt empfangen werden. Auch die LED geht an und aus.
Allerdings bewegt sich das Servo nicht!
Vielleicht kann mir da jemand weiterhelfen? Ich bin noch Anfänger und würde das ganze dann auch gerne noch erweitern (ferngesteuertes Auto).
Vielen Dank im Voraus