Sebuahhobi98

radioHead

Sep 8th, 2021
343
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /*RTC*/
  2. #include "RTClib.h"
  3. RTC_DS3231 rtc;
  4. char weekDay[][7] = {"AHAD", "SENIN", "SELASA", "RABU", "KAMIS", "JUM'AT", "SABTU", "AHAD"}; // array hari, dihitung mulai dari senin, hari senin angka nya =0,
  5. char monthYear[][4] = { "DES", "JAN", "FEB", "MAR", "APR", "MEI", "JUN", "JUL", "AGU", "SEP", "OKT", "NOV", "DES" };
  6. /**/
  7.  
  8. /*SENSOR*/
  9. #include <DHT.h>
  10. #define DHTTYPE DHT22
  11. #define DHTPIN 5
  12. DHT dht(DHTPIN, DHTTYPE);
  13. /**/
  14.  
  15. /*EEPROM*/
  16. #include <EEPROM.h>
  17.  
  18. /*Multi Task*/
  19. unsigned long previousMillis1 = 0;
  20. unsigned long previousMillis2 = 0;
  21. unsigned long previousMillis3 = 0;
  22. unsigned long previousMillis4 = 0;
  23. unsigned long previousMillis5 = 0;
  24.  
  25. /*Pin Switch*/
  26. #define S1 6
  27.  
  28. /*Relay*/
  29. //byte relay1 = 2;
  30. #define relay1 2
  31. #define relay2 3
  32. #define relay3 4
  33.  
  34. /*Radio Gead*/
  35. #include <RHReliableDatagram.h>
  36. #include <RH_NRF24.h>
  37. #include <SPI.h>
  38.  
  39. #define nodeA 1
  40. #define nodeB 2
  41. #define nodeC 3
  42. #define nodeD 4
  43. #define nodeE 5
  44. #define nodeF 6
  45.  
  46. // Singleton instance of the radio driver
  47. RH_NRF24 driver;
  48. // RH_NRF24 driver(8, 7);   // For RFM73 on Anarduino Mini
  49.  
  50. // Class to manage message delivery and receipt, using the driver declared above
  51. RHReliableDatagram manager(driver, nodeA);
  52.  
  53. /*OLED display*/
  54. #include <Wire.h>
  55. #include "SSD1306Ascii.h"
  56. #include "SSD1306AsciiWire.h"
  57.  
  58. #define I2C_ADDRESS 0x3C
  59. SSD1306AsciiWire oled;
  60.  
  61. void handleRelay() {
  62.   if (EEPROM.read(relay1) == 255) {
  63.     EEPROM.write(relay1, 0);
  64.   }
  65.   if (EEPROM.read(relay2) == 255) {
  66.     EEPROM.write(relay2, 0);
  67.   }
  68.   if (EEPROM.read(relay3) == 255) {
  69.     EEPROM.write(relay3, 0);
  70.   }
  71. }
  72.  
  73. void stateRelay() {
  74.   if (EEPROM.read(relay1) == 1) {
  75.     digitalWrite(relay1, HIGH);
  76.   } else {
  77.     digitalWrite(relay1, LOW);
  78.   }
  79.  
  80.   if (EEPROM.read(relay2) == 1) {
  81.     digitalWrite(relay2, HIGH);
  82.   } else {
  83.     digitalWrite(relay2, LOW);
  84.   }
  85.  
  86.   if (EEPROM.read(relay3) == 1) {
  87.     digitalWrite(relay3, HIGH);
  88.   } else {
  89.     digitalWrite(relay3, LOW);
  90.   }
  91. }
  92. void(* resetFunc) (void) = 0;
  93.  
  94. void oledConfig() {
  95.   Wire.begin();
  96.   Wire.setClock(400000L);
  97.   oled.begin(&Adafruit128x64, I2C_ADDRESS);
  98.   oled.setFont(Adafruit5x7);
  99.   oled.set2X();
  100.   oled.clear();
  101.   oled.print("Ready");
  102.   delay(1000);
  103. }
  104.  
  105. const String this_node = "A";
  106. void setup() {
  107.   //  Serial.begin(9600);
  108.   oledConfig();
  109.   pinMode(S1, INPUT_PULLUP);
  110.   pinMode(relay1, OUTPUT);
  111.   pinMode(relay2, OUTPUT);
  112.   pinMode(relay3, OUTPUT);
  113.   handleRelay();
  114.   stateRelay();
  115.  
  116.   oled.set1X();
  117.   oled.clear();
  118.   oled.setCursor(0, 0);
  119.   if (!manager.init()) {
  120.     //    Serial.println("Radio Failed");
  121.     oled.print("Radio Failed!");
  122.     for (;;);
  123.   } else {
  124.     oled.print("Radio begin");
  125.   }
  126.  
  127.   oled.setCursor(0, 1);
  128.   if (!rtc.begin()) {
  129.     //    Serial.println("RTC allocation failed");
  130.     oled.print("RTC failed!");
  131.     for (;;);
  132.   } else {
  133.     //Serial.println("RTC OK");
  134.     oled.print("RTC begin");
  135.   }
  136.   //  rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  137.   //  rtc.adjust(DateTime(2021, 4, 21, 6, 12, 30));
  138.   dht.begin();
  139.   delay(2000);
  140.   //  Serial.println("Ready All");
  141. }
  142.  
  143. uint8_t data[RH_NRF24_MAX_MESSAGE_LEN];
  144. //strcat(data, d); => append
  145. //itoa(dat, String, 10);
  146. //String str = (char*)buff;
  147. void sender(String t, byte p, String nodes) {
  148.   t.toCharArray(data, 32);
  149.   oled.clear();
  150.   oled.setCursor(0, 1);
  151.   oled.print("Writing: ");
  152.   oled.setCursor(0, 2);
  153.   oled.print(t);
  154.   oled.setCursor(0, 3);
  155.   oled.print("Sending: ");
  156.   oled.setCursor(0, 4);
  157.   oled.print((char*)data);
  158.  
  159.   oled.setCursor(0, 5);
  160.   if (manager.sendtoWait(data, sizeof(data), p)) {
  161.     oled.print("Status: "); oled.println("Berhasil");
  162.   } else {
  163.     oled.print("Status: "); oled.println("Gagal");
  164.   }
  165.   oled.setCursor(0, 6);
  166.   oled.print(nodes);
  167. }
  168.  
  169. void sender2(uint8_t* t, byte p) {
  170.   oled.setCursor(0, 1);
  171.   oled.print("Writing: "); oled.println((char*)t);
  172.  
  173.   oled.setCursor(0, 3);
  174.   if (manager.sendtoWait(t, sizeof(t), p)) {
  175.     oled.print("Status: "); oled.println("Berhasil");
  176.   } else {
  177.     oled.print("Status: "); oled.println("Gagal");
  178.   }
  179. }
  180.  
  181. void radioRead() {
  182.   if (manager.available()) {
  183.     oled.clear();
  184.     // Wait for a message addressed to us from the client
  185.     uint8_t buf[RH_NRF24_MAX_MESSAGE_LEN];
  186.     uint8_t len = sizeof(buf);
  187.     uint8_t from;
  188.     if (manager.recvfromAck(buf, &len, &from)) {
  189.       oled.setCursor(0, 0);
  190.       oled.print((char*)buf);
  191.       oled.setCursor(0, 4);
  192.       String temp = (char*)buf;
  193.       if (temp.substring(0, 1) == this_node) {
  194.         if (temp.substring(1, 3) == "r1") {
  195.           if (temp.substring(4, 5) == "1") {
  196.             digitalWrite(relay1, HIGH);
  197.             EEPROM.update(relay1, 1);
  198.             oled.print("Relay 1 On");
  199.           } else {
  200.             digitalWrite(relay1, LOW);
  201.             EEPROM.update(relay1, 0);
  202.             oled.print("Relay 1 Off");
  203.           }
  204.         } else if (temp.substring(1, 3) == "r2") {
  205.           if (temp.substring(4, 5) == "1") {
  206.             digitalWrite(relay2, HIGH);
  207.             EEPROM.update(relay2, 1);
  208.             oled.print("Relay 2 On");
  209.           } else {
  210.             digitalWrite(relay2, LOW);
  211.             EEPROM.update(relay2, 0);
  212.             oled.print("Relay 2 Off");
  213.           }
  214.         } else if (temp.substring(1, 3) == "r3") {
  215.           if (temp.substring(4, 5) == "1") {
  216.             digitalWrite(relay3, HIGH);
  217.             EEPROM.update(relay3, 1);
  218.             oled.print("Relay 3 On");
  219.           } else {
  220.             digitalWrite(relay3, LOW);
  221.             EEPROM.update(relay3, 0);
  222.             oled.print("Relay 3 Off");
  223.           }
  224.         }
  225.       } else if (temp.substring(0, 1) == "#") { //from B
  226.         String n = (char*)buf + this_node;
  227.         oled.print("Forwad C");
  228.         sender(n, nodeC, "Forwad C"); //send C
  229.       } else if (temp.substring(0, 1) == "B") {
  230.         oled.print("Forwad B");
  231.         sender(buf, nodeB, "Forwad B");
  232.       }
  233.     }
  234.   } else {
  235.     oled.setCursor(0, 6);
  236.     oled.print("Radio standby");
  237.   }
  238. }
  239.  
  240. void loop() {
  241.   DateTime now = rtc.now();
  242.   int jam   = now.hour();     //jam
  243.   int menit = now.minute(); //menit
  244.   int detik = now.second();
  245.   int thn   = now.year();         //Tahun
  246.   int bln   = now.month();
  247.   int tgl   = now.day();
  248.   radioRead();
  249.   oled.setCursor(120, 0);
  250.   oled.print(this_node);
  251.   int readS1 = digitalRead(S1);
  252.   ////Serial.println(readS1);
  253.   if (readS1 == LOW) {
  254.     sender2("#27,9393A", nodeE);
  255.     delay(1000);
  256.   }
  257.   unsigned long currentMillis = millis();
  258.   if ((unsigned long)(currentMillis - previousMillis3) >= 120000) {
  259.     float h = dht.readHumidity();
  260.     // Read temperature as Celsius (the default)
  261.     float t = dht.readTemperature();
  262.     previousMillis3 = currentMillis;
  263.     String allData = String(h, 1);
  264.     allData += String(t, 1);
  265.     if (jam < 10) {
  266.       allData += "0" + String(jam);
  267.     } else {
  268.       allData += String(jam);
  269.     }
  270.     //    allData += String(":");
  271.     if (menit < 10) {
  272.       allData += "0" + String(menit);
  273.     } else {
  274.       allData += String(menit);
  275.     }
  276.     if (detik < 10) {
  277.       allData += "0" + String(detik);
  278.     } else {
  279.       allData += String(detik);
  280.     }
  281.  
  282.     if (tgl < 10) {
  283.       allData += "0" + String(tgl);
  284.     } else {
  285.       allData += String(tgl);
  286.     }
  287.     //    allData += String("-");
  288.     if (bln < 10) {
  289.       allData += "0" + String(bln);
  290.     } else {
  291.       allData += String(bln);
  292.     }
  293.     //    allData += String("-");
  294.     allData += String(thn);
  295.     //    allData += (String) EEPROM.read(relay1);
  296.     //    allData += (String) EEPROM.read(relay2);
  297.     allData += (String) EEPROM.read(relay3);
  298.     allData += this_node;
  299.     sender("#" + allData, nodeC, "Sending data to C");
  300.     delay(1000);
  301.     sender("#" + allData, nodeB, "Sending data to B");
  302.   }
  303.   if ((unsigned long)(currentMillis - previousMillis2) >= 1000) {
  304.     previousMillis2 = currentMillis;
  305.     oled.clear();
  306.  
  307.     float h = dht.readHumidity();
  308.     // Read temperature as Celsius (the default)
  309.     float t = dht.readTemperature();
  310.     oled.setCursor(0, 0);
  311.     oled.print("H: "); oled.print(h);
  312.     oled.setCursor(0, 1);
  313.     oled.print("T: "); oled.print(t);
  314.  
  315.     String hari = String(weekDay[now.dayOfTheWeek()]);
  316.     String bulan = String(monthYear[now.month()]);
  317.     oled.setCursor(0, 3);
  318.     if (jam < 10) {
  319.       oled.print("0");
  320.     } oled.print(jam);
  321.     oled.print(":");
  322.     if (menit < 10) {
  323.       oled.print("0");
  324.     } oled.print(menit);
  325.     oled.print(":");
  326.     if (detik < 10) {
  327.       oled.print("0");
  328.     } oled.print(detik);
  329.     oled.setCursor(0, 4);
  330.     oled.print(hari); oled.print(", "); oled.print(now.day()); oled.print(" "); oled.print(bulan); oled.print(" "); oled.print(thn);
  331.   }
  332. }
  333.  
Add Comment
Please, Sign In to add comment