#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2); // Initialisierung abgeschrieben !
#define Enc_A_Out 11 // Encoder Spur-A Ausgang low => on
#define Enc_B_Out 12 // Encoder Spur-B Ausgang npn-System
volatile byte gray_fake_counter = 0;
volatile boolean gray_fake_out_0 = 0; // Bit-0 in gray_fake_counter
volatile boolean gray_fake_in_1 = 0; // Bit-1 in gray_fake_counter
volatile byte bin_fake_counter = 0;
volatile boolean bin_fake_in_0 = 0; // Bit-0 in bin_fake_counter
volatile boolean bin_fake_1 = 0; // Bit-1 in bin_fake_counter
unsigned long actualtime;
unsigned long difftime;
void setup() {
// Initialize LCD
lcd.init();
lcd.backlight();
// Initialize encoder pins and Outputs
pinMode(Enc_A_Out, OUTPUT);
pinMode(Enc_B_Out, OUTPUT);
}
void convert_gray_to_dez () {
gray_in_0 = digitalRead(ENCODER_A); // Eingangsbits vom Encoder lesen und damit "gray_in_counter" Bit 0 u. 1 laden
gray_in_1 = digitalRead(ENCODER_B);
bitWrite(gray_in_counter, 0, gray_in_0); // gray_in_counter mit Bit 0 und Bit-1 laden
bitWrite(gray_in_counter, 1, gray_in_1);
// Gray to Bin -- "gray_in_counter" in "bin_in_counter" umwandeln
bin_in_1 = gray_in_1; // bin Bit-1 = gray Bit-1, 1 zu 1 kopieren
bin_in_0 = ( bin_in_1 ^ gray_in_0 ); // bin Bit-0 = bin Bit-1 EXOR gray Bit-0 !!!
bitWrite(bin_in_counter, 0, bin_in_0); // bin_in_counter mit Bit 0 und Bit-1 laden
bitWrite(bin_in_counter, 1, bin_in_1);
digitalWrite(Enc_A_Out, ! gray_in_0); // Encoder Spur-A und B über LED anzeigen
digitalWrite(Enc_B_Out, ! gray_in_1); // LED leuchtet bei Encoder = 0 !!!
}
void loop() {
convert_gray_to_dez ();
if (old_counter != counter) {
old_counter = counter;
// lcdputzen();
}
lcd.print("g_i_c 1 0:");
lcd.print( gray_in_counter );
lcd.print(" ");
lcd.print( gray_in_1 );
lcd.print( gray_in_0 );
lcd.setCursor(0, 1);
lcd.print( "b_i_c 1 0:" );
lcd.print( bin_in_counter );
lcd.print(" ");
lcd.print( bin_in_1 );
lcd.print( bin_in_0 );
}