Enunciado:
Hay que realizar un ciclo de purga cada x tiempo, y cada purga durará 200 ms. El tiempo entre purga y purga viene determinado por la operación 2300/intensidad=seg. Siendo la Intensidad la que voy a leer del sensor de intensidad. Es decir, si estando en varios estado de funcionamiento del sistema, ejecuto la operación (2300/i) y ese valor que me da, es el tiempo que tengo que esperar para purgar, en el momento que pase, pongo en alto la válvula de purga y purgo durante 200 ms (los 200 ms siempre es igual) cuando termino de purgar (200ms) vuelvo a realizar la operación y vuelvo a esperar el tiempo que salga del resultado de la operación y así sucesivamente. También tengo que tener en cuenta que la operación se realice una sola vez tras realizar la purga para evitar perdidas de datos, o que se pase todo el tiempo realizando operaciones y finalmente no purgue. Fuente: fc
Código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
#define tPURGADO 2000 #define pVALVULA 13 unsigned long tEsperaPurga = 10000; unsigned long tUltPurgado = 0; unsigned long tAhora; boolean purgando = false; unsigned long tInicioPurgado = 0; // Permite simular el sensor introduciendo a mano // los numeros desde la consola Serial del IDE void leerValorSensorPurgado() { if( Serial.available() ) { tEsperaPurga = Serial.parseInt(); while( Serial.available() && Serial.read() != -1 ); } } void funcionPurgando() { tAhora = millis(); if( purgando ) { if( tAhora-tInicioPurgado > tPURGADO ) { digitalWrite( pVALVULA, LOW ); tUltPurgado = tAhora; purgando = false; Serial.print("FIN ("); Serial.print(tAhora/1000); Serial.println(")"); } else { digitalWrite( pVALVULA, HIGH ); } } else if( tAhora-tUltPurgado > tEsperaPurga ) { tInicioPurgado = tAhora; purgando = true; leerValorSensorPurgado(); Serial.print("INICIO ("); Serial.print(tAhora/1000); Serial.println(")"); } } void setup() { pinMode(pVALVULA, OUTPUT); // Led del arduino que se encendera durante el purgado. Serial.begin(9600); while(!Serial); delay(2000); Serial.println("INICIO PROGRAMA\r\n"); } void loop() { funcionPurgando(); // El resto de tareas del programa. } |
Resultado:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
INICIO PROGRAMA INICIO (10) FIN (12) INICIO (22) FIN (24) INICIO (34) FIN (36) INICIO (46) FIN (48) INICIO (58) FIN (60) INICIO (70) FIN (72) |