Willkommen auf unserem Seminar-Blog

Immer auf dem aktuellen Stand bleiben

Dieser Seminar-Blog befindet sich noch im Aufbau und wird in den kommenden Tagen entsprechend verfeinert.

Member Login

Lost your password?

Registration is closed

Sorry, you are not allowed to register by yourself on this site!

You must either be invited by one of our team member or request an invitation by email at viad.info {at} zhdk {dot} ch.

PHC Aufgabe 7: Wie sag’ ich’s mit einer LED?

5. November 2010

Wie lässt sich mit LEDs ja/nein sagen? Wir wählten für diese Frage einen Versuchsaufbau aus 9 LEDs aus und versuchten, mit dem uns bekannten Logikchip 74138 zu arbeiten. Leider stellte sich heraus, dass sich dieser Chip nicht zum gleichzeitigen Ansteuern von LEDs eignete. So wichen wir auf den Chip 74595 aus. Mit diesem können 8 Lämpchen gleichzeitig gesteuert werden. Das ist eine LED zu wenig, wir entschlossen uns trotzdem für diese Anordnung und steuerten die einzelne LED (in der Mitte) separat, was programmiertechnisch kein Problem darstellte.

Übersicht des Durcheinanders

- Nachdem die ersten Programmierhindernisse aus dem Weg geräumt waren, tasteten wir uns langsam an kompliziertere Symbole heran. Nach einem simplen "PLUS" (ja) und "KREUZ" (nein), liessen wir eine animierte Welle durchlaufen und versuchen schlussentlich noch, Text zu erstellen. Dabei sind nicht alle Buchstaben möglich. Wir entschieden uns für "OK" und "NO". Beim "N" von "NO" fiel uns dann auf, dass nicht alle Buchstaben wirklich erkennbar sind. So mussten wir von unserer Alphabet-Idee, die wir zuvor gefasst hatten, Abstand nehmen. Wellen-Beispiel YouTube Preview Image Weiter griffen wir nochmals das Thema "Ja" / "Nein" auf, verwendeten aber die Worte "OK" bzw. "NO". OK YouTube Preview Image NO YouTube Preview Image Sourcecode: #define LED 7 int latchPin = 8; int clockPin = 12; int dataPin = 11; byte nachricht = 0; int j = 0; void setup() { Serial.begin(9600); pinMode(latchPin, OUTPUT); pinMode(LED, OUTPUT); digitalWrite(LED, HIGH); } void loop(){ j = 0; shiftOut(dataPin, clockPin, 0); if(Serial.available() > 0){ nachricht = Serial.read(); } handleInput(); } void handleInput(){ digitalWrite(latchPin, LOW); if(nachricht == 'y'){ sayYes(); } else if(nachricht == 'n'){ sayNo(); } else if(nachricht == 'c'){ countUp(); } else if(nachricht == 'w'){ welle(); } else if(nachricht == 'o'){ allesOK(); } else if(nachricht == 'x'){ nichtsOK(); } digitalWrite(latchPin, HIGH); delay(500); } void allesOK(){ int allesOKArray[] = {255, 173}; if(Serial.available() > 0){ nachricht = Serial.read(); } digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, allesOKArray[0]); digitalWrite(LED, LOW); digitalWrite(latchPin, HIGH); delay(500); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, 0); digitalWrite(latchPin, HIGH); digitalWrite(LED, LOW); delay(200); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, allesOKArray[1]); digitalWrite(LED, HIGH); digitalWrite(latchPin, HIGH); delay(500); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, 0); digitalWrite(latchPin, HIGH); delay(200); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, 0); digitalWrite(latchPin, HIGH); digitalWrite(LED, LOW); delay(1000); } void nichtsOK(){ int nichtsOKArray[] = {189, 255}; if(Serial.available() > 0){ nachricht = Serial.read(); } digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, nichtsOKArray[0]); digitalWrite(LED, HIGH); digitalWrite(latchPin, HIGH); delay(500); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, 0); digitalWrite(latchPin, HIGH); digitalWrite(LED, LOW); delay(200); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, nichtsOKArray[1]); digitalWrite(LED, LOW); digitalWrite(latchPin, HIGH); delay(500); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, 0); digitalWrite(latchPin, HIGH); delay(200); digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, 0); digitalWrite(latchPin, HIGH); digitalWrite(LED, LOW); delay(1000); } void countUp(){ for (j = 0; j 0){ nachricht = Serial.read(); } digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, j); digitalWrite(latchPin, HIGH); delay(100); } } void welle(){ int welleArray[] = {41, 66, 148, 0}; digitalWrite(LED, HIGH); for (j = 0; j 0){ nachricht = Serial.read(); } digitalWrite(latchPin, LOW); shiftOut(dataPin, clockPin, welleArray[j]); digitalWrite(latchPin, HIGH); delay(500); } } void sayYes(){ j = 90; digitalWrite(LED, HIGH); shiftOut(dataPin, clockPin, j); } void sayNo(){ j = 165; digitalWrite(LED, HIGH); shiftOut(dataPin, clockPin, j); } void shiftOut(int myDataPin, int myClockPin, byte myDataOut) { int i = 0; int pinState; pinMode(myClockPin, OUTPUT); pinMode(myDataPin, OUTPUT); digitalWrite(myDataPin, 0); digitalWrite(myClockPin, 0); for (i=7; i>=0; i--)  { digitalWrite(myClockPin, 0); if ( myDataOut & (1<