Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 16.06 KB | None | 0 0
  1. const int ledpinEV1 = 22; // setta il pin elettrovalvola e led
  2. const int ledpinEV2 = 23; //setta il pin elettrovalvola e led
  3. const int ledpinEV3 = 24; //setta il pin elettrovalvola e led
  4. const int ledpinEV4 = 25; //setta il pin elettrovalvola e led
  5. const int ledpinPom = 26; //setta il pin elettrovalvola e led
  6. const int ledpinRes = 27; //setta il pin elettrovalvola e led
  7.  
  8.  
  9.  
  10. //**************************** --CONTROLLO FLUSSO 1--2 *******************************************
  11. //BLOCCO DICHIARAZIONI VARIABILI CONTROLLO FLUSSO
  12. const float Pi = 3.141593; // Pigreco
  13. const float raggio = 0.06; // raggio flussometro in metri
  14.  
  15. const int reed1Pin = 18; // pin assegnato al contatto reed SIGLATO D1 ADESIVO COLORE FILO MARRONE
  16. const int reed2Pin = 19; // pin assegnato al contatto reed SIGLATO D2 ADESIVO COLORE FILO MARRONE
  17. const int reed3Pin = 20; // pin assegnato al contatto reed SIGLATO D3 ADESIVO COLORE FILO MARRONE
  18. const int reed4Pin = 21; // pin assegnato al contatto reed SIGLATO D4 ADESIVO COLORE FILO MARRONE
  19.  
  20. int Statoreed1 = 0; // variabile per la lettura del contatto
  21. int Statoreed2 = 0; // variabile per la lettura del contatto
  22. int Statoreed3 = 0; // variabile per la lettura del contatto
  23. int Statoreed4 = 0; // variabile per la lettura del contatto
  24.  
  25. int Statoreed1_old = 0; // variabile per evitare doppio conteggio
  26. int Statoreed2_old = 0; // variabile per evitare doppio conteggio
  27. int Statoreed3_old = 0; // variabile per evitare doppio conteggio
  28. int Statoreed4_old = 0; // variabile per evitare doppio conteggio
  29.  
  30. int Conteggio1 = 0; // variabile che contiene il conteggio delle pulsazioni
  31. int Conteggio2 = 0; // variabile che contiene il conteggio delle pulsazioni
  32. int Conteggio3 = 0; // variabile che contiene il conteggio delle pulsazioni
  33. int Conteggio4 = 0; // variabile che contiene il conteggio delle pulsazioni
  34.  
  35. float valueflu1 = 0;
  36. float valueflu2 = 0;
  37. float valueflu3 = 0;
  38. float valueflu4 = 0;
  39.  
  40. unsigned long int TempoStart1 = 0; // memorizza i millisecondi dalla prima pulsazione conteggiata
  41. unsigned long int TempoStart2 = 0; // memorizza i millisecondi dalla prima pulsazione conteggiata
  42. unsigned long int TempoStart3 = 0; // memorizza i millisecondi dalla prima pulsazione conteggiata
  43. unsigned long int TempoStart4 = 0; // memorizza i millisecondi dalla prima pulsazione conteggiata
  44.  
  45. unsigned long int Tempo1 = 0; // per conteggiare il tempo trascorso dalla prima pulsazione
  46. unsigned long int Tempo2 = 0; // per conteggiare il tempo trascorso dalla prima pulsazione
  47. unsigned long int Tempo3 = 0; // per conteggiare il tempo trascorso dalla prima pulsazione
  48. unsigned long int Tempo4 = 0; // per conteggiare il tempo trascorso dalla prima pulsazione
  49.  
  50. unsigned long int TempoMax1 = 1000; // numero di millisecondi (2 seondi) // modificato a 1 secondi
  51. unsigned long int TempoMax2 = 1000; // numero di millisecondi (2 seondi) // modificato a 1 secondi
  52. unsigned long int TempoMax3 = 1000; // numero di millisecondi (2 seondi) // modificato a 1 secondi
  53. unsigned long int TempoMax4 = 1000; // numero di millisecondi (2 seondi) // modificato a 1 secondi
  54. //per azzerare il conteggio e calcolare la Velocità
  55. // così non si conteggiano brevi movimenti di flusso
  56.  
  57. //********************************************************************************************
  58.  
  59.  
  60.  
  61.  
  62. void setup() {
  63. Serial.begin(9600); // ABILITA LA SERIALE
  64. pinMode(reed1Pin, INPUT); // mette in ascolto il reed sul pin 2 pinMode(INPUT);
  65. pinMode(reed2Pin, INPUT);
  66. pinMode(reed3Pin, INPUT);
  67. pinMode(reed4Pin, INPUT);
  68. pinMode(ledpinEV1, OUTPUT);
  69. pinMode(ledpinEV2, OUTPUT);
  70. pinMode(ledpinEV3, OUTPUT);
  71. pinMode(ledpinEV4, OUTPUT);
  72. pinMode(ledpinPom, OUTPUT);
  73. pinMode(ledpinRes, OUTPUT);
  74. attachInterrupt (5, reed1Pins, RISING); //Configura interrupt 5 al pin 18
  75. attachInterrupt (4, reed2Pins, RISING); //Configura interrupt 4 al pin 19
  76. attachInterrupt (3, reed3Pins, RISING); //Configura interrupt 3 al pin 20
  77. attachInterrupt (2, reed4Pins, RISING); //Configura interrupt 2 al pin 21
  78. }
  79.  
  80.  
  81. void loop() {
  82.  
  83. // FLUSSOMETRO 1 -**********************************************************
  84. Statoreed1 = digitalRead(reed1Pin); // legge il contatto reed
  85.  
  86. if (Statoreed1 != Statoreed1_old) {
  87. // verifica se è cambiato
  88. Statoreed1_old = Statoreed1; // se "SI" aggiorna lo stato
  89. if (Statoreed1 == HIGH) { // controlla SE è alto ( passaggio magnete)
  90. if (Conteggio1 == 0) {
  91. TempoStart1 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  92. }
  93. Conteggio1 = Conteggio1 + 1; // si aggiorna il contatore
  94. Tempo1 = ( millis() - TempoStart1); // conteggia il tempo trascorso dallo start conteggio
  95. if (Tempo1 >= TempoMax1) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  96. //calcoli e la stampa della velocità
  97. float deltaTempo = ( Tempo1 / 1000.0); // si trasforma in secondi
  98. valueflu1 = (3.6 * Conteggio1 * Pi * raggio) / deltaTempo; //formula per il calcolo della velocità in Km/h
  99. //Serial.print("Flus 1 :" ); Serial.println(valueflu);
  100.  
  101. Conteggio1 = 0; // azzeriamo il conteggio per nuova lettura
  102. delay(500);// attesa per altra lettura
  103. Serial.print(""); Serial.println(valueflu1);
  104. }
  105. }
  106. }
  107.  
  108.  
  109. // FLUSSOMETRO 2-************************************************
  110. Statoreed2 = digitalRead(reed2Pin); // legge il contatto reed
  111.  
  112. if (Statoreed2 != Statoreed2_old) { // verifica se è cambiato
  113. Statoreed2_old = Statoreed2; // se "SI" aggiorna lo stato
  114.  
  115. if (Statoreed2 == HIGH) { // controlla SE è alto ( passaggio magnete)
  116. if (Conteggio2 == 0) {
  117. TempoStart2 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  118. }
  119. Conteggio2 = Conteggio2 + 1; // si aggiorna il contatore
  120. Tempo2 = ( millis() - TempoStart2); // conteggia il tempo trascorso dallo start conteggio
  121. if (Tempo2 >= TempoMax2) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  122. //calcoli e la stampa della velocità
  123. float deltaTempo2 = ( Tempo2 / 1000.0); // si trasforma in secondi
  124. valueflu2 = (3.6 * Conteggio2 * Pi * raggio) / deltaTempo2; //formula per il calcolo della velocità in Km/h
  125. Conteggio2 = 0; // azzeriamo il conteggio per nuova lettura
  126. delay(500);// attesa per altra lettura
  127.  
  128. Serial.print("\t"); Serial.println(valueflu2);
  129. }
  130. }
  131. }
  132.  
  133.  
  134.  
  135. // FLUSSOMETRO 3-************************************************
  136. Statoreed3 = digitalRead(reed3Pin); // legge il contatto reed
  137. if (Statoreed3 != Statoreed3_old) { // verifica se è cambiato
  138. Statoreed3_old = Statoreed3; // se "SI" aggiorna lo stato
  139.  
  140. if (Statoreed3 == HIGH) { // controlla SE è alto ( passaggio magnete)
  141. if (Conteggio3 == 0) {
  142. TempoStart3 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  143. }
  144. Conteggio3 = Conteggio3 + 1; // si aggiorna il contatore
  145. Tempo3 = ( millis() - TempoStart3); // conteggia il tempo trascorso dallo start conteggio
  146. if (Tempo3 >= TempoMax3) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  147. //calcoli e la stampa della velocità
  148. float deltaTempo3 = ( Tempo3 / 1000.0); // si trasforma in secondi
  149. valueflu3 = (3.6 * Conteggio3 * Pi * raggio) / deltaTempo3; //formula per il calcolo della velocità in Km/h
  150. Conteggio3 = 0; // azzeriamo il conteggio per nuova lettura
  151. delay(500);// attesa per altra lettura
  152.  
  153. Serial.print("\t\t"); Serial.println(valueflu3);
  154. }
  155. }
  156. }
  157.  
  158.  
  159. // FLUSSOMETRO 4-************************************************
  160. Statoreed4 = digitalRead(reed4Pin); // legge il contatto reed
  161. if (Statoreed4 != Statoreed4_old) { // verifica se è cambiato
  162. Statoreed4_old = Statoreed4; // se "SI" aggiorna lo stato
  163.  
  164. if (Statoreed4 == HIGH) { // controlla SE è alto ( passaggio magnete)
  165. if (Conteggio4 == 0) {
  166. TempoStart4 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  167. }
  168. Conteggio4 = Conteggio4 + 1; // si aggiorna il contatore
  169. Tempo4 = ( millis() - TempoStart4); // conteggia il tempo trascorso dallo start conteggio
  170. if (Tempo4 >= TempoMax4) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  171. //calcoli e la stampa della velocità
  172. float deltaTempo4 = ( Tempo4 / 1000.0); // si trasforma in secondi
  173. valueflu4 = (3.6 * Conteggio4 * Pi * raggio) / deltaTempo4; //formula per il calcolo della velocità in Km/h
  174. Conteggio4 = 0; // azzeriamo il conteggio per nuova lettura
  175. delay(500);// attesa per altra lettura
  176. //Serial.print("\tFlus 1 : ");Serial.print(valueflu);Serial.print(" ");
  177. Serial.print("\t\t\t"); Serial.println(valueflu4);
  178. }
  179. }
  180. }
  181.  
  182.  
  183.  
  184. if (Serial.available()) {
  185. char fromSerial = ' ';
  186. fromSerial = Serial.read();
  187. switch (fromSerial) {
  188. case 'a':
  189. digitalWrite(ledpinEV1, HIGH);
  190. break;
  191. case 'h':
  192. digitalWrite(ledpinEV1, LOW);
  193. break;
  194. case 'b':
  195. digitalWrite(ledpinEV2, HIGH);
  196. break;
  197. case 'i':
  198. digitalWrite(ledpinEV2, LOW);
  199. break;
  200. case 'd':
  201. digitalWrite(ledpinEV3, HIGH);
  202. break;
  203. case 'l':
  204. digitalWrite(ledpinEV3, LOW);
  205. break;
  206. case 'e':
  207. digitalWrite(ledpinEV4, HIGH);
  208. break;
  209. case 'm':
  210. digitalWrite(ledpinEV4, LOW);
  211. break;
  212. case 'f':
  213. digitalWrite(ledpinRes, HIGH);
  214. break;
  215. case 'n':
  216. digitalWrite(ledpinRes, LOW);
  217. break;
  218. case 'g':
  219. digitalWrite(ledpinPom, HIGH);
  220. break;
  221. case 'o':
  222. digitalWrite(ledpinPom, LOW);
  223. break;
  224. case 'p':
  225. Serial.println("Vado in Test()");
  226. Test();
  227. Serial.println("Uscito da Test()");
  228. break;
  229. case 'q':
  230. digitalWrite(ledpinEV4, LOW);
  231. break;
  232. default:
  233. break;
  234. }
  235. }
  236.  
  237. }
  238.  
  239.  
  240. void reed1Pins() {
  241.  
  242. // FLUSSOMETRO 1 -**********************************************************
  243. Statoreed1 = digitalRead(reed1Pin); // legge il contatto reed
  244.  
  245. if (Statoreed1 != Statoreed1_old) { // verifica se è cambiato
  246. Statoreed1_old = Statoreed1; // se "SI" aggiorna lo stato
  247. if (Statoreed1 == HIGH) { // controlla SE è alto ( passaggio magnete)
  248. if (Conteggio1 == 0) {
  249. TempoStart1 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  250. }
  251. Conteggio1 = Conteggio1 + 1; // si aggiorna il contatore
  252. Tempo1 = ( millis() - TempoStart1); // conteggia il tempo trascorso dallo start conteggio
  253. if (Tempo1 >= TempoMax1) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  254. //calcoli e la stampa della velocità
  255. float deltaTempo = ( Tempo1 / 1000.0); // si trasforma in secondi
  256. valueflu1 = (3.6 * Conteggio1 * Pi * raggio) / deltaTempo; //formula per il calcolo della velocità in Km/h
  257. //Serial.print("Flus 1 :" ); Serial.println(valueflu);
  258.  
  259. Conteggio1 = 0; // azzeriamo il conteggio per nuova lettura
  260. delay(500);// attesa per altra lettura
  261. Serial.print("1 "); Serial.println(valueflu1);
  262. }
  263. }
  264. }
  265. }
  266. void reed2Pins() {
  267. // FLUSSOMETRO 2-************************************************
  268. Statoreed2 = digitalRead(reed2Pin); // legge il contatto reed
  269.  
  270. if (Statoreed2 != Statoreed2_old) { // verifica se è cambiato
  271. Statoreed2_old = Statoreed2; // se "SI" aggiorna lo stato
  272.  
  273. if (Statoreed2 == HIGH) { // controlla SE è alto ( passaggio magnete)
  274. if (Conteggio2 == 0) {
  275. TempoStart2 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  276. }
  277. Conteggio2 = Conteggio2 + 1; // si aggiorna il contatore
  278. Tempo2 = ( millis() - TempoStart2); // conteggia il tempo trascorso dallo start conteggio
  279. if (Tempo2 >= TempoMax2) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  280. //calcoli e la stampa della velocità
  281. float deltaTempo2 = ( Tempo2 / 1000.0); // si trasforma in secondi
  282. valueflu2 = (3.6 * Conteggio2 * Pi * raggio) / deltaTempo2; //formula per il calcolo della velocità in Km/h
  283. Conteggio2 = 0; // azzeriamo il conteggio per nuova lettura
  284. delay(500);// attesa per altra lettura
  285. //Serial.print("\tFlus 1 : ");Serial.print(valueflu);Serial.print(" ");
  286. Serial.print("\t2 "); Serial.println(valueflu2);
  287. }
  288. }
  289. }
  290. }
  291.  
  292. void reed3Pins() {
  293. // FLUSSOMETRO 3-************************************************
  294. Statoreed3 = digitalRead(reed3Pin); // legge il contatto reed
  295. if (Statoreed3 != Statoreed3_old) { // verifica se è cambiato
  296. Statoreed3_old = Statoreed3; // se "SI" aggiorna lo stato
  297.  
  298. if (Statoreed3 == HIGH) { // controlla SE è alto ( passaggio magnete)
  299. if (Conteggio3 == 0) {
  300. TempoStart3 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  301. }
  302. Conteggio3 = Conteggio3 + 1; // si aggiorna il contatore
  303. Tempo3 = ( millis() - TempoStart3); // conteggia il tempo trascorso dallo start conteggio
  304. if (Tempo3 >= TempoMax3) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  305. //calcoli e la stampa della velocità
  306. float deltaTempo3 = ( Tempo3 / 1000.0); // si trasforma in secondi
  307. valueflu3 = (3.6 * Conteggio3 * Pi * raggio) / deltaTempo3; //formula per il calcolo della velocità in Km/h
  308. Conteggio3 = 0; // azzeriamo il conteggio per nuova lettura
  309. delay(500);// attesa per altra lettura
  310. //Serial.print("\tFlus 1 : ");Serial.print(valueflu);Serial.print(" ");
  311. Serial.print("\t\t3 "); Serial.println(valueflu3);
  312. }
  313. }
  314. }
  315. }
  316. void reed4Pins() {
  317. // FLUSSOMETRO 4-************************************************
  318. Statoreed4 = digitalRead(reed4Pin); // legge il contatto reed
  319. if (Statoreed4 != Statoreed4_old) { // verifica se è cambiato
  320. Statoreed4_old = Statoreed4; // se "SI" aggiorna lo stato
  321.  
  322. if (Statoreed4 == HIGH) { // controlla SE è alto ( passaggio magnete)
  323. if (Conteggio4 == 0) {
  324. TempoStart4 = millis(); // se E' il primo passaggio si memorizza il tempo di partenza
  325. }
  326. Conteggio4 = Conteggio4 + 1; // si aggiorna il contatore
  327. Tempo4 = ( millis() - TempoStart4); // conteggia il tempo trascorso dallo start conteggio
  328. if (Tempo4 >= TempoMax4) { // se il tempo trascorso è maggiore o uguale al tempo impostato si eseguono i
  329. //calcoli e la stampa della velocità
  330. float deltaTempo4 = ( Tempo4 / 1000.0); // si trasforma in secondi
  331. valueflu4 = (3.6 * Conteggio4 * Pi * raggio) / deltaTempo4; //formula per il calcolo della velocità in Km/h
  332. Conteggio4 = 0; // azzeriamo il conteggio per nuova lettura
  333. delay(500);// attesa per altra lettura
  334. //Serial.print("\tFlus 1 : ");Serial.print(valueflu);Serial.print(" ");
  335. Serial.print("\t\t\t4 "); Serial.println(valueflu4);
  336. }
  337. }
  338. }
  339.  
  340. }
  341. void Test() {
  342.  
  343. uint32_t measureTime;
  344. //valueflu1 = 0.00;
  345.  
  346.  
  347. if (millis() - measureTime > 1000) {
  348. measureTime = millis();
  349.  
  350. if (valueflu1 < 30) {
  351. digitalWrite(ledpinEV1, HIGH);
  352. Serial.println("EV1ON"); Serial.print(" ");
  353. Serial.println(valueflu1);
  354. millis();
  355. digitalWrite(ledpinPom, HIGH);
  356. Serial.println("PomON"); Serial.print(" ");
  357. Serial.println(valueflu1);
  358. millis();
  359. } else if (valueflu1 > 30) {
  360. Serial.println("sei in while");
  361. digitalWrite(ledpinEV1 , LOW);
  362. Serial.println("EV1OFF");
  363. millis();
  364. Serial.print(" ");
  365. digitalWrite(ledpinPom, LOW);
  366. Serial.println("PomOFF");
  367. Serial.print(" ");
  368. } else {
  369. Test();
  370. }
  371. return true;
  372. }
  373.  
  374.  
  375. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement