Sebuahhobi98

2NodeNRF24L01

Nov 3rd, 2020
1,038
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*
  2.    #  => Send to Gateway  //index 0
  3.    A => Send to Node A    //index 0
  4.    B => Send to Node B... //index 0
  5.  
  6.    client to Gateway
  7.    e.g: sender("#27.91314ABCDE");
  8.    data.substring(0, 1); //node tujuan
  9.    data.substring(1, 5); //nilai suhu
  10.    data.substring(5, 7); //jam
  11.    data.substring(7, 9); // menit
  12.    data.substring(9); //  Jalur Node
  13.    sync feedback: sender("#sync");
  14.  
  15.    Gateway to client
  16.  
  17.    e.g: sender("Ar1=1"); //Relay
  18.    data.substring(0, 1); //node tujuan
  19.    data.substring(1, 3); //kode relay
  20.    data.substring(4, 5);  //status relay
  21.  
  22.    e.g: sender("Async"); //cek status node aktif tidak
  23.    data.substring(0, 1); //node tujuan
  24.    data.substring(1);
  25.  
  26.    A  => Node A
  27.    B  => Node B
  28.    C  => Node C
  29.    D  => Node D
  30.    E  => Node E
  31.    F  => Gateway
  32. */
  33.  
  34. /*OLED Display*/
  35. //#include <Wire.h>
  36. #include <Adafruit_GFX.h>
  37. #include <Adafruit_SSD1306.h>
  38.  
  39. // Color definitions
  40. #define BLACK 0x0000
  41. #define BLUE 0x001F
  42. #define RED 0xF800
  43. #define GREEN 0x07E0
  44. #define CYAN 0x07FF
  45. #define MAGENTA 0xF81F
  46. #define YELLOW 0xFFE0
  47. #define SCREEN_WIDTH 128 // OLED display width, in pixels
  48. #define SCREEN_HEIGHT 64 // OLED display height, in pixels
  49.  
  50. // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)
  51. #define SDA A4
  52. #define SCL A5
  53. Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
  54.  
  55. /*RTC*/
  56. #include "RTClib.h"
  57. RTC_DS3231 rtc;
  58. char weekDay[][7] = {"AHAD", "SENIN", "SELASA", "RABU", "KAMIS", "JUM'AT", "SABTU", "AHAD"}; // array hari, dihitung mulai dari senin, hari senin angka nya =0,
  59. char monthYear[][4] = { "DES", "JAN", "FEB", "MAR", "APR", "MEI", "JUN", "JUL", "AGU", "SEP", "OKT", "NOV", "DES" };
  60. /**/
  61.  
  62. /*SENSOR*/
  63. #include <OneWire.h> //library OneWire
  64. #include <DallasTemperature.h>
  65. #define ONE_WIRE_BUS A3
  66. OneWire oneWire(ONE_WIRE_BUS);
  67. DallasTemperature sensors(&oneWire);
  68. float Celcius = 0;
  69. /**/
  70.  
  71. /*EEPROM*/
  72. #include <EEPROM.h>
  73. byte channel = 101;
  74.  
  75. /*Pin Switch*/
  76. #define S1 6
  77.  
  78. /*Relay*/
  79. #define r1 2
  80. #define r2 3
  81. #define r3 4
  82.  
  83. /*Multi Task*/
  84. unsigned long previousMillis1 = 0; // millis() returns an unsigned long.
  85. unsigned long previousMillis2 = 0; // millis() returns an unsigned long.
  86. unsigned long previousMillis3 = 0;
  87. unsigned long previousMillis4 = 0;
  88. unsigned long previousMillis5 = 0;
  89.  
  90. /*Radio*/
  91. #include  <SPI.h>
  92. #include "nRF24L01.h"
  93. #include "RF24.h"
  94. RF24 radioReceived(7, 8); // CE, CSN
  95. RF24 radioSender(9, 10); // CE, CSN
  96. //RF24 radio(7, 8, 13, 12, 11);
  97.  
  98. const byte pipes[][6] = {"1000", "2000", "3000", "4000", "5000", "6000"};
  99.  
  100. char msg[32];
  101.  
  102. void configReceived() {
  103.   //  radioReceived.begin();
  104.   display.clearDisplay();
  105.   display.setTextColor(WHITE);
  106.   display.setTextSize(1);
  107.   display.setCursor(0, 10);
  108.   if (!radioReceived.begin()) {
  109.     display.println("radioReceived failed");
  110.     display.display();
  111.     for (;;);
  112.   }
  113.   if (radioReceived.isChipConnected()) {
  114.     display.println("radioReceived is connected");
  115.     display.display();
  116.   }
  117.   radioReceived.setChannel(channel);
  118.   radioReceived.setPayloadSize(32);
  119.   radioReceived.setPALevel(RF24_PA_MAX);
  120.   radioReceived.setDataRate(RF24_250KBPS);
  121.   radioReceived.openReadingPipe(0, pipes[4]); //B
  122.   //  radioSender.enableAckPayload();
  123.   radioReceived.startListening();
  124. }
  125.  
  126. void configSender() {
  127.   //  radioSender.begin();
  128.   display.setCursor(0, 40);
  129.   if (!radioSender.begin()) {
  130.     display.println("radioSender failed");
  131.     display.display();
  132.     for (;;);
  133.   }
  134.   if (radioSender.isChipConnected()) {
  135.     display.println("radioSender is connected");
  136.     display.display();
  137.   }
  138.   radioSender.setChannel(channel);
  139.   radioSender.setPayloadSize(32);
  140.   radioSender.setDataRate(RF24_250KBPS);
  141.   radioSender.setPALevel(RF24_PA_MAX);
  142.   //  radioSender.enableAckPayload();
  143.   radioSender.stopListening();
  144. }
  145. void stateRelay() {
  146.   if (EEPROM.read(r1) == 1) {
  147.     digitalWrite(r1, HIGH);
  148.   } else {
  149.     digitalWrite(r1, LOW);
  150.   }
  151.  
  152.   if (EEPROM.read(r2) == 1) {
  153.     digitalWrite(r2, HIGH);
  154.   } else {
  155.     digitalWrite(r2, LOW);
  156.   }
  157.  
  158.   if (EEPROM.read(r3) == 1) {
  159.     digitalWrite(r3, HIGH);
  160.   } else {
  161.     digitalWrite(r3, LOW);
  162.   }
  163. }
  164. void(* resetFunc) (void) = 0;
  165.  
  166. const String this_node = "E";
  167. void setup() {
  168.   //Serial.begin(115200);
  169.   //Serial.println("#################################################");
  170.   //Serial.println("Ready");
  171.  
  172.   if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { // Address 0x3D for 128x64
  173.     //Serial.println(F("SSD1306 allocation failed"));
  174.     for (;;);
  175.   }
  176.  
  177.   configReceived();
  178.   configSender();
  179.   delay(2000);
  180.   sensors.begin();
  181.   if (!rtc.begin()) {
  182.     //Serial.println("RTC allocation failed");
  183.     for (;;);
  184.   } else {
  185.     //Serial.println("RTC OK");
  186.   }
  187.   //rtc.adjust(DateTime(2020, 10, 31, 2, 5, 0));
  188.  
  189.   pinMode(S1, INPUT_PULLUP);
  190.   pinMode(r1, OUTPUT);
  191.   pinMode(r2, OUTPUT);
  192.   pinMode(r3, OUTPUT);
  193.  
  194.   stateRelay();
  195.  
  196.   display.clearDisplay();
  197.   display.setTextColor(WHITE);
  198.   display.setTextSize(1);
  199.   display.setCursor(0, 0);
  200.   display.print(EEPROM.read(r1));
  201.   display.setCursor(0, 10);
  202.   display.print(EEPROM.read(r2));
  203.   display.setCursor(0, 20);
  204.   display.print(EEPROM.read(r3));
  205.   display.display();
  206.   delay(2000);
  207.   display.clearDisplay();
  208.   //Serial.println("Ready all");
  209. }
  210.  
  211. void loop() {
  212.   radio_read();
  213.   int readS1 = digitalRead(S1);
  214.   ////Serial.println(readS1);
  215.   if (readS1 == LOW) {
  216.     sender("#27,9393E", 5);
  217.     delay(1000);
  218.   }
  219.  
  220. }
  221. void sender(String d, byte pipe) {
  222.   display.setCursor(0, 20);
  223.   display.print("Writing: "); display.print(d);
  224.   display.display();
  225.   d.toCharArray(msg, sizeof(msg));
  226.   radioSender.openWritingPipe(pipes[pipe]);
  227.   radioSender.stopListening();
  228.   byte cek = radioSender.write(msg, sizeof(msg));
  229.  
  230.   /*while (cek == 0) {
  231.     cek = radioSender.write(msg, sizeof(msg));
  232.     }*/
  233.   //  delayMicroseconds(130);
  234.   delay(130);
  235. }
  236. byte u = 0;
  237. String temp;
  238. void radio_read() {
  239.   delay(5);
  240.   byte pipe_num = 0;
  241.   //if (radioReceived.available(&pipe_num)) {
  242.     while (radioReceived.available()) {
  243.       display.clearDisplay();
  244.       display.setTextColor(WHITE);
  245.       display.setTextSize(1);
  246.  
  247.       display.setCursor(0, 0);
  248.       display.print("Reading....");
  249.      
  250.       radioReceived.read(msg, sizeof(msg));
  251.       String data = String(msg);
  252.  
  253.       display.setCursor(0, 10);
  254.       display.print("Data: "); display.println(data);
  255.       if (data.substring(0, 1) == this_node) {
  256.         if (data.substring(1, 3) == "r1") {
  257.           if (data.substring(4, 5) == "1") {
  258.             digitalWrite(r1, HIGH);
  259.             EEPROM.update(r1, 1);
  260.           } else {
  261.             digitalWrite(r1, LOW);
  262.             EEPROM.update(r1, 0);
  263.           }
  264.         } else if (data.substring(1, 3) == "r2") {
  265.           if (data.substring(4, 5) == "1") {
  266.             digitalWrite(r2, HIGH);
  267.             EEPROM.update(r2, 1);
  268.           } else {
  269.             digitalWrite(r2, LOW);
  270.             EEPROM.update(r2, 0);
  271.           }
  272.         } else if (data.substring(1, 3) == "r3") {
  273.           if (data.substring(4, 5) == "1") {
  274.             digitalWrite(r3, HIGH);
  275.             EEPROM.update(r3, 1);
  276.           } else {
  277.             digitalWrite(r3, LOW);
  278.             EEPROM.update(r3, 0);
  279.           }
  280.         } else if (data.substring(1) == "sync") {
  281.           String n = "#";
  282.           n += this_node;
  283.           n += "sync";
  284.           temp = "Send A&D";
  285.           sender(n, 5); // send F
  286.         }
  287.       } else if (data.substring(0, 1) == "#") { //from C or D
  288.         String n = data;
  289.         n += this_node;
  290.         temp = "Forwad E";
  291.         sender(n, 5); //send C
  292.         u++;
  293.       } else if (data.substring(0, 1) == "C") { //from F
  294.         temp = "Send C";
  295.         sender(data, 2); //send C
  296.         u++;
  297.       } else if (data.substring(0, 1) == "D") { //from F
  298.         temp = "Send D";
  299.         sender(data, 3); //send D
  300.         u++;
  301.       } else if (data.substring(0, 1) == "A" || data.substring(0, 1) == "B") { //from F
  302.         temp = "Send C&D";
  303.         sender(data, 2); //send C
  304.         delay(1000);
  305.         sender(data, 3); //send D
  306.         u++;
  307.       } else {
  308.         temp = "Send C&D";
  309.         sender(data, 2); //send C
  310.         delay(1000);
  311.         sender(data, 3); //send D
  312.         u++;
  313.       }
  314.       display.setCursor(0, 30);
  315.       display.print("Temp: "); display.print(temp);
  316.       display.setCursor(0, 50);
  317.       display.print("Sender: "); display.print("Berhasil-"); display.print(u);
  318.       display.display();
  319.       temp = "";
  320.       delay(100);
  321.     }
  322.   //}
  323. }
  324.  
RAW Paste Data