====== Binärzahler ====== Dieses Programm zählt Binär von 0 bis 255 und gibt die 8bit Binärkombination auf 8 LEDs aus. /* * Dieses Programm zählt binär von 0 bis 255 und zeigt den aktuellen Zählerstand * mit 8 LEDs an 8 digitalen Ausgängen an. Bei 255 angekommen startet es wieder bei 0. */ byte b = B00000000; // Der Datentyp byte speichert einen vorzeichenlosen 8-Bit integer Wert zwischen 0 und 255. // Die Definition hier ist ein großes "B" für Bit. // Kann auch einfach 0 (Dezimal) oder 0x00 (Hexadezimal) sein. uint8_t c = 0; // Die 8 Bits repräsentiert durch 8 LEDs an 8 Ausgängen const uint8_t bit0 = 0; // LSB const uint8_t bit1 = 1; const uint8_t bit2 = 2; const uint8_t bit3 = 3; const uint8_t bit4 = 4; const uint8_t bit5 = 5; const uint8_t bit6 = 6; const uint8_t bit7 = 7; // MSB void setup () { Serial.begin (9600); pinMode (bit0, OUTPUT); pinMode (bit1, OUTPUT); pinMode (bit2, OUTPUT); pinMode (bit3, OUTPUT); pinMode (bit4, OUTPUT); pinMode (bit5, OUTPUT); pinMode (bit6, OUTPUT); pinMode (bit7, OUTPUT); while (!Serial) { // Trick 17: Das Hauptprogramm wird erst ausgeführt wenn die Serielle Konsole aufgemacht wurde. } // So verpasst man keine Ausgabe auf der Konsole weil das Programm losläuft bevor die Konsole offen ist. } void loop () { c = b % 256; // Definition bis wohin der Zähler zählen soll. % ist der Modulo Operator (Rest einer Division). // Bei %16 würde der Zähler z.B. immer nur von 0 bis 15 laufen und wieder von vorne bei 0 beginnen. digitalWrite (bit0, (c >> 0) % 2); // verschiebt die Bits um den angegebenen Wert nach rechts. Modulo 2 für Bitüberprüfung. digitalWrite (bit1, (c >> 1) % 2); // Bei Bit 0 verschieben um 0 digitalWrite (bit2, (c >> 2) % 2); // Bei Bit 4 verschieben um 4 usw... digitalWrite (bit3, (c >> 3) % 2); // digitalWrite (bit4, (c >> 4) % 2); // %2 zur Bitüberprüfung. Bei 1 LED an bei 0 LED aus digitalWrite (bit5, (c >> 5) % 2); digitalWrite (bit6, (c >> 6) % 2); digitalWrite (bit7, (c >> 7) % 2); Serial.println (c); // Kontrollausgabe der Dezimalzahl auf der seriellen Konsole b++; delay (1000); }