/*Ce script est celui d'une telecommande en arduino avec des modules NRF24-L01.
Il permetent la connexion a distance entre deux arduinos
Ce code est celui de l'emeteur*/
#include
#include "RF24.h"
RF24 radio(9, 10); //definit les broches de connections du NRF24-L01
const byte addresses[6] = "Free1"; //definit la communication
const int pot1Pin = A0, //definit le potentiometre numero 1 en A0
pot2Pin = A1, //definit le potentiometre numero 2 en A1
joystickXPin = A2, //definit l'axe X du joystick a la broche A2
joystickYPin = A3, //definit l'axe Y du joystick a la broche A3
joystickZPin = 7, //definit l'axe Z du joystick a la broche A7
s1Pin = 4, //definit le bouton numero 1 a la broche 4
s2Pin = 3, //definit le bouton numero 2 a la broche 3
s3Pin = 2, //definit le bouton numero 3 a la broche 2
led1Pin = 6, //definit la LED 1 du potentiometre
led2Pin = 5, //definit le LED 2 du potentiometre
led3Pin = 8; //definit la LED pour le statut de la connexion entre les deux arduino.
int dataWrite[8]; //definit la canal de communication des NRF24-L01
void setup() {
// NRF24L01
radio.begin(); //initialise le NRF24-L01
radio.setPALevel(RF24_PA_LOW);
radio.setDataRate(RF24_1MBPS);
radio.setRetries(0, 15); //initialise le delai entre les requetes/paquets
radio.openWritingPipe(addresses);
radio.openReadingPipe(1, addresses);
radio.stopListening();
// pin
pinMode(joystickZPin, INPUT); //initialise l'axe Z du joystick en mode INPUT
pinMode(s1Pin, INPUT); //initialise le bouton 1 en mode INPUT
pinMode(s2Pin, INPUT); //initialise le bouton 2 en mode INPUT
pinMode(s2Pin, INPUT); //initialise le bouton 3 en mode INPUT
pinMode(led1Pin, OUTPUT); //initialise la LED 1 en mode OUTPUT
pinMode(led2Pin, OUTPUT); //initialise la LED 2 en mode OUTPUT
pinMode(led3Pin, OUTPUT); //initialise la LED du satut de connexion en mode OUTPUT
}
void loop()
{
dataWrite[0] = analogRead(pot1Pin);
dataWrite[1] = analogRead(pot2Pin);
dataWrite[2] = analogRead(joystickXPin);
dataWrite[3] = analogRead(joystickYPin);
dataWrite[4] = digitalRead(joystickZPin); //envoie des paquets selon les broches de la telecommande
dataWrite[5] = digitalRead(s1Pin);
dataWrite[6] = digitalRead(s2Pin);
dataWrite[7] = digitalRead(s3Pin);
if (radio.write(dataWrite, sizeof(dataWrite))) //si une connexion est faite: allumer la LED de connexion
{
digitalWrite(led3Pin, HIGH);
delay(20); //fait clignoter la LED
digitalWrite(led3Pin, LOW);
}
analogWrite(led1Pin, map(dataWrite[0], 0, 1023, 0, 255));
analogWrite(led2Pin, map(dataWrite[1], 0, 1023, 0, 255)); //pas obligatoire
}
/*Ce script permet la reception des paquets de la telcommande.
Ce code est celui du recepteur*/
#include
#include "RF24.h"
RF24 radio(9, 10); //broche de connexion a l'arduino
const byte addresses[6] = "Free1";
const int dirServoPin = 2;
byte dirServoOffset = 0;
const int dirAPin = 7,
pwmAPin = 6,
dirBPin = 4,
pwmBPin = 5,
snsAPin = A0,
snsBPin = A1,
buzzerPin = 3,
ledRPin = A3,
ledGPin = A4,
ledBPin = A5;
const byte motorSpeed = 255;
#define FORWARD LOW
#define BACKWARD HIGH
int dataRead[8]; //initialise le canal d'interaction entre les deux modules NRF24-L01.
const unsigned long wirelessOvertime = 200;
unsigned long lastReceivedSignal;
int relais = 8; //initialise le relaie a la broche 8 de l'arduino
void setup() {
Serial.begin(115200);
radio.begin(); //initialise la communication
radio.setPALevel(RF24_PA_LOW);
radio.setDataRate(RF24_1MBPS);
radio.setRetries(0, 15);
radio.openWritingPipe(addresses);
radio.openReadingPipe(1, addresses);
radio.startListening();
pinMode(ledRPin, OUTPUT);
pinMode(ledGPin, OUTPUT);
pinMode(ledBPin, OUTPUT);
digitalWrite(ledRPin, HIGH);
digitalWrite(ledGPin, HIGH);
digitalWrite(ledBPin, HIGH);
pinMode(relais, OUTPUT); //initialise le relaie en mode OUPUT
}
void loop()
{
if ( radio.available()) { //si les donnees sont bien recu:
while (radio.available()) { //lire les donnees
radio.read(dataRead, sizeof(dataRead));
}
//controle du relais par les boutons
if (!dataRead[6]){ //si la bouton est presse sur la telecommande
digitalWrite(relais, HIGH); //fermer le relai
}else{
digitalWrite(relais, LOW);} //si le bouton n'est pas presse, ouvrir le relai
lastReceivedSignal = millis();
}
else {
if (millis() - lastReceivedSignal >= wirelessOvertime) {
analogWrite(pwmAPin, 0);
analogWrite(pwmBPin, 0);
// eteind le buzzer
noTone(buzzerPin);
// turn off the RGB LED
digitalWrite(ledRPin, HIGH);
digitalWrite(ledGPin, HIGH);
digitalWrite(ledBPin, HIGH);
}
}
}