Salve a tutti , sto sviluppato un'applicazione su una centralina di avvitatura, infatti in base al programma richiamato tramite la porta i/o viene inviata l'informazione ad un arduino nano con modulo NF24 ad un modulo selezione bussola da prelevare, anche questo modulo è gestito da un modulo arduino nano con RF24, la corretta bussola prelevata abilita il servomezzo al lavoro, tutto è stato testato ed è funzionante, peccato che qualora il cambiobussola esce fuori dal campo di azione RF (circa 10metri) teoricamente il ricevitore perdendo contatto con l'altra unita dovrebbe bloccare il tutto ma questo non accade e rimane il servomezzo abilitato , cosa molto pericolosa in quanto si possono fare danni. Entrami i moduli RF24 lavorano in trasmissione e ricezione , avete qualche dritta da applicare su questo sketch?
ringrazio tutti per la collaborazione
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
RF24 radio(9, 10); // CE, CSN
const byte addresses [][6] = {"00001", "00002"}; // gestisci i canali di comunicazione
//configurazione ingressi e uscite, da 9 a 13 sono destinati al modulo di comunicazione
int tool_abilitato = 2; // ingresso avvitatore abilitato da centralina
int byte_set1 = 3; // ingresso pset bit0
int byte_set2 = 4; // ingresso pset bit1
int byte_set3 = 5; // ingresso pset bit2
int abilita_ciclo = 6; // uscita per abilitare avvitatore
int ledb1 = 7; // led bit 1
int ledb2 = 8; // led bit 2
int ledb3 = A0; // led bit 3
int ledtool = A1; // led avvitatore abilitato
int ledok = A2; // led ritorno cambio selezione bussola corretta
int bussola = 0;
boolean pset1_state = 0;
boolean pset2_state = 0;
boolean pset3_state = 0;
int abilita = 0;
boolean abilita_stato = 0;
int d = 0;
int tooldisab1;
void setup () {
pinMode(byte_set1, INPUT_PULLUP);
pinMode(byte_set2, INPUT_PULLUP);
pinMode(byte_set3, INPUT_PULLUP);
pinMode(tool_abilitato, INPUT_PULLUP);
pinMode(abilita_ciclo, OUTPUT);
pinMode(ledb1, OUTPUT);
pinMode(ledb2, OUTPUT);
pinMode(ledb3, OUTPUT);
pinMode(ledtool, OUTPUT);
pinMode(ledok, OUTPUT);
radio.begin(); //Starting the radio communication
radio.openWritingPipe(addresses[1]); //Setting the address at which we will send the data
radio.openReadingPipe(1, addresses[0]); //Setting the address at which we will receive the data
radio.setPALevel(RF24_PA_MIN); ////setta potenza default, RF24_PA_MIN=-18dBm, RF24_PA_LOW=-12dBm, RF24_PA_MED=-6dBM, and RF24_PA_HIGH=0dBm
}
void loop() {
pset1_state = digitalRead(byte_set1);
pset2_state = digitalRead(byte_set2);
pset3_state = digitalRead(byte_set3);
abilita_stato = digitalRead(tool_abilitato);
if (pset1_state == LOW && pset2_state == HIGH && pset3_state == HIGH) { //verifica ingressi e utilizza parametri bussola n. 1
bussola = 1;
digitalWrite(ledb1, HIGH);
digitalWrite(ledb3, LOW);
digitalWrite(ledb2, LOW);
digitalWrite(ledtool, HIGH);
delay(5);
radio.stopListening(); //This sets the module as transmitter
//button_state = digitalRead(button_pin);
radio.write(&bussola, sizeof(bussola)); //Sending the data
delay(5);
radio.startListening(); //This sets the module as receiver
while (!radio.available()); //Looking for incoming data
radio.read(&abilita, sizeof(abilita)); //Reading the data
if (abilita == 1)
{
digitalWrite(abilita_ciclo, HIGH);
digitalWrite(ledok, HIGH);
}
else
{
digitalWrite(abilita_ciclo, LOW);
digitalWrite(ledok, LOW);
}
}
if (pset1_state == HIGH && pset2_state == LOW && pset3_state == HIGH) { //verifica ingressi e utilizza parametri bussola n. 2
bussola = 2;
digitalWrite(ledb1, HIGH);
digitalWrite(ledb3, LOW);
digitalWrite(ledb2, HIGH);
digitalWrite(ledtool, HIGH);
delay(5);
radio.stopListening(); //This sets the module as transmitter
//button_state = digitalRead(button_pin);
radio.write(&bussola, sizeof(bussola)); //Sending the data
delay(5);
radio.startListening(); //This sets the module as receiver
while (!radio.available()); //Looking for incoming data
radio.read(&abilita, sizeof(abilita)); //Reading the data
if (abilita == 2)
{
digitalWrite(abilita_ciclo, HIGH);
digitalWrite(ledok, HIGH);
}
else
{
digitalWrite(abilita_ciclo, LOW);
digitalWrite(ledok, LOW);
}
}
if (pset1_state == LOW && pset2_state == LOW && pset3_state == HIGH) { //verifica ingressi e utilizza parametri bussola n. 3
bussola = 3;
digitalWrite(ledb1, HIGH);
digitalWrite(ledb3, HIGH);
digitalWrite(ledb2, LOW);
digitalWrite(ledtool, HIGH);
delay(5);
radio.stopListening(); //This sets the module as transmitter
//button_state = digitalRead(button_pin);
radio.write(&bussola, sizeof(bussola)); //Sending the data
delay(5);
radio.startListening(); //This sets the module as receiver
while (!radio.available()); //Looking for incoming data
radio.read(&abilita, sizeof(abilita)); //Reading the data
if (abilita == 3)
{
digitalWrite(abilita_ciclo, HIGH);
digitalWrite(ledok, HIGH);
}
else
{
digitalWrite(abilita_ciclo, LOW);
digitalWrite(ledok, LOW);
}
}
if (pset1_state == HIGH && pset2_state == HIGH && pset3_state == LOW) { //verifica ingressi e utilizza parametri bussola n. 4
bussola = 4;
digitalWrite(ledb1, HIGH);
digitalWrite(ledb3, HIGH);
digitalWrite(ledb2, LOW);
digitalWrite(ledtool, HIGH);
delay(5);
radio.stopListening(); //This sets the module as transmitter
//button_state = digitalRead(button_pin);
radio.write(&bussola, sizeof(bussola)); //Sending the data
delay(5);
radio.startListening(); //This sets the module as receiver
while (!radio.available()); //Looking for incoming data
radio.read(&abilita, sizeof(abilita)); //Reading the data
if (abilita == 4)
{
digitalWrite(abilita_ciclo, HIGH);
digitalWrite(ledok, HIGH);
}
else
{
digitalWrite(abilita_ciclo, LOW);
digitalWrite(ledok, LOW);
}
}
if (abilita_stato == HIGH) {
digitalWrite(ledtool, LOW);
}
}