Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const int ledPinEV_1 = 22;
- const int ledPinEV_2 = 23;
- const int ledPinEV_3 = 24;
- const int ledPinEV_4 = 25;
- const int ledPinPompa = 26;
- const int ledPinResistenza = 27;
- const int pinTemp = A0;
- const int EV1 = A1;
- const int EV2 = A2;
- const int EV3 = A3;
- const int EV4 = A4;
- //Interrupts
- const int flussometro1 = 2;
- const int flussometro2 = 3;
- const int flussometro3 = 18;
- const int flussometro4 = 19;
- volatile unsigned int count1 = 0;
- volatile unsigned int count2 = 0;
- volatile unsigned int count3 = 0;
- volatile unsigned int count4 = 0;
- bool enableFluxCount1 = false;
- bool enableFluxCount2 = false;
- bool enableFluxCount3 = false;
- bool enableFluxCount4 = false;
- unsigned int stato = 0; //Stato iniziale della normale esecuzione
- unsigned int valueNTC = 0;
- double flusso1 = 0.0;
- double flusso2 = 0.0;
- double flusso3 = 0.0;
- double flusso4 = 0.0;
- double temp = 0.0;
- //Stati delle elettrovalvole, solo via software; nessun controllo hardware (non sicuro)
- bool statoEV1 = false;
- bool statoEV2 = false;
- bool statoEV3 = false;
- bool statoEV4 = false;
- void isr_flussometro1() {
- if (enableFluxCount1)
- count1++;
- }
- void isr_flussometro2() {
- if (enableFluxCount2)
- count2++;
- }
- void isr_flussometro3() {
- if (enableFluxCount3)
- count3++;
- }
- void isr_flussometro4() {
- if (enableFluxCount4)
- count4++;
- }
- //Dichiarazione funzioni
- void testDiagnostico();
- String readSensors();
- void funzionamentoNormale();
- void setup() {
- Serial.begin(9600);
- pinMode(ledPinEV_1, OUTPUT);
- pinMode(ledPinEV_2, OUTPUT);
- pinMode(ledPinEV_3, OUTPUT);
- pinMode(ledPinEV_4, OUTPUT);
- digitalWrite(ledPinEV_1, LOW);
- digitalWrite(ledPinEV_2, LOW);
- digitalWrite(ledPinEV_3, LOW);
- digitalWrite(ledPinEV_4, LOW);
- pinMode(ledPinPompa, OUTPUT);
- pinMode(ledPinResistenza, OUTPUT);
- digitalWrite(ledPinPompa, LOW);
- digitalWrite(ledPinResistenza, LOW);
- //Input non necessari, lo sono per default in Arduino
- attachInterrupt(digitalPinToInterrupt(flussometro1), isr_flussometro1, RISING);
- attachInterrupt(digitalPinToInterrupt(flussometro2), isr_flussometro2, RISING);
- attachInterrupt(digitalPinToInterrupt(flussometro3), isr_flussometro3, RISING);
- attachInterrupt(digitalPinToInterrupt(flussometro4), isr_flussometro4, RISING);
- }
- void loop() {
- testDiagnostico();
- funzionamentoNormale();
- }
- void testDiagnostico() {
- char fromSerial = '-';
- String toSend;
- if (Serial.available())
- fromSerial = Serial.read();
- if (fromSerial != '-') {
- switch (fromSerial) {
- case 'a':
- digitalWrite(ledPinEV_1, HIGH);
- break;
- case 'h':
- digitalWrite(ledPinEV_1, LOW);
- break;
- case 'b':
- digitalWrite(ledPinEV_2, HIGH);
- break;
- case 'i':
- digitalWrite(ledPinEV_2, LOW);
- break;
- case 'd':
- digitalWrite(ledPinEV_3, HIGH);
- break;
- case 'l':
- digitalWrite(ledPinEV_3, LOW);
- break;
- case 'e':
- digitalWrite(ledPinEV_4, HIGH);
- break;
- case 'm':
- digitalWrite(ledPinEV_4, LOW);
- break;
- case 'f':
- digitalWrite(ledPinResistenza, HIGH);
- break;
- case 'n':
- digitalWrite(ledPinResistenza, LOW);
- break;
- case 'g':
- digitalWrite(ledPinPompa, HIGH);
- break;
- case 'o':
- digitalWrite(ledPinPompa, LOW);
- break;
- case 'p':
- toSend = readSensors();
- Serial.write(toSend.c_str());
- Serial.flush();
- break;
- case 'q':
- digitalWrite(ledPinEV_4, LOW);
- break;
- default:
- fromSerial = '-';
- break;
- }
- }
- }
- String readSensors() {
- String str;
- //stringa = "statoEV1,statoEV2,statoEV3,statoEV4,flusso1,flusso2,flusso3,flusso4,valueNTC,temp"
- str += String(statoEV1) + ",";
- str += String(statoEV2) + ",";
- str += String(statoEV3) + ",";
- str += String(statoEV4) + ",";
- str += String(flusso1) + ",";
- str += String(flusso2) + ",";
- str += String(flusso3) + ",";
- str += String(flusso4) + ",";
- str += String(valueNTC) + ",";
- str += String(temp);
- return str;
- }
- void funzionamentoNormale() {
- unsigned int previousMillis = 0;
- switch (stato) {
- case 0:
- digitalWrite(ledPinEV_1, HIGH); //Attivo la prima EV
- statoEV1 = true;
- digitalWrite(ledPinPompa, HIGH); //Attivo la pompa
- stato++; //Passo allo stato successivo
- break;
- case 1:
- count1 = 0;
- flusso1 = 0.0;
- enableFluxCount1 = true;
- while (flusso1 < 1.5) {
- if (millis() - previousMillis >= 1000) {
- previousMillis = millis();
- flusso1 = (double(count1) * 1.12);
- flusso1 *= 60; //Trasforma i secondi in minuti
- flusso1 /= 1000; //Trasforma i mL in L (litri)
- }
- }
- enableFluxCount1 = false;
- stato++;
- break;
- case 2:
- digitalWrite(ledPinEV_1, LOW); //Disattivo la prima EV
- statoEV1 = false;
- digitalWrite(ledPinPompa, LOW); //Disattivo la pompa
- delay(1000);
- stato++;
- break;
- case 3:
- //Attivazione resistenza e verifica temperatura
- digitalWrite(ledPinResistenza, HIGH);
- valueNTC = analogRead(pinTemp);
- delay(5);
- while (temp < 90) {
- valueNTC = analogRead(pinTemp);
- // FIXME !!!!
- }
- stato++;
- break;
- case 4:
- //Spengo la resistenza
- digitalWrite(ledPinResistenza, LOW);
- stato++;
- break;
- case 5:
- //Attivazione pompa
- digitalWrite(ledPinPompa, HIGH);
- stato++;
- break;
- case 6:
- enableFluxCount1 = true;
- enableFluxCount2 = true;
- enableFluxCount3 = true;
- enableFluxCount4 = true;
- //Reset dei conteggi
- count1 = 0;
- count2 = 0;
- count3 = 0;
- count4 = 0;
- //Inizio sequenza di attivazione
- digitalWrite(ledPinEV_1, HIGH);
- statoEV1 = true;
- delay(5000);
- digitalWrite(ledPinEV_2, HIGH);
- statoEV2 = true;
- delay(5000);
- digitalWrite(ledPinEV_3, HIGH);
- statoEV3 = true;
- delay(5000);
- digitalWrite(ledPinEV_4, HIGH);
- statoEV4 = true;
- delay(5000);
- flusso1 = (double(count1) * 1.12);
- flusso1 *= 60;
- flusso1 /= 1000;
- flusso2 = (double(count2) * 1.12);
- flusso2 *= 60;
- flusso2 /= 1000;
- flusso3 = (double(count3) * 1.12);
- flusso3 *= 60;
- flusso3 /= 1000;
- flusso4 = (double(count4) * 1.12);
- flusso4 *= 60;
- flusso4 /= 1000;
- stato++;
- break;
- case 7:
- //Disattivo tutte le elettrovalvole
- digitalWrite(ledPinEV_1, LOW);
- statoEV1 = false;
- digitalWrite(ledPinEV_2, LOW);
- statoEV2 = false;
- digitalWrite(ledPinEV_3, LOW);
- statoEV3 = false;
- digitalWrite(ledPinEV_4, LOW);
- statoEV4 = false;
- enableFluxCount1 = false;
- enableFluxCount2 = false;
- enableFluxCount3 = false;
- enableFluxCount4 = false;
- stato = 0;
- break;
- default:
- stato = 0;
- break;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement