Ich würde das so machen:
/* Beschaltung:
* Ein 100kOhm-Widerstand von A0 nach +5V
* Fuenf 1kOhm-Widerstaende in Reihe schalten zwischen +5V und GND
* den mittleren Anschluss vom Drehschalter an A0
* und die anderen fuenf Anschluesse der Reihe nach (bei GND anfangen) an die Widerstaende
*/
#define KeyboardIn A0 // die Widerstandsreihe liegt am Analoganschluss A0
const long KeyVals[] = {1000, 800, 600, 400, 200, 0}; // ungefaehre Analogwerte (bei 5 x 1kOhm, 5% Widerstaende)
const byte KeyChar[] = {0, 5, 4, 3, 2, 1}; // die dazugehoerigen Tasten oder Schaltstellungen bei einem Drehschalter
const byte KeyCount = sizeof(KeyChar); // die Anzahl der Tasten (KeyChar ist ein Byte-Array, also reicht sizeof)
const byte tolerance = 100; // dieser Toleranzwert wird zu den obigen Werten addiert (die Widerstandswerte schwanken)
byte key, prevkey; // zum merken der aktuellen und der letzten Taste
uint32_t DebounceMillis; // zum merken der Entprellzeit
uint16_t analogValue = 0; // zum auslesen des Analogwertes
void setup() {
Serial.begin(115200);
Serial.println(F("Start"));
}
void loop() {
if (millis() - DebounceMillis > 50) {
DebounceMillis = millis();
key = GetKey();
if (key > 0 && key != prevkey) {
prevkey = key;
Serial.print(F("Analogwert: "));
Serial.print(analogValue);
Serial.print(F(" Taste: "));
Serial.println(key);
}
}
}
byte GetKey() {
analogValue = analogRead(KeyboardIn);
for (byte i = 0; i < KeyCount; i++) {
if (analogValue + tolerance >= KeyVals[i]) return KeyChar[i];
}
}
"Schaltplan" im Anhang.