Mit einem Taster etwas ein- und ausschalten, hier im Beispiel eine LED, ist gar nicht so einfach. Ein Schalter behält seine Schaltstellung nach einem Schaltvorgang bei. Ein Taster kann immer nur das gleiche Signal weitergeben. Deshalb muss irgendwo der Zustand vor dem letzten Drücken gespeichert werden, oder der aktuelle Zustand ausgelesen werden.
In der Grafik seht ihr den Aufbau auf dem Breadbord.
Push button mit Ardublock und einer Variablen:
Mit Ardublock wird lediglich eine Variable benötigt, die den Zustand speichert. In diesem Fall wird die Variable (var) pin 2 auf high gesetzt. So rechnet das Skript +1 zur Variablen dazu: 0+1 = 1. Im nächsten Schritt wird "getestet" ob "var" = 1 ist. Dies ist nun der Fall, also wird pin 4 auf high gesetzt. Wird nun der Taster noch einmal gedrückt, rechnet die Variable "var" wieder +1, also: 1+1=2. Im nächsten Schritt wird geprüft ob "var" = 2 ist. Dies ist der Fall, also wird pin 4 auf "low" gesetzt. Damit der Speicher nicht "überläuft", wird die Variable "var" automatisch auf 0 gesetzt und alles beginnt von vorne.
Hier noch das mit ardublock ausgegebene skript:
int _ABVAR_1_var = 0 ;
void setup()
{
pinMode( 2 , INPUT);
pinMode( 4 , OUTPUT);
_ABVAR_1_var = 0 ;}
void loop()
{
if ( digitalRead( 2))
{
_ABVAR_1_var = ( 1 + _ABVAR_1_var ) ;
delay( 10 );
if (( ( _ABVAR_1_var ) == ( 1 ) ))
{
digitalWrite( 4 , HIGH );
delay( 300 );
}
if (( ( _ABVAR_1_var ) == ( 2 ) ))
{
digitalWrite( 4 , LOW );
delay( 300 );
_ABVAR_1_var = 0 ;
}
}
Push Button mit Ardublock und Pinabfrage:
Eine zweite Möglichkeit einen push Button zu programmieren ist, den pin Ausgang abzufragen. Beim Drücken des Tasters wird nicht nur pin 2 abgefragt, sondern auch pin 4 mit der LED. Ist die LED an, ist pin 4 high. Ist sie aus, ist pin 4 low. Wird der Taster gedrückt, fragt der Arduino also zusätzlich den pin Ausgang ab. Dabei ergeben sich nur zwei Möglichkeiten.
- Ist pin 2 high (Taster gedrückt) und pin 4 low = schalte die LED an, denn sie ist gerade aus
- Ist pin 2 high (Taster gedrückt) und pin 4 high = schalte die LED aus, denn sie ist gerade an
Hier noch das mit ardublock ausgegebene skript
int _ABVAR_1_var = 0 ;
void setup()
{
pinMode( 2 , INPUT);
pinMode( 4 , INPUT);
pinMode( 4 , OUTPUT);
_ABVAR_1_var = 300 ;}
void loop()
{
if (( digitalRead( 2) && !( digitalRead( 4) ) ))
{
digitalWrite( 4 , HIGH );
delay( _ABVAR_1_var );
}
if (( digitalRead( 2) && digitalRead( 4) ))
{
digitalWrite( 4 , LOW );
delay( _ABVAR_1_var );
}
}