| nRF24 | Nano | Hinweis |
|---|
| GND | GND | |
| VCC | 3.3V ❗ | |
| CE | D9 | |
| CSN | D10 | |
| MOSI | D11 | |
| MISO | D12 | |
| SCK | D13 | |
| Kondensator + | 3.3V | 10–100µF |
| Kondensator − | GND | direkt am Modul |
| L298N | UNO |
|---|
| ENA | D5 |
| ENB | D6 |
| IN1 | D2 |
| IN2 | D3 |
| IN3 | D4 |
| IN4 | D7 |
#include <SPI.h>
#include <RF24.h>
RF24 radio(9, 10);
const byte address[6] = "00001";
#define ENA 5
#define ENB 6
#define IN1 2
#define IN2 3
#define IN3 4
#define IN4 7
unsigned long lastReceiveTime = 0;
byte currentCommand = 0;
void stopMotors() {
analogWrite(ENA, 0);
analogWrite(ENB, 0);
}
void setup() {
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);
radio.begin();
radio.setPALevel(RF24_PA_MIN);
radio.setDataRate(RF24_1MBPS);
radio.setChannel(108);
radio.openReadingPipe(0, address);
radio.startListening();
}
void loop() {
if (radio.available()) {
radio.read(¤tCommand, sizeof(currentCommand));
lastReceiveTime = millis();
}
// Failsafe: wenn 300ms nichts kommt → Stop
if (millis() - lastReceiveTime > 300) {
currentCommand = 0;
}
stopMotors();
switch (currentCommand) {
case 1: // Vorwärts
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 200);
analogWrite(ENB, 200);
break;
case 2: // Rückwärts
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 200);
analogWrite(ENB, 200);
break;
case 3: // Links
digitalWrite(IN1, LOW);
digitalWrite(IN2, HIGH);
digitalWrite(IN3, HIGH);
digitalWrite(IN4, LOW);
analogWrite(ENA, 200);
analogWrite(ENB, 200);
break;
case 4: // Rechts
digitalWrite(IN1, HIGH);
digitalWrite(IN2, LOW);
digitalWrite(IN3, LOW);
digitalWrite(IN4, HIGH);
analogWrite(ENA, 200);
analogWrite(ENB, 200);
break;
default:
stopMotors();
break;
}
}