DIY-MedTech Arduino Basics - Team Tamberg

From Hackteria Wiki
Revision as of 11:04, 14 February 2018 by Tamberg (talk | contribs) (Vertiefung: LED schlauer schalten)
Jump to: navigation, search

Arduino Basics mit @tamberg im Rahmen von Medizintechnik DIY

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

<quote>Wie kann man eine LED Lampe so schalten, dass sie beim ersten Knopfdruck an geht, und beim nächsten wieder aus?</quote>

Mit einer State Machine (Zustandsmaschine) kann man sich den Zustand (hier s0, s1, s2, s3) merken: LEDSwitchStateMachine.jpg

  • 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;
    }
}