#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const uint64_t pipeOut = 0xABBBABCD71LL; // NOTE: The address in the Transmitter and Receiver code must be the same "0xABCDABCD71LL"
const int switchPin1 = 2; // Toggle switch connected to digital pin 2
const int switchPin2 = 3; // Toggle switch connected to digital pin 3
const int switchPin3 = 4; // Toggle switch connected to digital pin 4
const int switchPin4 = 5; // Toggle switch connected to digital pin 5
RF24 radio(7,8); // select CE,CSN pin
struct Signal {
byte xMain;
byte yMain;
byte xSecondary;
byte ySecondary;
byte sw1;
byte sw2;
byte sw3;
byte sw4;
byte rPoten;
};
Signal data;
void ResetData()
{
data.xMain = 0;
data.yMain = 127;
data.xSecondary = 127;
data.ySecondary = 127;
data.sw1 = 0;
data.sw2 = 0;
data.sw3 = 0;
data.sw4 = 0;
data.rPoten = 0;
}
void setup()
{
Serial.begin(9600);
// Configure the NRF24 module
radio.begin();
radio.openWritingPipe(pipeOut);
radio.setChannel(100);
radio.setAutoAck(false);
radio.setDataRate(RF24_250KBPS); // The lowest data rate value for more stable communication
radio.setPALevel(RF24_PA_MAX); // Output power is set for maximum range
radio.stopListening(); // Start the radio comunication for Transmitter
ResetData();
pinMode(switchPin1, INPUT);
pinMode(switchPin2, INPUT);
pinMode(switchPin3, INPUT);
pinMode(switchPin4, INPUT);
}
// Joystick center and its borders
int Border_Map(int val, int lower, int middle, int upper, bool reverse)
{
val = constrain(val, lower, upper);
if ( val < middle )
val = map(val, lower, middle, 0, 128);
else
val = map(val, middle, upper, 128, 255);
return ( reverse ? 255 - val : val );
}
void loop()
{
data.xMain = Border_Map( analogRead(A0), 0, 512, 1023, false ); // CH1 Note: "true" or "false" for signal direction
data.yMain = Border_Map( analogRead(A1), 0, 512, 1023, false ); // CH2
data.xSecondary = Border_Map( analogRead(A3), 0, 512, 1023, false ); // CH3
data.ySecondary = Border_Map( analogRead(A4), 0, 512, 1023, false ); // CH4
data.sw1 = digitalRead(switchPin1); // CH5
data.sw2 = digitalRead(switchPin2); // CH6
data.sw3 = digitalRead(switchPin3); // CH7
data.sw4 = digitalRead(switchPin4); // CH8
data.rPoten = analogRead(A2); // CH9
radio.write(&data, sizeof(Signal));
Serial.println("_________________________________");
Serial.print(" xMain ");
Serial.print(data.xMain);
Serial.print(" yMain ");
Serial.print(data.yMain);
Serial.print(" xSecondary ");
Serial.print(data.xSecondary);
Serial.print(" ySecondary ");
Serial.print(data.ySecondary);
Serial.print(" sw1 ");
Serial.print(data.sw1);
Serial.print(" sw2 ");
Serial.print(data.sw2);
Serial.print(" sw3 ");
Serial.print(data.sw3);
Serial.print(" sw4 ");
Serial.print(data.sw4);
Serial.print(" rPoten ");
Serial.print(data.rPoten);
Serial.println(" ");
}