DIY-MedTech Arduino Basics - Team Tamberg
From Hackteria Wiki
Arduino Basics mit @tamberg im Rahmen von Medizintechnik DIY
Contents
Arduino Tutorial
http://www.tamberg.org/chopen/2017/LoRaWANIoTWorkshop.pdf
- Arduino Programmierumgebung (IDE) einrichten p.12, 13
- Text schicken (Serial Output) vom Arduino zum Computer p.16, 17
- LED blinken (Digital Output), p.24, 25
- Schalter lesen (Digital Input), p.27, 28
- LED schalten, p.29
- Licht messen (Analog Input), p.31, 32
- Servo steuern (PWM Output), p.36, 37
- Servo mit Licht steuern, p.38
Vertiefung: LED schlauer schalten
Wie kann man eine LED Lampe so schalten, dass sie beim ersten Knopfdruck an geht, und beim nächsten wieder aus?
Versuch I: LED schalten mit Counter
Versuch II: LED schalten mit State Machine
Mit einer State Machine (Zustandsmaschine) kann man sich den Zustand (hier s0, s1, s2, s3) merken:
- Zustand s0: bei Switch Input LOW => bleibe in Zustand s0, bei HIGH => gehe zu Zustand s1
- Zustand s1: bei Switch Input HIGH => bleibe in Zustand s1, bei LOW => gehe zu Zustand s2; schalte LED ein
- Zustand s2: bei Switch Input LOW => bleibe in Zustand s2, bei HIGH => gehe zu Zustand s3
- Zustand s3: bei Switch Input HIGH => bleibe in Zustand s3, bei LOW => gehe zu Zustand s0; schalte LED aus
Im Programm benutzen wir eine if (...) {...} else if (...) {...} Bedingung, um die State Machine zu bauen.
Den aktuellen Zustand speichern wir in der Variable state, Übergänge in denselben Zustand, z.B. s2 => s2 lassen wir einfach weg.
int switchPin = 2;
int ledPin = 13;
int state = 0;
void setup () {
Serial.begin(9600);
pinMode(switchPin, INPUT);
pinMode(ledPin, OUTPUT);
}
void loop () {
int switchValue = digitalRead(switchPin);
Serial.println(state);
if ((state == 0) && (switchValue == HIGH)) {
state = 1;
} else if ((state == 1) && (switchValue == LOW)) {
digitalWrite(ledPin, HIGH);
state = 2;
} else if ((state == 2) && (switchValue == HIGH)) {
state = 3;
} else if ((state == 3) && (switchValue == LOW)) {
digitalWrite(ledPin, LOW);
state = 0;
}
}