Skocz do zawartości

Problem z sterowaniem światłem


Pomocna odpowiedź

Napisano

Mianowicie mam problem taki że zrobiłem sterowanie przyciskiem dzwonkowym światła i wszystko działa w prototypie jednak gdy podłączyłem to do instalacji to przy włączaniu różnych obciążeń w domu, sterownik sam włącza/wyłącza światło. Ma ktoś jakiś pomysł zo z tym zrobić?

Wszystko działa poprawnie dopóki nie podłączę przycisku dzwonkowego.

Przyciskiem dzwonkowym? Takim monostabilnym?

Opisz bardziej swój układ, bo na razie to za dużo informacji nie ma.

Obstawiałbym że łapiesz jakieś szpilki z sieci, ale bez znajomości układu to tylko wróżenie.

Jak sprawdzasz czy przycisk został wciśnięty?

Pojedynczym warunkiem bez opóźnienia?

Jeśli tak, to sprawdź przy podwójnym warunku, tj. pierwszy warunek sprawdza wciśnięcie przycisku, później będzie potrzebne jakieś opóźnienie (20-100ms) i drugi warunek sprawdza czy przycisk jest dalej wciśnięty.

int buttonState = 0;

const int buttonPin = 47;

void setup() {

Serial.begin(9600);

pinMode(26,OUTPUT);

// pinMode(27,OUTPUT);

// pinMode(28,OUTPUT);

pinMode(47,INPUT);

digitalWrite(26, HIGH); //Włączenie swiatla

}

void loop() {

buttonState= digitalRead(buttonPin);

while (digitalRead(buttonPin) == HIGH) {} //Jeśli przycisk jest wciśnięty

digitalWrite(26, LOW);

delay(1000);

while (digitalRead(buttonState) == HIGH) {} //Jeśli przycisk jest wciśnięty

Serial.println(buttonState);

digitalWrite(26, HIGH);

delay(1000);

}

[ Dodano: 14-06-2018, 21:19 ]

Jest to zwykły przycisk zwierny, działanie jak switch

[ Dodano: 14-06-2018, 21:20 ]

nie wiem jak to zrobić przy takim programie żeby sprawdzał kilka razy warunek i dopiero później działał

__________

Komentarz dodany przez: Treker

Kody programów należy umieszczać przez narzędzie KOD (znajdziesz je w edytorze pod ikonką "<>"). Dzięki niemu składania programów jest automatycznie kolorowana, a wtedy wszystkim znacznie łatwiej analizować wklejone programy. Proszę to poprawić - z góry dziękuję za zrozumienie i pomoc przy utrzymaniu porządku na forum.

To jest to arduinowe środowisko?

Nie bardzo rozeznany z nim jestem.

void loop() { 

buttonState= digitalRead(buttonPin); 

while (digitalRead(buttonPin) == HIGH) {} //Jeśli przycisk jest wciśnięty 
digitalWrite(26, LOW); 

delay(1000); 
while (digitalRead(buttonState) == HIGH) {} //Jeśli przycisk jest wciśnięty 
Serial.println(buttonState); 
digitalWrite(26, HIGH); 

delay(1000); 

}

To jest main, tak?

Można spróbować tak (powinno przejść kompilacje):

void loop() { 

buttonState= digitalRead(buttonPin); 

if(digitalRead(buttonPin)==1)//pierwsze sprawdzenie przycisku
{
delay(100);//jeśli delay w ms - opoznienie przed drugim sprawdzeniem przycisku
if(digitalRead(buttonPin)==1)//drugie sprawdzenie
{
if(digitalRead(26)==1))//sprawdzenie czy swiatlo zapalone
{
digitalWrite(26,LOW);//jesli zapalone to zgas
}
else
{
digitalWrite(26,High);//jesli zgaszone to zapal
}
}
}

Serial.println(buttonState); 

}

Niekoniecznie wystarczy dodać delay dla eliminacji drgań styków. Zresztą w ogóle to nie jest dobre rozwiązanie, jeśli procesor miałby robić coś jeszcze, no OK jak jest tylko do przycisku (MICROPROCESOR do przycisku?). Pin ustawiony na wejście powinien mieć określony stan bez naciśniętego przycisku. W Arduino AVR zwykle robi się to linijką pinMode(47,INPUT_PULLUP); zamiast tylko INPUT. Samo INPUT można dać wtedy, gdy mamy zewnętrzny rezystor podciągający do VCC lub do GND. Przycisk wtedy zwiera na odwrót odpowiednio do VCC lub GND. Z INPUT_PULLUP przycisk zwiera do GND. Bez określonego stanu będzie się wzbudzał sam, losowo, tydzień może być OK, potem będzie robił dyskotekę przez godzinę i znowu będzie OK lub vice-versa.

A kto mu zabroni użyć MIKROKONTROLERA do sterowania światłem?

Chciał/miał potrzebę/miał taki kaprys to niech i użyje nawet raspberry do tego 🙂

No przecież wpisałem mu delaya do eliminacji drgania styków.

Co do włączania podciągnięcia, to nie proponowałem tego bo nie wiemy w dalszym ciągu jak dokładniej ma zbudowany ten układ, prosiłem żeby bardziej opisał układ ale nie było odzewu. A dlaczego akurat pullup? Może ma układ który by wymagał pulldown? A może ma zewnętrzne podciągnięcie? Bez znajomości schematu to tylko wróżenie 🙂

A kto mi zabroni zabraniać? 😃 Nie wiem czy pullup, opisałem oba, nie mniej jednak AVR ma wewnętrzny tylko up, oba można dać zewnętrzne. I na koniec coś co Cię na pewno uspokoi: usiądź i się uspokój... 😃 No i przepraszam, że zaproponowałem dodatkowe opcje.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...