czwartek, 19 maja 2016

Arduino - tact switch




tact switch - przycisk



Przyciski (eng. tact switch) możemy wykorzystać choćby do włączenia lub wyłączenia dowolnego urządzenia podpiętego do Arduino jak lampy, wentylatory. Nóżki są połączone  na wprost natomiast po naciśnięciu przycisku (charakterystyczny klik) następuje zwarcie wszystkich nóżek (wewnątrz znajduje się blaszka). Mimo tak prostej budowy tact switch posiada dokumentację.


Jak wykorzystać przycisk tego typu do włączania i wyłączania podpiętego urządzenia?




Przycisk to nie przełącznik wiec po puszczeniu wraca do pierwotnego położenia co ilustruje poniższy przykład gdzie po wciśnięciu przycisku dioda zapali się a po jego zwolnieniu zgaśnie (przykład nie wymaga kodu)


arduino dioda led tact switch szkic



W przykładzie użyte zostały:

  • Arduino Uno
  • Czerwona dioda led (5mm) 
  • Rezystor 220opmów
  • Przycisk (tact switch)
  • Płytka stykowa

Tym sposobem nie uzyskamy efektu, o który nam chodzi - musimy zmienić projekt. Zamiast bezpośredniego podpięcia przycisku pod diodę odczytamy stan przycisku programowo.


arduino dioda led tact switch szkic



  • Arduino Uno
  • Czerwona dioda led (5mm) 
  • Rezystor 220omów dla diody LED
  • Rezystor 10komów dla przycisku
  • Przycisk (tact switch)
  • Płytka stykowa

arduino

void setup() { Serial.begin(9600); pinMode(3, OUTPUT); digitalWrite(3,LOW); pinMode (4, INPUT); } void loop() { if(digitalRead(4) == HIGH) { if(pozycjaPrzycisku == false) Serial.println("Dioda ON"); else Serial.println("Dioda OFF"); digitalWrite(3,pozycjaPrzycisku); } }






















Po wgraniu nasz projekt nie do końca działa poprawnie. Dlaczego czasem zdarza się, że  po naciśnięciu przycisku przy zapalonej diodzie ta zamiast zgasnąć zgodnie z ustawieniem w kodzie ponownie się zapala? Wynika to z czasu jaki wymaga sam przycisk (jego konstrukcja) do odpowiedniego ustawienia się. Blaszka, która znajduje się w przycisku, po naciśnięciu ma drgania, które wymagają ustabilizowania się zanim osiągnięta zostanie prawidłowa pozycja. Blaszka oscyluje, co powoduje, że jest stan w bardzo krótkim czasie zmienia się wielokrotnie. Dla nas ten czas jest zbyt mały byśmy mogli to obserwować, ale dla sprzętu czas ten jest wyjątkowo długi by odczytany stan zmienił się kilkukrotnie (niski, wysoki). Producent w nocie katalogowej określa czas potrzebny na stabilizację około 20ms.


arduino

boolean pozycjaPrzycisku = false; void setup() { Serial.begin(9600); pinMode(3, OUTPUT); digitalWrite(3,LOW); pinMode (4, INPUT); } void loop() { if(digitalRead(4) == HIGH) { if(pozycjaPrzycisku == false) Serial.println("Dioda ON"); else Serial.println("Dioda OFF"); delay(20); pozycjaPrzycisku = !pozycjaPrzycisku; digitalWrite(3,pozycjaPrzycisku); while(digitalRead(4) == HIGH); delay(20); } }

Po wprowadzeniu zmian otrzymujemy efekt gaszenia i zapalania diody zgodnie z założeniem.


Brak komentarzy:

Prześlij komentarz