Hallo, ich versuche gerade ein kleines Auto mit einer Fernbedienung zu bauen. Die Fernbedienung besteht aus vier Button, die die verschiedenen Richtungen Steuern, und einem NRF24l01 Funkmodul, das für die Funkverbindung zuständig ist. Das Auto besteht aus einer ln298 Motorbrücke und dem Empfänger. Jetzt habe ich ein Problem mit dem Code, da ich nicht weiß wie ich es programmieren soll, wenn z.B. man den Button drückt der für das nach vorne Fahren zuständig ist fahrt es zwar nach vorne, aber nur ruckartig, da z.B. der Button nach Links nicht gedrückt wird und dadurch den Pin der Motorbrücke auch ausgeschaltet.
Ich hoffe ihr versteht was ich meine.
Mein Code:
Sender
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
int buttonPin1 = A2;
int buttonPin2 = A3;
int buttonPin3 = A4;
int buttonPin4 = A5;
int buttonState1 = 0;
int buttonState2 = 0;
int buttonState3 = 0;
int buttonState4 = 0;
RF24 radio(8, 10);
const byte address[6] = "00002";
void setup() {
pinMode(buttonPin1, INPUT_PULLUP);
pinMode(buttonPin2, INPUT_PULLUP);
pinMode(buttonPin3, INPUT_PULLUP);
pinMode(buttonPin4, INPUT_PULLUP);
Serial.begin(9600);
radio.begin();
radio.openWritingPipe(address);
radio.setPALevel(RF24_PA_MIN);
radio.stopListening();
}
void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);
buttonState3 = digitalRead(buttonPin3);
buttonState4 = digitalRead(buttonPin4);
if (buttonState1 == 1)
{
buttonState1 = 1;
}
else if (buttonState1 == 0)
{
buttonState1 = 0;
}
if (buttonState2 == 1)
{
buttonState2 = 3;
}
else if (buttonState2 == 0)
{
buttonState2 = 2;
}
if (buttonState3 == 0)
{
buttonState3 = 4;
}
else if (buttonState3 == 1)
{
buttonState3 = 5;
}
if (buttonState4 == 0)
{
buttonState4 = 6;
}
else if (buttonState4 == 1)
{
buttonState4 = 7;
}
/*
Serial.print(buttonState1);
Serial.print("\t");
Serial.println(buttonState2);
Serial.print("\t");
Serial.println(buttonState3);
Serial.print("\t");
Serial.println(buttonState4);
Serial.print("\t");
*/
radio.write(&buttonState1, sizeof(buttonState1));
radio.write(&buttonState2, sizeof(buttonState2));
radio.write(&buttonState3, sizeof(buttonState3));
radio.write(&buttonState4, sizeof(buttonState4));
}
Empfänger
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
int autoPin1 = 4;
int autoPin2 = 5;
int autoPin3 = 6;
int autoPin4 = 7;
int enablePin1 = 9;
int enablePin2 = 3;
int buttonState = 0;
RF24 radio(8, 10);
const byte address[6] = "00002";
void setup() {
Serial.begin(9600);
pinMode(autoPin1, OUTPUT);
pinMode(autoPin2, OUTPUT);
pinMode(autoPin3, OUTPUT);
pinMode(autoPin4, OUTPUT);
pinMode(enablePin1, OUTPUT);
pinMode(enablePin2, OUTPUT);
radio.begin();
radio.openReadingPipe(0, address);
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
radio.startListening();
while (!radio.available());
radio.read(&buttonState, sizeof(buttonState));
Serial.println(buttonState);
// 1
if (buttonState == 0) {
digitalWrite(autoPin1, HIGH);
}
else if (buttonState == 1) {
digitalWrite(autoPin1, LOW);
}
// 2
if (buttonState == 2) {
digitalWrite(autoPin2, HIGH);
digitalWrite(autoPin1, LOW);
}
else if (buttonState == 3) {
digitalWrite(autoPin2, LOW);
}
// 3
if (buttonState == 4) {
digitalWrite(autoPin3, HIGH);
}
else if (buttonState == 5) {
digitalWrite(autoPin3, LOW);
}
// 4
if (buttonState == 6) {
digitalWrite(autoPin4, HIGH);
}
else if (buttonState == 7) {
digitalWrite(autoPin4, LOW);
}
}