/* * Kodierschalter mit 16 Stellungen mittels ADC lesen */ #define ADC_PIN A0 #define ADC_OFFSET 512 // Code am ADC, wenn alle Schalter offen sind, Code 0 #define ADC_RANGE 512 // aktiver Messbereich, meistens die Hälfte der Codes #define TEST // Testausgabe aktivieren void setup() { Serial.begin(9600); Serial.println("\r\n\r\n16er Encoder mit ADC lesen"); } int read_encoder(void) { int tmp; tmp = analogRead(ADC_PIN); #ifdef TEST Serial.print("ADC: "); Serial.println(tmp); #endif if (tmp < ADC_OFFSET) tmp = ADC_OFFSET; tmp = (tmp - ADC_OFFSET + (ADC_RANGE/32)); tmp = (tmp * 16 ) / ADC_RANGE; if (tmp > 15) tmp = 15; return tmp; } void loop() { int code; code = read_encoder(); Serial.print("Code: "); Serial.println(code); delay(1000); }