21-12-2015, 15:28
No dobra chłopaki tak mi się nie chciało ale trudno rękawicę podniosłem to trzeba powalczyć
Napisałem programik do wysyłania danych w ilościach hurtowych z czujników serw co tam kto chce ,
dane zdeklarowane w strukturach jako int ale mogą być jako jakiekolwiek dane liczbowe byte , long .
poniżej 2 kody dla modułu 1 i 2 komunikacja w 2 kierunkach i wysyłanie danych w pakietach ,
dane są wysyłane po naciśnięciu przycisku na pinie 3 , pin 4 powoduje zapytanie i odpowiedź czyli
wysłanie danych na żądanie . program po drobnych przeróbkach niema ograniczenia ilości modułów
w chmurze .
Nadajnik 1
Nadajnik 2
Napisałem programik do wysyłania danych w ilościach hurtowych z czujników serw co tam kto chce ,
dane zdeklarowane w strukturach jako int ale mogą być jako jakiekolwiek dane liczbowe byte , long .
poniżej 2 kody dla modułu 1 i 2 komunikacja w 2 kierunkach i wysyłanie danych w pakietach ,
dane są wysyłane po naciśnięciu przycisku na pinie 3 , pin 4 powoduje zapytanie i odpowiedź czyli
wysłanie danych na żądanie . program po drobnych przeróbkach niema ograniczenia ilości modułów
w chmurze .
Nadajnik 1
Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xF0F0F0F0E1LL;
rf24_pa_dbm_e paLevel = RF24_PA_MAX;
typedef struct{ // Dane do wysłania
byte X,Y; // sygnatura nadawania i odbioru
int A,B,C,D,E,F,G,H,I;
}
W_t;
typedef struct{ // Dane odebrane
byte X,Y; // sygnatura nadawania i odbioru
int A,B,C,D,E,F,G,H,I;
}
O_t;
W_t Send_data; // Struktura danych wysłanych
O_t Recive_data; // Struktura danych odebranych
int A_1,B_1,C_1,D_1,E_1,F_1,G_1,H_1,I_1 ;
byte state = LOW;
byte state1 = LOW;
void setup() {
Serial.begin(115200);
pinMode(3 , INPUT_PULLUP);
pinMode(4 , INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(pipe);
radio.openReadingPipe(1,pipe);
radio.startListening();
delay(500);
Serial.println("gotowy NRF-1");
Send_data.Y = 0;
}
void loop() {
if ( digitalRead(3) == LOW and state == LOW ){state = HIGH;
Send_data.X = 2;Send_data.Y = 0;Radio();}
// Send_data.X = 2 określa nam moduł do którego wysyłamy dane
if ( digitalRead(3) == HIGH )state = LOW;
if ( digitalRead(4) == LOW and state1 == LOW ){state1 = HIGH;
Send_data.Y = 1;Send_data.X = 0;Radio();}
// Send_data.Y = 1 określa nam moduł który prosi o dane zwrotne
if ( digitalRead(4) == HIGH )state1 = LOW;
if (radio.available()){ // Sprawy radiowe tak ma być
bool done = false;
while (!done){
done = radio.read( &Recive_data, sizeof(Recive_data) );
Radio();}
}
}
void Radio(){
if ( Recive_data.Y > 0 ){Send_data.X = Recive_data.Y;}
// linia powyżej ustala kto wysłał zapytanie i komu odpowiedzieć
if ( Send_data.X > 0 or Send_data.Y > 0 ){
// odpowiedz jak otrzymasz zapytanie lub wyślij do ...
if (Send_data.Y > 0){Serial.print("Odpowiedz dla NRF-");Serial.println(Send_data.Y);}
if (Send_data.X > 0){Serial.print("Wysylam do NRF-");Serial.println(Send_data.X);}
Send_data.A = 11; // wyślij dane od A do I na zapytanie
Send_data.B = 12; // czyli inny modół wysyła X o wartości 1
Send_data.C = 13; // lub po naciśnięciu przycisku na pinie 4
Send_data.D = 14;
Send_data.E = 15;
Send_data.F = 16;
Send_data.G = 17;
Send_data.H = 18;
Send_data.I = 19;
Send_data.Y ;
radio.stopListening();
radio.write( &Send_data, sizeof(Send_data) );
radio.startListening();
}
if ( Recive_data.X == 1 ){
A_1 = Recive_data.A; // po odebraniu wartości X = 11
B_1 = Recive_data.B; // podstaw do zmiennych A_1 do I-1
C_1 = Recive_data.C; // wartości odebrane A - I
D_1 = Recive_data.D;
E_1 = Recive_data.E;
F_1 = Recive_data.F;
G_1 = Recive_data.G;
H_1 = Recive_data.H;
I_1 = Recive_data.I;
Print_data();
}
Recive_data.X = 0 ; // Skasuj rejestr odbioru czekaj na następne połączenie
Send_data.X = 0;
Recive_data.Y = 0;
Send_data.Y = 0;
}
void Print_data(){
Serial.println("NRF-1 odebralem");
Serial.println(A_1); // wydrukuj nasze odebrane dane
Serial.println(B_1);
Serial.println(C_1);
Serial.println(D_1);
Serial.println(E_1);
Serial.println(F_1);
Serial.println(G_1);
Serial.println(H_1);
Serial.println(I_1);
}
Nadajnik 2
Kod:
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9,10);
const uint64_t pipe = 0xF0F0F0F0E1LL;
rf24_pa_dbm_e paLevel = RF24_PA_MAX;
typedef struct{ // Dane do wysłania
byte X,Y; // sygnatura nadawania i odbioru
int A,B,C,D,E,F,G,H,I;
}
W_t;
typedef struct{ // Dane odebrane
byte X,Y; // sygnatura nadawania i odbioru
int A,B,C,D,E,F,G,H,I;
}
O_t;
W_t Send_data; // Struktura danych wysłanych
O_t Recive_data; // Struktura danych odebranych
int A_1,B_1,C_1,D_1,E_1,F_1,G_1,H_1,I_1 ;
byte state = LOW;
byte state1 = LOW;
void setup() {
Serial.begin(115200);
pinMode(3 , INPUT_PULLUP);
pinMode(4 , INPUT_PULLUP);
radio.begin();
radio.openWritingPipe(pipe);
radio.openReadingPipe(1,pipe);
radio.startListening();
delay(500);
Serial.println("gotowy NRF-2");
Send_data.Y = 0;
}
void loop() {
if ( digitalRead(3) == LOW and state == LOW ){state = HIGH;
Send_data.X = 1;Send_data.Y = 0;Radio();}
// Send_data.X = 1 określa nam moduł do którego wysyłamy dane
if ( digitalRead(3) == HIGH )state = LOW;
if ( digitalRead(4) == LOW and state1 == LOW ){state1 = HIGH;
Send_data.Y = 2;Send_data.X = 0;Radio();}
// Send_data.Y = 2 określa nam moduł który prosi o dane zwrotne
if ( digitalRead(4) == HIGH )state1 = LOW;
if (radio.available()){ // Sprawy radiowe tak ma być
bool done = false;
while (!done){
done = radio.read( &Recive_data, sizeof(Recive_data) );
Radio();}
}
}
void Radio(){
if ( Recive_data.Y > 0 ){Send_data.X = Recive_data.Y;}
// linia powyżej ustala kto wysłał zapytanie i komu odpowiedzieć
if ( Send_data.X > 0 or Send_data.Y > 0 ){
// odpowiedz jak otrzymasz zapytanie lub wyślij do ...
if (Send_data.Y > 0){Serial.print("Odpowiedz dla NRF-");Serial.println(Send_data.Y);}
if (Send_data.X > 0){Serial.print("Wysylam do NRF-");Serial.println(Send_data.X);}
Send_data.A = 21; // wyślij dane od A do I na zapytanie
Send_data.B = 22; // czyli inny modół wysyła X o wartości 1
Send_data.C = 23; // lub po naciśnięciu przycisku na pinie 4
Send_data.D = 24;
Send_data.E = 25;
Send_data.F = 26;
Send_data.G = 27;
Send_data.H = 28;
Send_data.I = 29;
Send_data.Y ;
radio.stopListening();
radio.write( &Send_data, sizeof(Send_data) );
radio.startListening();
}
if ( Recive_data.X == 2 ){
A_1 = Recive_data.A; // po odebraniu wartości X = 11
B_1 = Recive_data.B; // podstaw do zmiennych A_1 do I-1
C_1 = Recive_data.C; // wartości odebrane A - I
D_1 = Recive_data.D;
E_1 = Recive_data.E;
F_1 = Recive_data.F;
G_1 = Recive_data.G;
H_1 = Recive_data.H;
I_1 = Recive_data.I;
Print_data();
}
Recive_data.X = 0 ; // Skasuj rejestr odbioru czekaj na następne połączenie
Send_data.X = 0;
Recive_data.Y = 0;
Send_data.Y = 0;
}
void Print_data(){
Serial.println("NRF-2 odebralem");
Serial.println(A_1); // wydrukuj nasze odebrane dane
Serial.println(B_1);
Serial.println(C_1);
Serial.println(D_1);
Serial.println(E_1);
Serial.println(F_1);
Serial.println(G_1);
Serial.println(H_1);
Serial.println(I_1);
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji