]> kolegite.com Git - vmks.git/commitdiff
NRf24 demo
authorgzafirov <gzafirov@elsys-bg.org>
Sat, 2 Dec 2023 10:21:00 +0000 (12:21 +0200)
committergzafirov <gzafirov@elsys-bg.org>
Sat, 2 Dec 2023 10:21:00 +0000 (12:21 +0200)
Workshops/NRF24_RX_TX_Simple_demo/GettingStartedRF24Nano_RX/GettingStartedRF24Nano.ino [new file with mode: 0644]
Workshops/NRF24_RX_TX_Simple_demo/GettingStartedRF24_TX/GettingStartedRF24.ino [new file with mode: 0644]

diff --git a/Workshops/NRF24_RX_TX_Simple_demo/GettingStartedRF24Nano_RX/GettingStartedRF24Nano.ino b/Workshops/NRF24_RX_TX_Simple_demo/GettingStartedRF24Nano_RX/GettingStartedRF24Nano.ino
new file mode 100644 (file)
index 0000000..a4da003
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * See documentation at https://nRF24.github.io/RF24
+ * See License information at root directory of this library
+ * Author: Brendan Doherty (2bndy5)
+ */
+
+/**
+ * A simple example of sending data from 1 nRF24L01 transceiver to another.
+ *
+ * This example was written to be used on 2 devices acting as "nodes".
+ * Use the Serial Monitor to change each node's behavior.
+ */
+#include <SPI.h>
+#include "printf.h"
+#include "RF24.h"
+
+#define CE_PIN 8
+#define CSN_PIN 9
+// instantiate an object for the nRF24L01 transceiver
+RF24 radio(CE_PIN, CSN_PIN);
+
+// Let these addresses be used for the pair
+uint8_t address[][6] = { "1Node", "2Node" };
+// It is very helpful to think of an address as a path instead of as
+// an identifying device destination
+
+// to use different addresses on a pair of radios, we need a variable to
+// uniquely identify which address this radio will use to transmit
+bool radioNumber = 1;  // 0 uses address[0] to transmit, 1 uses address[1] to transmit
+
+// Used to control whether this node is sending or receiving
+bool role = false;  // true = TX role, false = RX role
+
+// For this example, we'll be using a payload containing
+// a single float number that will be incremented
+// on every successful transmission
+uint16_t payload = 0;
+
+void setup() {
+
+  pinMode(A5, OUTPUT);
+  digitalWrite(A5, HIGH);
+
+  pinMode(A3, OUTPUT);
+  digitalWrite(A3, HIGH);
+
+  Serial.begin(115200);
+  while (!Serial) {
+    // some boards need to wait to ensure access to serial over USB
+  }
+
+  // initialize the transceiver on the SPI bus
+  if (!radio.begin()) 
+  {
+    Serial.println(F("radio hardware is not responding!!"));
+    while (1) {}  // hold in infinite loop
+  }
+
+  // print example's introductory prompt
+  Serial.println(F("RF24/examples/GettingStarted"));
+
+  // To set the radioNumber via the Serial monitor on startup
+  // Serial.println(F("Which radio is this? Enter '0' or '1'. Defaults to '0'"));
+  // while (!Serial.available()) {
+  //   // wait for user input
+  // }
+  //char input = Serial.parseInt();
+  //radioNumber = input == 1;
+  Serial.print(F("radioNumber = "));
+  Serial.println((int)radioNumber);
+
+  // role variable is hardcoded to RX behavior, inform the user of this
+  Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));
+
+  // Set the PA Level low to try preventing power supply related problems
+  // because these examples are likely run with nodes in close proximity to
+  // each other.
+  radio.setPALevel(RF24_PA_LOW);  // RF24_PA_MAX is default.
+
+  // save on transmission time by setting the radio to only transmit the
+  // number of bytes we need to transmit a float
+  radio.setPayloadSize(sizeof(payload));  // float datatype occupies 4 bytes
+
+  // set the TX address of the RX node into the TX pipe
+  radio.openWritingPipe(address[radioNumber]);  // always uses pipe 0
+
+  // set the RX address of the TX node into a RX pipe
+  radio.openReadingPipe(1, address[!radioNumber]);  // using pipe 1
+
+
+  radio.startListening();  // put radio in RX mode
+
+  // For debugging info
+  // printf_begin();             // needed only once for printing details
+  // radio.printDetails();       // (smaller) function that prints raw register values
+  // radio.printPrettyDetails(); // (larger) function that prints human readable data
+
+}  // setup
+
+void loop() 
+{
+    uint8_t pipe;
+    if (radio.available(&pipe)) 
+    {              // is there a payload? get the pipe number that recieved it
+      uint8_t bytes = radio.getPayloadSize();  // get the size of the payload
+      radio.read(&payload, bytes);             // fetch payload from FIFO
+      Serial.print(F("Received "));
+      Serial.print(bytes);  // print the size of the payload
+      Serial.print(F(" bytes on pipe "));
+      Serial.print(pipe);  // print the pipe number
+      Serial.print(F(": "));
+      Serial.println(payload);  // print the payload's value
+
+      if (payload == 1) 
+      {
+       digitalWrite(A5, !digitalRead(A5));
+      }
+      
+      if (payload == 2) 
+      {
+       digitalWrite(A3, !digitalRead(A3));
+      }
+
+    }
+  
+
+
+}  
diff --git a/Workshops/NRF24_RX_TX_Simple_demo/GettingStartedRF24_TX/GettingStartedRF24.ino b/Workshops/NRF24_RX_TX_Simple_demo/GettingStartedRF24_TX/GettingStartedRF24.ino
new file mode 100644 (file)
index 0000000..db2cea9
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * See documentation at https://nRF24.github.io/RF24
+ * See License information at root directory of this library
+ * Author: Brendan Doherty (2bndy5)
+ */
+
+/**
+ * A simple example of sending data from 1 nRF24L01 transceiver to another.
+ *
+ * This example was written to be used on 2 devices acting as "nodes".
+ * Use the Serial Monitor to change each node's behavior.
+ */
+#include <SPI.h>
+#include "printf.h"
+#include "RF24.h"
+
+#define CE_PIN 8
+#define CSN_PIN 9
+// instantiate an object for the nRF24L01 transceiver
+RF24 radio(CE_PIN, CSN_PIN);
+
+// Let these addresses be used for the pair
+uint8_t address[][6] = { "1Node", "2Node" };
+// It is very helpful to think of an address as a path instead of as
+// an identifying device destination
+
+// to use different addresses on a pair of radios, we need a variable to
+// uniquely identify which address this radio will use to transmit
+bool radioNumber = 1;  // 0 uses address[0] to transmit, 1 uses address[1] to transmit
+
+// Used to control whether this node is sending or receiving
+bool role = true;  // true = TX role, false = RX role
+
+// For this example, we'll be using a payload containing
+// a single float number that will be incremented
+// on every successful transmission
+uint16_t payload = 0;
+
+void setup() 
+{
+  pinMode(A1, INPUT_PULLUP);
+  pinMode(A2, INPUT_PULLUP);
+
+  Serial.begin(115200);
+  while (!Serial) {
+    // some boards need to wait to ensure access to serial over USB
+  }
+
+  // initialize the transceiver on the SPI bus
+  if (!radio.begin()) {
+    Serial.println(F("radio hardware is not responding!!"));
+    while (1) {}  // hold in infinite loop
+  }
+
+  // print example's introductory prompt
+  Serial.println(F("RF24/examples/GettingStarted"));
+
+  // To set the radioNumber via the Serial monitor on startup
+  // while (!Serial.available()) {
+  //   // wait for user input
+  // }
+  // char input = Serial.parseInt();
+  radioNumber = 0;
+  Serial.print(F("radioNumber = "));
+  Serial.println((int)radioNumber);
+
+  // role variable is hardcoded to RX behavior, inform the user of this
+  Serial.println(F("*** PRESS 'T' to begin transmitting to the other node"));
+
+  // Set the PA Level low to try preventing power supply related problems
+  // because these examples are likely run with nodes in close proximity to
+  // each other.
+  radio.setPALevel(RF24_PA_LOW);  // RF24_PA_MAX is default.
+
+  // save on transmission time by setting the radio to only transmit the
+  // number of bytes we need to transmit a float
+  radio.setPayloadSize(sizeof(payload));  // float datatype occupies 4 bytes
+
+  // set the TX address of the RX node into the TX pipe
+  radio.openWritingPipe(address[radioNumber]);  // always uses pipe 0
+
+  // set the RX address of the TX node into a RX pipe
+  radio.openReadingPipe(1, address[!radioNumber]);  // using pipe 1
+
+  // additional setup specific to the node's role
+  radio.stopListening();  // put radio in TX mode
+  
+
+  // For debugging info
+  // printf_begin();             // needed only once for printing details
+  // radio.printDetails();       // (smaller) function that prints raw register values
+  // radio.printPrettyDetails(); // (larger) function that prints human readable data
+
+}  // setup
+
+void loop() {
+
+    if (!digitalRead(A1)) 
+    {
+      payload = 1;
+    } else if (!digitalRead(A2)) 
+    {
+      payload = 2;
+    }
+    else {
+    payload = 0;
+    }
+
+    unsigned long start_timer = micros();                // start the timer
+    bool report = radio.write(&payload, sizeof(payload));  // transmit & save the report
+    unsigned long end_timer = micros();                  // end the timer
+
+    if (report) {
+      Serial.print(F("Transmission successful! "));  // payload was delivered
+      Serial.print(F("Time to transmit = "));
+      Serial.print(end_timer - start_timer);  // print the timer result
+      Serial.print(F(" us. Sent: "));
+      Serial.println(payload);  // print payload sent
+      payload += 1;          // increment float payload
+    } else {
+      Serial.println(F("Transmission failed or timed out"));  // payload was not delivered
+    }
+
+    // to make this example readable in the serial monitor
+    delay(250);  // slow transmissions down by 1 second
+
+}