Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <RFM69.h>
- #include <SPI.h>
- // Addresses for this node. CHANGE THESE FOR EACH NODE!
- #define NETWORKID 0 // Must be the same for all nodes
- #define MYNODEID 2 // My node ID
- #define TONODEID 1 // Destination node ID
- // RFM69 frequency, uncomment the frequency of your module:
- #define FREQUENCY RF69_433MHZ
- //#define FREQUENCY RF69_915MHZ
- // AES encryption (or not):
- #define ENCRYPT false // Set to "true" to use encryption
- #define ENCRYPTKEY "TOPSECRETPASSWRD" // Use the same 16-byte key on all nodes
- // Use ACKnowledge when sending messages (or not):
- #define USEACK true // Request ACKs or not
- // Packet sent/received indicator LED (optional):
- #define LED 5 // LED positive pin
- //#define GND 8 // LED ground pin
- // Create a library object for our RFM69HCW module:
- RFM69 radio;
- void setup()
- {
- // Open a serial port so we can send keystrokes to the module:
- Serial.begin(9600);
- Serial.print("Node ");
- Serial.print(MYNODEID,DEC);
- Serial.println(" ready");
- // Set up the indicator LED (optional):
- pinMode(LED,OUTPUT);
- digitalWrite(LED,LOW);
- //pinMode(GND,OUTPUT);
- //digitalWrite(GND,LOW);
- // Initialize the RFM69HCW:
- // radio.setCS(10); //uncomment this if using Pro Micro
- radio.initialize(FREQUENCY, MYNODEID, NETWORKID);
- radio.setHighPower(); // Always use this for RFM69HCW
- // Turn on encryption if desired:
- if (ENCRYPT)
- radio.encrypt(ENCRYPTKEY);
- }
- void loop()
- {
- // Set up a "buffer" for characters that we'll send:
- static char sendbuffer[62];
- static int sendlength = 0;
- // SENDING
- // In this section, we'll gather serial characters and
- // send them to the other node if we (1) get a carriage return,
- // or (2) the buffer is full (61 characters).
- // If there is any serial input, add it to the buffer:
- if (Serial.available() > 0)
- {
- char input = Serial.read();
- if (input != '\r') // not a carriage return
- {
- sendbuffer[sendlength] = input;
- sendlength++;
- }
- // If the input is a carriage return, or the buffer is full:
- if ((input == '\r') || (sendlength == 61)) // CR or buffer full
- {
- // Send the packet!
- Serial.print("sending to node ");
- Serial.print(TONODEID, DEC);
- Serial.print(", message [");
- for (byte i = 0; i < sendlength; i++)
- Serial.print(sendbuffer[i]);
- Serial.println("]");
- // There are two ways to send packets. If you want
- // acknowledgements, use sendWithRetry():
- if (USEACK)
- {
- if (radio.sendWithRetry(TONODEID, sendbuffer, sendlength))
- Serial.println("ACK received!");
- else
- Serial.println("no ACK received");
- }
- // If you don't need acknowledgements, just use send():
- else // don't use ACK
- {
- Serial.print("next ");
- radio.send(TONODEID, sendbuffer, sendlength);
- }
- sendlength = 0; // reset the packet
- // digitalWrite(LED,HIGH);
- // delay(1000);
- // digitalWrite(LED,LOW);
- Serial.print("next1 ");
- }
- }
- // RECEIVING
- // In this section, we'll check with the RFM69HCW to see
- // if it has received any packets:
- if (radio.receiveDone()) // Got one!
- {
- // Print out the information:
- Serial.print("received from node ");
- Serial.print(radio.SENDERID, DEC);
- Serial.print(", message [");
- // The actual message is contained in the DATA array,
- // and is DATALEN bytes in size:
- for (byte i = 0; i < radio.DATALEN; i++)
- Serial.print((char)radio.DATA[i]);
- // RSSI is the "Receive Signal Strength Indicator",
- // smaller numbers mean higher power.
- Serial.print("], RSSI ");
- Serial.println(radio.RSSI);
- // Send an ACK if requested.
- // (You don't need this code if you're not using ACKs.)
- if (radio.ACKRequested())
- {
- radio.sendACK();
- Serial.println("ACK sent");
- }
- digitalWrite(LED,HIGH);
- delay(1000);
- digitalWrite(LED,LOW);
- }
- }
- /*void Blink(byte PIN, int DELAY_MS)
- // Blink an LED for a given number of ms
- {
- digitalWrite(PIN,HIGH);
- delay(DELAY_MS);
- digitalWrite(PIN,LOW);
- }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement