Advertisement
Guest User

Untitled

a guest
Mar 29th, 2020
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.08 KB | None | 0 0
  1. #include <SPI.h>
  2. #include <RF24.h>
  3. //#include <Adafruit_Sensor.h>
  4. #include <nRF24L01.h>
  5. #include <LiquidCrystal_I2C.h>
  6. LiquidCrystal_I2C lcd(0x27, 20, 4);
  7. RF24 myRadio (10, 9);
  8. byte addresses[6] = {"00001"};
  9. #define LEDDATI 5
  10. #define ACC 7
  11. #define AVV 8
  12.  
  13.  
  14.  
  15. //------------variabili pulsante----------
  16. unsigned long dopo;
  17. unsigned long radioo;
  18. //----------- dati in uscita----------
  19. struct Data
  20. {
  21. boolean mar; //sensore marcia
  22. boolean freno; //freno a mano
  23. boolean candel ; //candelette
  24. boolean olio ; //sensore olio
  25. int secondo = 00; // secondi
  26. int minuto = 00; //minuti
  27. boolean conf_acc; //conferma ricevuto comando accensione quadro
  28. boolean conf_avv; //conferma ricevuto comando accensione avviamento
  29. float humidithy = 0.0; // humi
  30. float temperature = 0.0; // temp
  31. };
  32. struct Data data;
  33. //------------variabili di confronto -----------
  34. int old_secondo = 99 ; // secondi
  35. int old_minuto = 99 ; //minuti
  36. float old_humi = 99.0; // humi
  37. float old_temp = 99.0; // temp
  38. boolean old_olio = 10 ; //"stop"
  39. boolean old_tot = 10; //"stop"
  40. boolean old_risc = 10; //"riscal"
  41. boolean old_candel ; //"pronto"
  42. boolean old_avv = 10; //"avviato"
  43. boolean old_off = 10; //"avviato"
  44. boolean old_mar = 10; //"marcia"
  45. boolean old_freno = 10; //"freno"
  46. boolean old_conf_acc = 10; //"acceso"
  47. boolean old_conf_avv = 10; //"avviato"
  48. boolean disp; //variablile lcd no connessione
  49. boolean old_lost = 10; //variablile lcd no connessione
  50. boolean old_pul_acc = 0; //pulsante quadro on off
  51.  
  52. //------------dati in arrivo------------
  53. struct Ricezione
  54. {
  55. boolean accensione; // comando accensione quadro remoto
  56. boolean avvio; // comando avviamento remoto
  57. int id;
  58. int tensione ;
  59. float ampere = 0;
  60. };
  61. struct Ricezione ricezione;
  62. void setup()
  63. {
  64. Serial.begin(115200);
  65. pinMode(LEDDATI, OUTPUT); // led dati
  66. pinMode(ACC, INPUT_PULLUP); // pulsante quadro
  67. pinMode(AVV, INPUT_PULLUP); // pulsante avvio
  68. myRadio.begin();
  69. myRadio.setChannel(115);
  70. myRadio.setPALevel(RF24_PA_MIN);
  71. myRadio.setDataRate( RF24_250KBPS ) ;
  72. myRadio.openWritingPipe( addresses); //( addresses[0]);
  73. myRadio.openReadingPipe(1, addresses); // (1, addresses[1]);
  74. lcd.init();
  75. lcd.backlight();
  76. lcd.clear();
  77. lcd.setCursor(5, 0);
  78. lcd.print("CONTROLLO");
  79. lcd.setCursor(5, 1);
  80. lcd.print("REMOTO");
  81. lcd.setCursor(5, 2);
  82. lcd.print("Start");
  83. for (int a = 4; a > 0; a--) {
  84. lcd.setCursor(a, 0); // posiziono cursore
  85. lcd.print(".");
  86. delay(100);
  87. }
  88. for (int a = 0; a < 4; a++) {
  89. lcd.setCursor(0, a); // posiziono cursore
  90. lcd.print(".");
  91. delay(100);
  92. }
  93. for (int a = 1; a < 19; a++) {
  94. lcd.setCursor(a, 3); // posiziono cursore
  95. lcd.print(".");
  96. delay(100);
  97. }
  98. for (int a = 3; a > 0; a--) {
  99. lcd.setCursor(19, a); // posiziono cursore
  100. lcd.print(".");
  101. delay(100);
  102. }
  103. for (int a = 19; a > 13; a--) {
  104. lcd.setCursor(a, 0); // posiziono cursore
  105. lcd.print(".");
  106. delay(100);
  107. }
  108. lcd.clear();
  109. }
  110. void loop() {
  111.  
  112. if (myRadio.available()) {
  113. digitalWrite(5, HIGH);
  114. while (myRadio.available()) {
  115. myRadio.read(&data, sizeof(data));
  116. }
  117. delay(5);
  118. myRadio.stopListening();
  119. myRadio.write(&ricezione, sizeof(ricezione));
  120. digitalWrite(5, LOW);
  121. }
  122. comunicazione();
  123. ricezione.id = data.secondo;
  124. pulsanti() ;
  125.  
  126. stampa ();
  127. }
  128. void pulsanti() {
  129. //------------pulsante quadro------------------------
  130. boolean pul_acc = digitalRead(ACC) ; //cosi evita i
  131. if (pul_acc == LOW && old_pul_acc == HIGH) { //rimbalzi del
  132. Serial.print("!""!!");
  133. (ricezione.accensione = true); //1 tasto
  134. }
  135. else {
  136. (ricezione.accensione = false); //0
  137. }
  138. old_pul_acc = pul_acc;
  139. //------------------pulsante avviamento-----------
  140. if (digitalRead(AVV) == LOW ) { // qui mi serve
  141. ricezione.avvio = true; // 1 il tempo
  142. } // per cui tengopremuto
  143. else {
  144. ricezione.avvio = false; // 0 spegni avviamento con timer
  145. }
  146. }
  147. void comunicazione() {
  148.  
  149. }
  150.  
  151. void stampa() {
  152.  
  153. //-----------------display-----------
  154. if (millis() - dopo <= 3000) {
  155. //disp = true;
  156. if (data.conf_acc) { // = a 1 true
  157. if (data.olio && (data.olio != old_olio || data.conf_acc != old_tot)) { // = a 1 true
  158. lcd.setCursor(16, 0); // posiziono cursore
  159. lcd.print("Stop"); //scrivi Stop
  160. }
  161. old_olio = data.olio ;
  162. // = a 1 true
  163. if ( data.candel && (data.candel != old_risc || data.conf_acc != old_tot)) { //se data.candel == 1
  164. lcd.setCursor(7, 0); // posiziono cursore
  165. lcd.print("Riscald"); //scrivi Riscald
  166. }
  167. old_risc = data.candel ;
  168. // = 0 false =1 true diverso da
  169. if (!data.candel && data.olio && data.candel != old_candel ) { //se dato freno non e' 1
  170. lcd.setCursor(7, 0); // posiziono cursore
  171. lcd.print("Pronto "); // scrivi Pronto
  172. }
  173. old_candel = !data.candel ;
  174. // = a 1 true = 0 false = 0 false
  175. if ( !data.olio && !data.candel && (data.olio != old_off && data.candel != old_avv )) {
  176. lcd.setCursor(7, 0); // posiziono cursore
  177. lcd.print("avviato "); // scrivi avviato
  178. old_avv = !data.candel ;
  179. old_off = !data.olio;
  180. } // diverso da or diverso da
  181. if (data.freno != old_freno || data.conf_acc != old_tot) { // se cambia
  182. lcd.setCursor(0, 1); // posiziono cursore
  183. if (data.freno) { // se dato freno e' 1/true
  184. lcd.print("Freno OK"); //scrivi Freno OK
  185. } else { //altrimenti
  186. lcd.print("Freno NO"); // scrivi Freno NO
  187. }
  188. old_freno = data.freno;
  189. } // diverso da
  190. if (data.conf_avv != old_conf_avv) { // se cambia
  191. lcd.setCursor(9, 1); // posiziono cursore
  192. if ( data.conf_avv) { // se data.conf_avv e' 1/true
  193. lcd.print("Avvio"); //scrivi Avvio
  194. }
  195. else { //altrimenti
  196. lcd.print(" "); // scrivi vuoto
  197. }
  198. old_conf_avv = data.conf_avv;
  199. } // diverso da or diverso da
  200. if (data.mar != old_mar || data.conf_acc != old_tot) { // se cambia
  201. lcd.setCursor(0, 2); // posiziono cursore
  202. if (data.mar) { // se data.mar e'1/true
  203. lcd.print("Folle "); //scrivi Folle
  204. } else { //altrimenti
  205. lcd.print("Marcia"); // scrivi Marcia
  206. }
  207. old_mar = data.mar;
  208. } // diverso da
  209. if (data.temperature != old_temp || data.conf_acc != old_tot) { //se cambia
  210. lcd.setCursor(15, 2); // posiziono cursore
  211. lcd.print(data.temperature, 1); //stampa temp
  212. lcd.print((char)223);
  213. old_temp = data.temperature;
  214. } // diverso da or diverso da
  215. if (data.humidithy != old_humi || data.conf_acc != old_tot) { //se cambia
  216. lcd.setCursor(15, 3); // posiziono cursore
  217. lcd.print(data.humidithy, 1); //stampa humi
  218. lcd.print("%");
  219. old_humi = data.humidithy;
  220. }
  221. lcd.setCursor(17, 1);
  222. lcd.print(":");
  223. // diverso da or diverso da
  224. if (data.secondo != old_secondo || data.conf_acc != old_tot) { //se cambia
  225. if (data.secondo < 10) { //se inferiore a 10
  226. lcd.setCursor(18, 1); // posiziono cursore
  227. lcd.print(' '); //cancello carattere precedente
  228. lcd.setCursor(19, 1); // posiziono cursore
  229. lcd.print(data.secondo); //stampa secondo
  230. }
  231. else {
  232. lcd.setCursor(18, 1); //altrimenti
  233. lcd.print(data.secondo); //stampa secondo
  234. }
  235. old_secondo = data.secondo;
  236. } // diverso da
  237. if (data.minuto != old_minuto || data.conf_acc != old_tot) { //se cambia
  238. if (data.minuto < 10) { //se inferiore a 10
  239. lcd.setCursor(15, 1); // posiziono cursore
  240. lcd.print(' '); //cancello carattere precedente
  241. lcd.setCursor(16, 1); // posiziono cursore
  242. lcd.print(data.minuto); //stampa minuto
  243. }
  244. if ( data.minuto > 10) { //altrimenti
  245. lcd.setCursor(15, 1); // posiziono cursore
  246. lcd.print(data.minuto); //stampa minuto
  247. }
  248. old_minuto = data.minuto;
  249. }
  250. old_tot = !data.conf_acc;
  251. }
  252. else { //altrimenti
  253. lcd.setCursor(7, 0); // posiziono cursore
  254. lcd.print(" "); // scrivi vuoto
  255. lcd.setCursor(0, 1);
  256. lcd.print(" ");//scrivi vuoto
  257. lcd.setCursor(0, 2);
  258. lcd.print(" ");//scrivi vuoto
  259. } // se diverso or // se diverso
  260. if (data.conf_acc != old_conf_acc || data.conf_acc != old_tot || ! old_lost) { // se cambia
  261. lcd.setCursor(0, 0); // posiziono cursore
  262. if (data.conf_acc) { // se data.conf_acc e' 1/true
  263. lcd.print("Acceso "); //scrivi Acceso
  264. }
  265. else { //altrimenti
  266. lcd.print("Spento "); // Spento
  267. lcd.setCursor(9, 3);
  268. lcd.print(" ");
  269. }
  270. old_conf_acc = data.conf_acc;
  271. }
  272. }
  273. else {
  274. disp = false;
  275. if (! old_lost) { // se cambia
  276. lcd.setCursor(0, 0);
  277. lcd.print(F(" attenzione "));
  278. lcd.setCursor(0, 1);
  279. lcd.print(F(" problema "));
  280. lcd.setCursor(0, 2);
  281. lcd.print(F(" comunicazione "));
  282. lcd.setCursor(0, 3);
  283. lcd.print(F(" persa "));
  284. }
  285. }
  286. old_lost = disp;
  287. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement