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
21.5.2017 v 23:29
#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;
}
}