//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);
}