Salve a tutti sono un ingegnere elettronico sono nuovo sul forum e volevo chiedervi come posso sincronizzare due arduino tra di loro via radio. I miei arduino in questo caso immaginiamo A e B hanno entrambi un led e un push button e un modulo radio NRF24L01 + PA + LNA, il mio scopo è far si che quando premo uno dei due push button i led su arduino A e su arduino B inizino a lampeggiare velocemente ma in maniera sincroizzata, nel caso nessuno dei due push button è stato premuto voglio che i led invece lampeggino più lentamenete e sempre in modo sincronizzato... In breve il codice che ho scritto funziona per quanto riguarda il lampeggio dei led ma i due led non lampeggiano in contemporanea come devo risolvere??
NON MI FA CARICARE ALLEGATI QUINDI ALLEGO QUI IL CODICE:
ARDUINO A
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const int buttonPin = 3;
const int ledPin = 4;
int buttonState = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
RF24 radio(9, 10);
const byte addresses[][6] = {"00001", "00002"};
unsigned long tempo = 0;
unsigned long tempo0 = 0;
int limite = 60000; // 1 minuto
int Delay = 0;
int invio = 0;
int ricevo = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
radio.begin();
radio.openWritingPipe(addresses[1]);
radio.openReadingPipe(1, addresses[0]);
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
tempo = millis();
invio = 2;
int reading = digitalRead(buttonPin);
if (reading != buttonState) {
lastDebounceTime = millis();
}
buttonState = reading;
if ((millis() - lastDebounceTime) > debounceDelay) {
// Se il bottone è premuto
if (buttonState == HIGH) {
sendSyncSignal();// Invia un segnale al ricevitore (Arduino 2)
blinkLED(180, 1); // Lampeggia il LED per 1 minuto (1000 lampeggi al minuto)
} else {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
}
if (ricevo == 3) {
Serial.println("Ricevuto");
// Invia un segnale al ricevitore (Arduino 2)
blinkLED(180, 1); // Lampeggia il LED per 1 minuto (1000 lampeggi al minuto)
}
else {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
switch (Delay) {
case 0:
Tx();
break;
case 1:
Rx();
break;
}
}
void Tx() {
radio.startListening();
while (radio.available()) {
radio.read(&ricevo, sizeof(ricevo));
}
}
void Rx() {
radio.stopListening();
radio.write(&invio, sizeof(invio));
ricevo = 0;
}
void blinkLED(int blinkRate, int durationMinutes) {
int blinkInterval = 60000 / blinkRate;
for (int i = 0; i < blinkRate * durationMinutes; i++) {
digitalWrite(ledPin, HIGH);
delay(blinkInterval / 2);
digitalWrite(ledPin, LOW);
delay(blinkInterval / 2);
}
ricevo=0;
}
void sendSyncSignal() {
int syncSignal = 4;
radio.stopListening();
radio.write(&syncSignal, sizeof(syncSignal));
delay(100);
}
ARDUINO B
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
const int buttonPin = 3;
const int ledPin = 4;
int buttonState = 0;
unsigned long lastDebounceTime = 0;
unsigned long debounceDelay = 50;
RF24 radio(9, 10);
const byte addresses[][6] = {"00001", "00002"};
unsigned long tempo = 0;
unsigned long tempo0 = 0;
int limite = 60000; // 1 minuto
int Delay = 0;
int invio = 0;
int ricevo = 0;
void setup() {
Serial.begin(9600);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
radio.begin();
radio.openWritingPipe(addresses[0]);
radio.openReadingPipe(1, addresses[1]);
radio.setPALevel(RF24_PA_MIN);
}
void loop() {
tempo = millis();
invio = 2;
int reading = digitalRead(buttonPin);
if (reading != buttonState) {
lastDebounceTime = millis();
}
buttonState = reading;
if ((millis() - lastDebounceTime) > debounceDelay) {
// Se il bottone è premuto
if (buttonState == HIGH) {
sendSyncSignal(); // Invia un segnale al trasmettitore (Arduino 1)
blinkLED(180, 1); // Lampeggia il LED per 1 minuto (1000 lampeggi al minuto)
} else {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
}
if (ricevo == 4) {
Serial.println("Ricevuto");
// Invia un segnale al trasmettitore (Arduino 1)
blinkLED(180, 1); // Lampeggia il LED per 1 minuto (1000 lampeggi al minuto)
}
else {
digitalWrite(ledPin, HIGH);
delay(500);
digitalWrite(ledPin, LOW);
delay(500);
}
switch (Delay) {
case 0:
Tx();
break;
case 1:
Rx();
break;
}
}
void Tx() {
radio.startListening();
while (radio.available()) {
radio.read(&ricevo, sizeof(ricevo));
}
}
void Rx() {
radio.stopListening();
radio.write(&invio, sizeof(invio));
ricevo = 0;
}
void blinkLED(int blinkRate, int durationMinutes) {
int blinkInterval = 60000 / blinkRate;
for (int i = 0; i < blinkRate * durationMinutes; i++) {
digitalWrite(ledPin, HIGH);
delay(blinkInterval / 2);
digitalWrite(ledPin, LOW);
delay(blinkInterval / 2);
}
ricevo=0;
}
void sendSyncSignal() {
int syncSignal = 3;
radio.stopListening();
radio.write(&syncSignal, sizeof(syncSignal));
delay(100);
}