====== Temperaturanzeige ====== Dieses Programm stellt die Temperatur in Grad Celsius auf zwei Siebensegmentanzeigen dar. Die beiden Anzeigen werden mit Multiplexing angesteuert. Die Anoden der Siebensegmentanzeigen werden wie folgt angeschlossen: ^ Segment ^ Pin ^ Bit ^ | a | 8 | 6 | | b | 7 | 5 | | c | 6 | 4 | | d | 5 | 3 | | e | 4 | 2 | | f | 3 | 1 | | g | 2 | 0 | Die Kathoden der Siebensegmentanzeigen werden wie folgt angeschlossen: ^ Anzeige ^ Pin ^ Stelle ^ | 0 | 9 | 1er | | 1 | 10 | 10er | const int TEMP_DELAY_MS = 1000; const int DELAY_MS = 5; const int SEGMENT_PIN[] = { 8, 7, 6, 5, 4, 3, 2 }; const int SEGMENT_PIN_COUNT = 7; const int DISPLAY_PIN[] = { 9, 10 }; const int DISPLAY_PIN_COUNT = 2; const byte DIGIT[] = { // abcdefg B01111110, // 0 B00110000, // 1 B01101101, // 2 B01111001, // 3 B00110011, // 4 B01011011, // 5 B01011111, // 6 B01110000, // 7 B01111111, // 8 B01111011 // 9 }; const int DIGIT_COUNT = 10; byte tempC; unsigned long nextReadTemp; void setup() { int i = 0; while (i < SEGMENT_PIN_COUNT) { pinMode(SEGMENT_PIN[i], OUTPUT); i = i + 1; } i = 0; while (i < DISPLAY_PIN_COUNT) { pinMode(DISPLAY_PIN[i], OUTPUT); i = i + 1; } } void readTemp() { unsigned long now = millis(); if (now > nextReadTemp) { int reading = analogRead(0); float millivolts = reading * 5.0 / 1024.0; tempC = 25 + (millivolts - 0.75) * 100; nextReadTemp = now + TEMP_DELAY_MS; } } void showByte(byte b) { byte i = 0; while (i < SEGMENT_PIN_COUNT) { if ((b & (1 << i)) != 0) { digitalWrite(SEGMENT_PIN[i], HIGH); } else { digitalWrite(SEGMENT_PIN[i], LOW); } i = i + 1; } } void loop() { readTemp(); // Display 0 einschalten (LOW), 1 ausschalten (HIGH) digitalWrite(DISPLAY_PIN[0], LOW); digitalWrite(DISPLAY_PIN[1], HIGH); showByte(DIGIT[tempC % 10]); delay(DELAY_MS); // Display 0 ausschalten (HIGH), 1 einschalten (LOW) digitalWrite(DISPLAY_PIN[0], HIGH); digitalWrite(DISPLAY_PIN[1], LOW); showByte(DIGIT[tempC / 10]); delay(DELAY_MS); }