Zahlensysteme - Display als Lernhilfe

Ob Ausbildung, Studium oder Hobby. Ohne Grundlagen weiß man nur bedingt was man tut. Am Anfang jeder Einführung in die Informatik stehen die Zahlensysteme. Trotz trockener Mathematik kann man sich dem Thema auch praktisch nähern. Oder zumindest ein Tool zur Überprüfung der Umrechnung programmieren.
Die folgende Anwendung stellt eine Erweiterung des Programms aus dem Artikel "Lauflicht" dar. Die Darstellung und Formatierung der einzelnen Werte übernimmt die Funktion "sprintf" (siehe Anwendung "Metering" aus dem Lernpaket)
Zahlensysteme auf dem Arduino
Bedienung
Die Eingabe der Werte geht über die beiden Displaytasten. Dabei werden wie bei einem Schieberegister die einzelnen Bits von rechts eingeschoben. Eine "0" mit der rechten Taste und eine "1" mit der linken.
Und hier geht's zum Download.
#include "Display.h"
#include "SPI.h"

#define LCD_BUTTON_LEFT A4
#define LCD_BUTTON_RIGHT A5

const PROGMEM byte ledOn [] = {
  0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
};
const PROGMEM byte ledOff [] = {
  0xFF, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0xFF,
};

Display lcd = Display();
byte x = 0;

void setup() {
  lcd.init(20);
  pinMode(LCD_BUTTON_LEFT, INPUT_PULLUP);
  pinMode(LCD_BUTTON_RIGHT, INPUT_PULLUP);
  draw();
}

void loop() {
  if (!digitalRead(LCD_BUTTON_LEFT)) {
    x = x<<1;
    x = x | 0b00000001;
    draw();
    delay(200);
  } else if (!digitalRead(LCD_BUTTON_RIGHT)) {
    x = x<<1;
    draw();
    delay(200);
  }
}

void draw() {
  lcd.clearVideoBuffer();
  for (byte i=0; i<8; i++) {
    if (x & (1<<i)) {
      lcd.drawBitmap(120 - (i*16), 8, 8, 8, ledOn);
    } else {
      lcd.drawBitmap(120 - (i*16), 8, 8, 8, ledOff);
    }
  }
  char buffer[50]; 
  sprintf(buffer, "Dec: %03d ", x);
  lcd.drawString(8, 30, buffer);
  sprintf(buffer, "Hex: 0x%02X", x);
  lcd.drawString(8, 40, buffer); 
  lcd.show();
}

Links und Referenzen: