#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int dipSwitchPins[8] = {2,3,4,5,6,7,8,9};
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
for (int i=2; i<=10; i++)
pinMode(i, INPUT_PULLUP);
}
// BCD zu Dezimal konvertieren
byte bcd2dec( bool bcd1, bool bcd2, bool bcd3, bool bcd4 )
{
byte zahl = 0;
zahl = bcd4;
zahl = (zahl << 1);
zahl |= bcd3;
zahl = (zahl << 1);
zahl |= bcd2;
zahl = (zahl << 1);
zahl |= bcd1;
//zahl = (zahl << 1);
return zahl;
}
// Dezimalzahl auf LCD ausgeben
void dec_lcd_ausgabe( byte einer, byte zehner)
{
lcd.clear();
lcd.print("BCD zu Dez ");
lcd.setCursor(2,1);
lcd.print(einer);
lcd.print(zehner);
}
// Dualzahl auf LCD ausgeben
void bin_lcd_ausgabe( byte einer, byte zehner)
{
String binString="";
lcd.clear();
lcd.print("BCD zu BIN ");
lcd.setCursor(2,1);
for(int i=3; i>=0; i--)
{
if ( (zehner>>i ) & 1)
{
binString += "1";
}
else
{
binString += "0";
}
}
lcd.print(binString);
lcd.print(" "),
binString ="";
for(int i=3; i>=0; i--)
{
if ( (einer>>i ) & 1)
{
binString += "1";
}
else
{
binString += "0";
}
}
lcd.print(binString);
}
void loop()
{
byte einer, zehner;
einer = bcd2dec(!digitalRead(2), !digitalRead(3),
!digitalRead(4), !digitalRead(5));
zehner = bcd2dec(!digitalRead(6), !digitalRead(7),
!digitalRead(8), !digitalRead(9));
if(einer >9 || zehner>9)
{lcd.clear();
lcd.print("Fehler");
}
else
{
if (digitalRead(10))
{
bin_lcd_ausgabe(einer, zehner);
}
else
{
dec_lcd_ausgabe(einer, zehner);
}
delay(100);
}
}