Advertisement
TolentinoCotesta

nRF24, battery

Jul 14th, 2018
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.29 KB | None | 0 0
  1. #include <RF24.h>
  2. #include <RF24Network.h>
  3.  
  4. #define BLOCK_SIZE 16
  5. byte payload[BLOCK_SIZE];   // TX buffer
  6. byte rxBuffer[BLOCK_SIZE];  // RX buffer
  7.  
  8. // Only for have numbers of bytes in payload with human readable names
  9. enum payloadPointer { _NodeH = 0, _NodeL = 1, _Battery = 2, _MsgType = 3, _MsgVal = 4};
  10. enum messageType { CMD0 = 10, CMD1 = 11, CMD2 = 12, CMD3 = 13, CMD4 = 14, CMD5 = 15 };
  11.  
  12. unsigned long TimeStamp = 9999;
  13. unsigned long RxTimeout = 0;
  14.  
  15. // SCK = 13, MOSI = 11, MISO = 12.
  16. RF24 radio(10,9);                   // (CE, SSN) nRF24L01(+) radio attached using Getting Started board
  17. RF24Network network(radio);         // Network uses that radio
  18. const uint16_t master_node = 00;    // Address of the other node in Octal format
  19. uint16_t this_node = 01;            // Address of our node in Octal format ( 04,031, etc)
  20. unsigned long t1, t2;
  21. uint16_t battery = 0;
  22.  
  23.  
  24.  
  25. // ***************************************************************************************************** //
  26. // *****************************************    SETUP   ************************************************ //
  27. // ***************************************************************************************************** //
  28. void setup(){    
  29.   analogReference(INTERNAL);    
  30.  
  31.   Serial.begin(115200);
  32.   Serial.println();  
  33.  
  34.   Serial.print(F("Node address: "));
  35.   Serial.println(this_node);
  36.  
  37.   // Init nRF24 Network
  38.   SPI.begin();
  39.   radio.begin();
  40.   radio.setRetries(5, 10);  
  41.   radio.setDataRate(RF24_250KBPS);
  42.   network.begin(/*channel*/ 90, /*node address*/ this_node);
  43. }
  44.  
  45.  
  46.  
  47. // ***************************************************************************************************** //
  48. // *****************************************    LOOP   ************************************************* //
  49. // ***************************************************************************************************** //
  50.  
  51. void loop(){  
  52.   // Get data from nRF24L01+
  53.   getRadioData();  
  54.  
  55.   // First info: node address
  56.   payload[_NodeH] = (byte)((this_node >> 8) & 0xff);
  57.   payload[_NodeL] = (byte)(this_node & 0xff);
  58.      
  59.   battery = readVcc();    
  60.   Serial.print(F("Battery mV: "));
  61.   Serial.println(battery);
  62.  
  63.   // Now the battery level
  64.   payload[_Battery + 0] = (byte)((battery >> 8) & 0xff);                
  65.   payload[_Battery + 1] = (byte)(battery & 0xff);    
  66.  
  67.   // And finally message type + value
  68.   payload[_MsgType] = CMD0;  
  69.   payload[_MsgVal] = 0;  
  70.  
  71.   // Now we can send the payload buffer fitted with info
  72.   Serial.print(F("Send message: "));    
  73.   if( sendRadioData()) {
  74.     Serial.print(F(" ..OK"));    
  75.   }
  76.   else {    
  77.     Serial.print(F(" ..Fail"));                      
  78.   }    
  79.  
  80.   delay(100);      
  81. }
  82.  
  83.  
  84. // ***************************************************************************************************** //
  85. // *****************************************    RF24   ************************************************* //
  86. // ***************************************************************************************************** //
  87. void getRadioData(void) {  
  88.   network.update();  
  89.   while (network.available()) {    
  90.     RF24NetworkHeader Header;
  91.     network.peek(Header);    
  92.     if (Header.to_node == this_node) {
  93.       network.read(Header, &rxBuffer, sizeof(rxBuffer));
  94.       // DEBUG
  95.       Serial.print(F("\nrxBuffer:"));
  96.       printHex(payload, BLOCK_SIZE);
  97.     }
  98.   }  
  99. }
  100.  
  101.  
  102. bool sendRadioData() {
  103.   bool TxOK = false;
  104.  
  105.   // DEBUG
  106.   Serial.print("\nPayload: ");
  107.   printHex(payload, BLOCK_SIZE);
  108.  
  109.   RF24NetworkHeader header(/*to node*/ master_node);
  110.   if (network.write(header, &payload, sizeof(payload)))
  111.     TxOK = true;
  112.   return TxOK;  
  113. }
  114.  
  115.  
  116.  
  117. uint16_t readVcc() {
  118.   uint16_t result;
  119.   // Read 1.1V reference against AVcc
  120.   ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1);
  121.   //delayMicroseconds(50);  // Wait for Vref to settle
  122.   ADCSRA |= _BV(ADSC);    // Convert
  123.   while (bit_is_set(ADCSRA,ADSC));
  124.   result = ADCL;
  125.   result |= ADCH<<8;
  126.   result = 1126400L / result; // Back-calculate AVcc in mV
  127.   return result;
  128. }
  129.  
  130.  
  131. // Helper routine to dump a byte array as hex values to Serial.
  132. void printHex(byte *buffer, byte bufferSize) {
  133.   for (byte i = 0; i < bufferSize; i++) {
  134.     Serial.print(buffer[i] < 0x10 ? " 0" : " ");
  135.     Serial.print(buffer[i], HEX);
  136.   }
  137. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement