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. - 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 Weiter griffen wir nochmals das Thema "Ja" / "Nein" auf, verwendeten aber die Worte "OK" bzw. "NO". OK NO 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<