hu:project:step_timing

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..

A 8 elemű relé-sziget az 5. és 12. pin közé lett huzalozva

#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);  
  }  
}

>> Vissza az Arduino projektek listájához

  • hu/project/step_timing.txt
  • 2022/04/21 15:04
  • ()