1 | /*
|
2 | 2.4 GHz Master
|
3 |
|
4 | Pinbelegung:
|
5 | NRF24L01 | Arduino Uno/Nano/Mini | Arduino Mega
|
6 | VCC 3.3 V 3.3 V
|
7 | GND GND GND
|
8 | CSN 8 8
|
9 | CE 7 7
|
10 | SCK 13 52
|
11 | MOSI 11 51
|
12 | MISO 12 50
|
13 | IRQ 3 3
|
14 |
|
15 |
|
16 | */
|
17 | #define SenderID 1 // Wie CAN-ID
|
18 |
|
19 |
|
20 | #include <SPI.h>
|
21 | #include <nRF24L01.h>
|
22 | #include <RF24.h>
|
23 |
|
24 |
|
25 | RF24 radio(7, 8); // CE, CSN
|
26 | #define PinIRQ 3 // Arduino Uno, Mega und Nano: Pin 3
|
27 | #define IRQ 1
|
28 | const byte addresses[][6] = {"12345", "54321"}; // Kommunikationsrichtung: {"Slave -> Master", "Master -> Slave"};
|
29 |
|
30 | unsigned long letzteUebermittelteNachricht = 0;
|
31 | unsigned long SendeIntervall = 5000;
|
32 | volatile unsigned char Empfangen[9];
|
33 | volatile byte neueNachrichtEmpfangen = false;
|
34 |
|
35 | void setup() {
|
36 | Serial.begin(115200);
|
37 | attachInterrupt(IRQ, AnkommendeNachricht, FALLING);
|
38 | radio.begin();
|
39 | radio.openWritingPipe(addresses[1]); // Mater -> Slave
|
40 | radio.openReadingPipe(1, addresses[0]); // Slave -> Master
|
41 | //radio.setPALevel(RF24_PA_MIN);
|
42 | radio.startListening();
|
43 | }
|
44 | void loop()
|
45 | {
|
46 | unsigned long aktuelleMillis = millis();
|
47 | /*************************************************************
|
48 | Nachricht senden, falls das Sendeintervall abgelaufen ist
|
49 | *************************************************************/
|
50 | if (aktuelleMillis - letzteUebermittelteNachricht > SendeIntervall)
|
51 | {
|
52 | letzteUebermittelteNachricht = aktuelleMillis;
|
53 | int LaufzeitInSekunden = aktuelleMillis / 1000;
|
54 | unsigned char Sendung[9] = {SenderID, LaufzeitInSekunden, 1, 2, 3, 4, 5, 100, 255};
|
55 | radio.stopListening();
|
56 | radio.write(&Sendung, sizeof(Sendung));
|
57 | radio.startListening();
|
58 | Serial.print("2.4 Ghz-Nachricht gesendet: ");
|
59 | for (int i = 0; i < 9; i++)
|
60 | {
|
61 | Serial.print(Sendung[i]);
|
62 | Serial.print("\t");
|
63 | }
|
64 | Serial.println();
|
65 | }
|
66 | /*************************************************************
|
67 | Prüfen ob eine Nachricht vorliegt
|
68 | *************************************************************/
|
69 | if (neueNachrichtEmpfangen)
|
70 | {
|
71 | Serial.print("2.4 Ghz-Nachricht von ID ");
|
72 | Serial.print(Empfangen[0]);
|
73 | Serial.print(" empfangen: ");
|
74 | for (int i = 1; i < sizeof(Empfangen); i++)
|
75 | {
|
76 |
|
77 | Serial.print(Empfangen[i]);
|
78 | Serial.print("\t");
|
79 | }
|
80 | Serial.println();
|
81 | neueNachrichtEmpfangen = false;
|
82 | }
|
83 | if (aktuelleMillis % 1000 == 1) // Zur Kontrolle, ob der Arduino noch läuft
|
84 | {
|
85 | Serial.println("Laeuft");
|
86 | }
|
87 | delay(1);
|
88 | }
|
89 |
|
90 | void AnkommendeNachricht()
|
91 | {
|
92 | Serial.println("Interrupt");
|
93 | radio.read(Empfangen, sizeof(Empfangen));
|
94 | neueNachrichtEmpfangen = true; // Variable setzen, dass eine neue Nachricht zur Auswertung bereit steht
|
95 | }
|