Close

Odpověď na: Rozběh Hvězda trojůhelník

Úvodní stránka Fórum Hardware Arduino Rozběh Hvězda trojůhelník Odpověď na: Rozběh Hvězda trojůhelník

#11547
petan
Účastník

Snad to bude pochopitelný. Nezkoušel jsem to, ale mělo by to snad fungovat.
Samozřejmě, není nutný po celou dobu zapínat digitální výstupy, ale ničemu to nevadí. Doporučuji vyvarovat se použití příkazu delay();

//Rozběh Y-D
//Je nutné elektricky a nejlépe i mechanicky blokovat stykače Y a D

#define tlStart A0
#define tlStop A1
#define stStart 1
#define stStar 2
#define stDelta 3

int systemState; //stav systému 0 - vypnuto, 1 - provoz Y, 2 - přepínání, 3 - provoz D
long casBehu; //čas po který je motor spuštěn do hvězdy

void setup() {
  pinMode(tlStart, INPUT);  //tlačítko START
  pinMode(tlStop, INPUT);  //tlačítko STOP
  pinMode(stStart, OUTPUT);  //hlavní stykač
  pinMode(stStar, OUTPUT);  //stakač pro hvězdu
  pinMode(stDelta, OUTPUT);  //stakač pro trojuhelník
}

void loop() {

if (digitalRead(tlStop)){
  //stisknuto tlačítko STOP
  systemState = 0;  //vypnout motor
}

switch (systemState) {
  case 0:
    //motor je vypnut
    digitalWrite(stStart, LOW); //pro sichr vypnout stykač
    digitalWrite(stStar, LOW);  //pro sichr vypnout stykač
    digitalWrite(stDelta, LOW); //pro sichr vypnout stykač

    if (digitalRead(tlStart)){
      systemState = 1;  //zapnout motor
      casBehu = millis(); //uložit čas sepnití motoru
    }
    break;
    
  case 1:
    //motor se rozbíhá zadaný čas v konfiguraci Y
    digitalWrite(stStart, HIGH);  //zapnout hlavní stykač
    digitalWrite(stStar, HIGH);   //zapnout stykač Y

    if (millis() >= casBehu + 5000){
      //pokud motor běží už 5s tak přepni stav systému na 2
      systemState = 2;  //další krok
      casBehu = millis(); //uložení aktuálního času
    }
    break;
    
  case 2:
    //před přepnutím do D je nutné vypnout stykač pro běh do Y a počkat
    digitalWrite(stStart, HIGH);  //zapnout hlavní stykač
    digitalWrite(stStar, LOW);  //pro sichr vypnout stykač

    if (millis() >= casBehu + 500){
      //pokud od vypnutí stykače uplynulo 0,5s zapni stykač pro běh do trojuhelníka
      systemState = 3;  //další krok
    }
    break;
    
  case 3:
    //provoz do D
    digitalWrite(stStart, HIGH);  //zapnout hlavní stykač
    digitalWrite(stStar, LOW);  //pro sichr vypnout stykač
    break;
}

}