====== Lépcsőzetes időzítés ====== Lépcsőzetes időzítés az öntőzőrendszer relészigetének az időzítéséhez. A 8. reléportra a "master" szelepet kötöm; ennek nyitnia kell, ha bármelyik másik szelep is nyit. Az indítások közötti várakozási idő és a szelepek nyitásának ideje a programban állítható. A program a ide monitorra kijelzi, hogy éppen hol tart. Az időzítéshez a //millis()// funkciót használtam fel, semmi delay.. ===== Vezetékezés ===== A 8 elemű relé-sziget az 5. és 12. pin közé lett huzalozva ===== Program ===== #define valve_1 5 #define valve_2 6 #define valve_3 7 #define valve_4 8 #define valve_5 9 #define valve_6 10 #define valve_7 11 #define valve_8 12 unsigned long pause_mil, prev_mil, current_mil, gap_mil; int valve_time[] = {20, 4, 4, 8, 5, 8, 5, 4, 3}; // valve running times in sec; first is standby time int max_valve, valve_nr, valve_nr_old; void setup() { Serial.begin(9600); pinMode(valve_1, OUTPUT); pinMode(valve_2, OUTPUT); pinMode(valve_3, OUTPUT); pinMode(valve_4, OUTPUT); pinMode(valve_5, OUTPUT); pinMode(valve_6, OUTPUT); pinMode(valve_7, OUTPUT); pinMode(valve_8, OUTPUT); // master valve, its need open, if an other valve is opened pause_mil = 60*1000; // 1 minute gap_mil = 1000; // 1 sec max_valve = 7; // 7 valves prev_mil = millis(); // start with pause valve_nr = 99; // init value valve_nr_old = 0; // nr of valve to open; 0: standby } void loop() { current_mil = millis(); // read time // waiting for standby if (abs(current_mil - prev_mil) > pause_mil) { // standby time is over valve_nr = valve_nr + 1; prev_mil = current_mil; } if (not(valve_nr == valve_nr_old)) { // change phase if (valve_nr > max_valve) { // all valves runout valve_nr = 0; } valve_nr_old = valve_nr; if (valve_nr == 0) { Serial.print("Standby, waiting time: "); } else { Serial.print("Valve "); Serial.print(valve_nr); Serial.print(", running time "); } Serial.print(valve_time[valve_nr]); Serial.println(" sec"); pause_mil = valve_time[valve_nr] * 1000; // waiting s -> msec } for (int thisPin = 1; thisPin < 8; thisPin++) { if (thisPin == valve_nr) { digitalWrite(thisPin + 4, LOW); // relais-island is low-activ! } else { digitalWrite(thisPin + 4, HIGH); } } if (not(valve_nr == 0)) { digitalWrite(valve_8, LOW); // master-valve, relais-island is low-activ! } else { digitalWrite(valve_8, HIGH); } } **[[hu:project:arduino|>> Vissza az Arduino projektek listájához]]**