Difference between revisions of "DIY-MedTech Arduino Basics - Team Tamberg"

From Hackteria Wiki
Jump to: navigation, search
(Vertiefung: LED schlauer schalten)
(Versuch I: LED schalten mit Counter)
Line 40: Line 40:
 
         }
 
         }
 
         counter++;
 
         counter++;
         if (counter % 2 == 1) {
+
         if (counter % 2 == 1) { // odd
 
             digitalWrite(ledPin, HIGH);
 
             digitalWrite(ledPin, HIGH);
         } else { // counter % 2 == 0
+
         } else { // even
 
             digitalWrite(ledPin, LOW);   
 
             digitalWrite(ledPin, LOW);   
 
         }
 
         }
Line 48: Line 48:
 
}
 
}
 
</pre>
 
</pre>
 +
 
====Versuch II: LED schalten mit State Machine====
 
====Versuch II: LED schalten mit State Machine====
 
Mit einer State Machine (Zustandsmaschine) kann man sich den Zustand (hier s0, s1, s2, s3) merken:
 
Mit einer State Machine (Zustandsmaschine) kann man sich den Zustand (hier s0, s1, s2, s3) merken:

Revision as of 11:25, 14 February 2018

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

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

Mit einem Counter (Zähler) können wir schauen, wie oft der Knopf gedrückt wurde.

Wenn der Counter ungerade ist, schalten wir die LED ein, wenn er gerade ist, schalten wir sie wieder aus.

int switchPin = 2;
int ledPin = 13;
int counter = 0;

void setup () {
    Serial.begin(9600);
    pinMode(switchPin, INPUT);
    pinMode(ledPin, OUTPUT);
}

void loop () {
    int switchValue = digitalRead(switchPin);
    Serial.println(counter);
    if (switchValue == HIGH) {
        while (switchValue == HIGH) {
            switchValue = digitalRead(switchPin);
        }
        counter++;
        if (counter % 2 == 1) { // odd
            digitalWrite(ledPin, HIGH);
        } else { // even
            digitalWrite(ledPin, LOW);  
        }
    }
}

Versuch II: LED schalten mit State Machine

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