CCCPaste

nrfl01_receiver_arduino

//PROGRAM BY: RANDY N. CAÑADA(NOV.2025)

/*connections: arduino
SPI MOSI MISO CLK CS CE
GPIO 11 GPIO 12 GPIO 13 GPIO 10 9

*/

#include <SPI.h>
#include <RF24.h>

// Motor pins
int enA = A1; int in1 = 3; int in2 = 4;
int enB = A0; int in3 = 5; int in4 = 6;
int maxSpeed = 255;

RF24 radio(9, 10);
const byte address[6] = "00001";

struct Data_Package {
int8_t motorLeft;
int8_t motorRight;
};
Data_Package data;

void setup() {
Serial.begin(115200);
radio.begin();
radio.openReadingPipe(1, address);
radio.setChannel(100);
radio.setPALevel(RF24_PA_LOW);
radio.setDataRate(RF24_250KBPS);
radio.startListening();

pinMode(enA, OUTPUT); pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT); pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT); pinMode(in4, OUTPUT);

stopMotors();
}

void loop() {
if (radio.available()) {
radio.read(&data, sizeof(Data_Package));

Serial.print("MotorLeft: "); Serial.print(data.motorLeft);
Serial.print(" MotorRight: "); Serial.println(data.motorRight);

driveMotors(data.motorLeft, data.motorRight);
}
}

void driveMotors(int left, int right) {
// Left motor direction
if (left > 0) {
digitalWrite(in1, LOW); digitalWrite(in2, HIGH);
} else if (left < 0) {
digitalWrite(in1, HIGH); digitalWrite(in2, LOW);
} else {
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
}

// Right motor direction
if (right > 0) {
digitalWrite(in3, LOW); digitalWrite(in4, HIGH);
} else if (right < 0) {
digitalWrite(in3, HIGH); digitalWrite(in4, LOW);
} else {
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
}

// Set speeds proportionally
analogWrite(enA, abs(left) * maxSpeed / 127);
analogWrite(enB, abs(right) * maxSpeed / 127);
}

void stopMotors() {
digitalWrite(in1, LOW); digitalWrite(in2, LOW);
digitalWrite(in3, LOW); digitalWrite(in4, LOW);
analogWrite(enA, 0); analogWrite(enB, 0);
}