Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //PROGRAM BY: RANDY N. CAÑADA (NOV. 2025)
- //CONNECTIONS NRF24L01
- /*CE_PIN 7
- CSN_PIN 10
- SCK_PIN 4
- MOSI_PIN 6
- MISO_PIN 5
- GND-GND
- VCC-5Vdc/3.3vdc
- JOYSTICKS:
- VRX = A1
- VRY= A0
- gnd-grnd
- vcc-vcc
- note: when you are using breakout board for nrfl01, you can supply 5vdc. If not use 3.3vdc
- MY YOUTUBE CHANNEL: ElectroCrafters:
- https://www.youtube.com/channel/UCu1aqzUdTqSnTN5BHNlbVgA
- MY FB CHANNEL: FB PAGE:
- Arduino:
- https://www.facebook.com/rhacan2?__tn__=R
- PLS ALSO SUPPORT MY OTHER PAGE:FB PAGES:
- Playlist.ph:
- https://www.facebook.com/profile.php?id=61573177858722
- SUPPORT MY OTHER YOUTUBE CHANNEL:
- PlaylistPH
- https://www.youtube.com/@PlaylistPh-h2v
- */
- #include <SPI.h>
- #include <RF24.h>
- #define CE_PIN 7
- #define CSN_PIN 10
- #define joyVert A0 // VRy → forward/backward
- #define joyHorz A1 // VRx → turning
- RF24 radio(CE_PIN, CSN_PIN);
- const byte address[6] = "00001";
- struct Data_Package {
- int8_t motorLeft;
- int8_t motorRight;
- };
- Data_Package data;
- int centerVert = 0;
- int centerHorz = 0;
- void setup() {
- Serial.begin(115200);
- pinMode(joyVert, INPUT);
- pinMode(joyHorz, INPUT);
- SPI.begin();
- //SPI.begin(4, 5, 6); // SCK, MISO, MOSI
- if (!radio.begin()) {
- Serial.println("NRF24 not responding!");
- while (1);
- }
- radio.openWritingPipe(address);
- radio.setChannel(100);
- radio.setPALevel(RF24_PA_LOW);
- radio.setDataRate(RF24_250KBPS);
- radio.stopListening();
- // Calibrate joystick center
- Serial.println("Calibrating joystick, keep it untouched...");
- delay(2000);
- centerVert = analogRead(joyVert);
- centerHorz = analogRead(joyHorz);
- Serial.print("Center Vert: "); Serial.print(centerVert);
- Serial.print(" Center Horz: "); Serial.println(centerHorz);
- Serial.println("Calibration done!");
- }
- void loop() {
- int deadZone = 30;
- int joyV_raw = analogRead(joyVert) - centerVert;
- int joyH_raw = analogRead(joyHorz) - centerHorz;
- int joyV = 0;
- int joyH = 0;
- // Map Vertical (forward/backward)
- if (abs(joyV_raw) > deadZone) {
- joyV = map(joyV_raw, -512, 512, -127, 127);
- }
- // Map Horizontal (turning)
- if (abs(joyH_raw) > deadZone) {
- joyH = map(joyH_raw, -512, 512, -127, 127);
- }
- // Combine for motor speeds
- int MotorLeft = joyV + joyH;
- int MotorRight = joyV - joyH;
- MotorLeft = constrain(MotorLeft, -127, 127);
- MotorRight = constrain(MotorRight, -127, 127);
- if (abs(MotorLeft) < 5) MotorLeft = 0;
- if (abs(MotorRight) < 5) MotorRight = 0;
- data.motorLeft = MotorLeft;
- data.motorRight = MotorRight;
- radio.write(&data, sizeof(Data_Package));
- Serial.print("joyV_raw: "); Serial.print(joyV_raw);
- Serial.print(" joyH_raw: "); Serial.print(joyH_raw);
- Serial.print(" MotorLeft: "); Serial.print(MotorLeft);
- Serial.print(" MotorRight: "); Serial.println(MotorRight);
- delay(100);
- }
Advertisement
Add Comment
Please, Sign In to add comment