25-06-2016, 17:23
Cześć, chcę podpiąć dwa moduły nrf24 na jednym arduino.
Zamysł jest taki : Wciskam przycisk, wtedy jeden moduł nadaje do drugiego. Przy odbiorze danych chcę zmieniać stan diody.
Napisałem kod ale program się zawiesza bądź bez przerwy wisi w pętli z odbiorem danych.
Może ktoś znajdzie błąd
Moduły są sprawne (sprawdzałem), połączenia przycisku i diody też są ok
Zamysł jest taki : Wciskam przycisk, wtedy jeden moduł nadaje do drugiego. Przy odbiorze danych chcę zmieniać stan diody.
Napisałem kod ale program się zawiesza bądź bez przerwy wisi w pętli z odbiorem danych.
Może ktoś znajdzie błąd
Moduły są sprawne (sprawdzałem), połączenia przycisku i diody też są ok
Kod:
#include <SPI.h> //biblioteka standradowa obsługa spi
#include "nRF24L01.h"
#include "RF24.h" // biblioteki do obsługi nrf'a
int msg1[1];
int msg2[1]; // tablice do przesyłania odbierania/danych
//CE, CSV
RF24 radio_nadajnik(7,6);
RF24 radio_odbiornik(4,5); // tworzymy obiekty dla nrf'ów (definicje pinów CS i CSV - Chip Select , CSV - tryb pracy układu)
byte addresses[][6] = {"1Node"}; //adres dla potoku (oba układy muszą mieć ten sam)
int LED1 = 3; // pin diody
int przycisk = 2;
int prev = 0;
int state = 0; // 1 - on, 0 - off
//wykrywanie obsługi przycisku
void setup(){ // instrukcje wykonywane przy starcie programu
Serial.begin(115200); //prędkość portu szeregowego (debugowania)
radio_odbiornik.begin(); //załączenie radia0 - odbiornik
radio_odbiornik.setChannel(108);
radio_odbiornik.openReadingPipe(1,addresses[0]); // otwarcie kanału
radio_odbiornik.startListening(); //załączenie odbiornika
radio_nadajnik.begin(); //załączenie radia2 - nadajnik
radio_nadajnik.setChannel(108);
radio_nadajnik.setPALevel(RF24_PA_MAX);
radio_nadajnik.openWritingPipe(addresses[0]); //otwarcie kanału
/* DEFINICJE PINÓW*/
pinMode(LED1, OUTPUT); //led
pinMode(przycisk, INPUT_PULLUP); //przycisk
}
void loop(){ // pętla główna
if (digitalRead(przycisk) == HIGH) //jeżeli jest niewciśniety
{
prev = 0; //stan poprzedni o
Serial.println("Przycisk nie wcisniety"); //wysyłamy na debug że jest niewciśnięty
}
if (digitalRead(przycisk) == LOW )//&& prev == 0) //jeżeli wciśnięty i stan poprzeni 0
{
delay(200); //czekamy 0,2s (drgania styków)
prev = 1; //stan poprzedni jako 1
state = !state; //zmieniamy wartość stanu dla leda
Serial.println("przycisk wcisniety");
// Serial.println(state); //wysyłamy sobie ten stan na konsole
if (state == 1)
{
msg1[0] = 111; // wsadź do tej naszej tablicy pomocniczej 111
radio_nadajnik.write(msg1, sizeof(msg1)); //wyślij na radio2 msg1
Serial.println("msg1=111");
}
else
{
msg1[0] = 0; // wpiszemy 0
radio_nadajnik.write(msg1, sizeof(msg1));//wysyłamy 0
Serial.println("msg1=0");
}
}
if (radio_odbiornik.available()) //Sprawdźmy czy są dane do odczytania
{
if(radio_odbiornik.available())
{
radio_odbiornik.read(msg2, sizeof(msg2)); //czytamy co nadajnik do niego nadał
Serial.println("Niby mamy jakieś dane"); //plujemy tym po debugu
if (msg2[0] == 111){//jeżeli wiadomość odebrarna jest 111
digitalWrite(LED1, HIGH); //ustaw leda na wysoki (świeci)
}
else {
digitalWrite(LED1, LOW);
Serial.println("Tylko że tu jest 0");
} //ustaw na niski
}
}
}//main loop