• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Bezprzewodowe sterowanie oświetleniem
#1
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  Shy  )
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;
}
Nie potrafię sobie z tym poradzić. Proszę o pomoc Smile
 
#2
Jednak sobie poradziłem. Przełącznik bistabilny po prostu odcinał zasilanie. Wtedy na wejściu pinu 6/7 nie było nic - nie był podłączony ani potencjał niski, ani wysoki - przez co s1/s2 nie miało określonego stanu i działy się takie rzeczy.
Przed pinem 6/7 dałem mase, poprzedzając ją rezystorem 10kΩ, przez co gdy załączone jest s1/s2 - na pinach jest stan wysoki, zaś przy rozłączonym s1/s2 na pinie 6/7 jest 0 i problemu już nie ma.
Temat do zamknięcia Smile
 
#3
Zamykam. Smile
[Obrazek: Sygnatura1-w60.jpg]
 
  


Skocz do:


Przeglądający: 1 gości