14-05-2016, 17:00
Witam! Robię sterowanie oświetleniem w pokoju (2 lampy) za pomocą pilota i przełącznika na ścianie (zwykły przełącznik na ścianie, bistabilny, "2-kanałowy"). Mikrokontroler jaki wykorzystuje do tego projektu to atmega8a, program napisałem w arduino ide.
Schemat poglądowy (nigdy nie zamierzałem go udostępniać, robiłem go tylko dla siebie, stąd wygląda jak wygląda, więc proszę nie komentować jego poprawności i estetyki )
S1, S2 - przełącznik bistabilny
W1, W2 - sygnał z pilota (sygnał jest monostabilny)
K1, K2 - przekaźnik
Problem wygląda następująco: po załączeniu zasilania przekaźnik szaleje (bardzo szybko stan się zmienia 0/1). Po przełączeniu przycisków bistabilnych, cewki przekaźników nie są zasilane. W tym momencie sterowanie z pilotu działa normalnie (naciskam przycisk - cewka przekaźnika jest zasilana, naciskam przycisk drugi raz - cewka jest rozłączana). Po przełączeniu przycisków bistabilnych, stan_k1 i stan_k2 znów szaleje. Jak mniemam problem jest w kodzie.
Nie potrafię sobie z tym poradzić. Proszę o pomoc
Schemat poglądowy (nigdy nie zamierzałem go udostępniać, robiłem go tylko dla siebie, stąd wygląda jak wygląda, więc proszę nie komentować jego poprawności i estetyki )
S1, S2 - przełącznik bistabilny
W1, W2 - sygnał z pilota (sygnał jest monostabilny)
K1, K2 - przekaźnik
Problem wygląda następująco: po załączeniu zasilania przekaźnik szaleje (bardzo szybko stan się zmienia 0/1). Po przełączeniu przycisków bistabilnych, cewki przekaźników nie są zasilane. W tym momencie sterowanie z pilotu działa normalnie (naciskam przycisk - cewka przekaźnika jest zasilana, naciskam przycisk drugi raz - cewka jest rozłączana). Po przełączeniu przycisków bistabilnych, stan_k1 i stan_k2 znów szaleje. Jak mniemam problem jest w kodzie.
Kod:
//piny wejsciowe
byte s1 = 6;
byte s2 = 7;
byte w1 = 4;
byte w2 = 5;
//piny wyjsciowe
byte k1 = 0;
byte k2 = 1;
//wejscia
boolean stan_s1 = 0;
boolean stan_s2 = 0;
boolean stan_w1 = 0;
boolean stan_w2 = 0;
//wyjscia
boolean stan_k1 = 0;
boolean stan_k2 = 0;
//zmienne do warunkow
boolean poprzedni1 = 0;
boolean poprzedni2 = 0;
boolean poprzedni3 = 0;
boolean poprzedni4 = 0;
void setup() {
pinMode(s1, INPUT);
pinMode(s2, INPUT);
pinMode(w1, INPUT);
pinMode(w2, INPUT);
pinMode(k1, OUTPUT);
pinMode(k2, OUTPUT);
}
void loop() {
digitalWrite(k1, stan_k1);
digitalWrite(k2, stan_k2);
stan_s1 = digitalRead(s1);
stan_s2 = digitalRead(s2);
stan_w1 = digitalRead(w1);
stan_w2 = digitalRead(w2);
switch(stan_k1) {
case 0:
if(stan_w1==1 && poprzedni1==0){
stan_k1=!stan_k1;
};
if(stan_s1 != poprzedni3){
stan_k1=!stan_k1;
};
break;
case 1:
if(stan_w1==1 && poprzedni1==0){
stan_k1=!stan_k1;
};
if(stan_s1 != poprzedni3){
stan_k1=!stan_k1;
};
break;
};
switch(stan_k2) {
case 0:
if(stan_w2==1 && poprzedni2==0){
stan_k2=!stan_k2;
};
if(stan_s2 != poprzedni4){
stan_k2=!stan_k2;
};
break;
case 1:
if(stan_w2==1 && poprzedni2==0){
stan_k2=!stan_k2;
};
if(stan_s2 != poprzedni4){
stan_k2=!stan_k2;
};
break;
};
poprzedni1 = stan_w1;
poprzedni2 = stan_w2;
poprzedni3 = stan_s1;
poprzedni4 = stan_s2;
}