Erstmal vielen Dank für den Tipp... hatte ich echt übersehen...
Was mir zuerst am Code von NUelectronics aufgefallen ist das keine Mittelwertbildung stattfindet und das kann selbst bei 1% Widerständen zum "Werteflimmern" führen.
Nun... dann habe ich mal den Mut und zeige Euch mal meinen bisherigen Lösungsansatz (in der Hoffung das Ihr nicht die Hände über dem Kopf zusammen schlagt)
#include <LiquidCrystal.h>
// LiquidCrystal CTC420L01 im 4-Bit-Modus:
// rs an pin 8
// rw an pin 7
// enable an pin 6
// d4, d5, d6, d7 an Pins 5, 4, 3, 2
LiquidCrystal lcd( 8, 7, 6, 5, 4, 3, 2);
// Variablen
// taste = Abfragewert der Tastatur
// i = Laufvariable für Mittelwert-Schleife
// Backlightpin = Anschlußpin für BackLight
// Soundpin = Anschlußpin für Beeper
int taste = 0;
int tastegedr = 0;
unsigned char i;
char Backlightpin = 9;
char Soundpin = 10;
char*tastentxt[6][6] = {"keine" , "hoch", "runter" , " rechts", " Links" , " Set"};
void setup()
{
pinMode(Backlightpin,OUTPUT); //Dimmbarer Ausgang für Backlight
analogWrite(Backlightpin,255); //Licht voll an
pinMode(Soundpin,OUTPUT); //Soundausgang
lcd.begin(4,20); // Definition eines 4 Reihen 20 Zeichen-Display
lcd.clear(); // Displayinhalt löschen
lcd.noCursor(); // Cursorblinken aus
lcd.setCursor(1,0);
lcd.print("Photo-Timer");
}
void loop()
{
TastenLesen();
DisplayAusgabe();
}
void TastenLesen()
{
taste = 0;
for (unsigned char i = 0;i< 8; i++) // for Schleife zum 8-fachen aufsummieren
{ // des Tastaturwertes.
taste = taste + analogRead(0); // Einlesen und Mittelwertbildung
} // durch mathem. Teilung durch
taste = taste >> 3; // die Anzahl der Schleifendurchläufe = binär 8
if (taste > 1020)
{
tastegedr = 0;// keine Taste
lcd.setCursor(0,1);
lcd.print("Taste = ");
lcd.print(tastegedr);
delay(30);
}
else
{
if (taste > 970 && taste < 976)//973 // Abfrage des eingelesenen Wertes "taste"
{ // und Vergleich mit den Nominal-Werten
tastegedr = 1; // Set-Taste // der jeweiligen Tast
analogWrite(Soundpin,127); //PWM macht noch keinen Ton... vielleicht umsteigen auf Digital
delay(10);
analogWrite(Soundpin,0); //Sound aus
// Für Debugging eingefügt
lcd.setCursor(0,1); // Positionierung im Display Reihe 1 Spalte 0
lcd.print("Taste = "); // Textausgabe
lcd.print(tastegedr); // gefolgt von Inhalt der Variablen "taste"
delay(30); // Kurze Pause
}
else
{
if (taste > 894 && taste < 900)//897
{
tastegedr = 2; // Up-Taste
analogWrite(Soundpin,127); // tastenpiep
delay(10);
analogWrite(Soundpin,0); //Sound aus
lcd.setCursor(0,1);
lcd.print("Taste = ");
lcd.print(tastegedr);
delay(30);
}
else
{
if (taste > 346 && taste < 352)//349
{
tastegedr = 3; //Down-Taste
analogWrite(Soundpin,127); //Tastenpiep
delay(10);
analogWrite(Soundpin,0); //Sound aus
lcd.setCursor(0,1);
lcd.print("Taste = ");
lcd.print(tastegedr);
delay(30);
}
else
{
if (taste > 716 && taste < 722)//719
{
tastegedr = 4; // Links-Taste
analogWrite(Soundpin,127); // Tastenpiep
delay(10);
analogWrite(Soundpin,0); // Sound aus
lcd.setCursor(0,1);
lcd.print("Taste = ");
lcd.print(tastegedr);
delay(30);
}
else
{
if (taste > 936 && taste < 942)//939
{
tastegedr = 5; // Rechts-Taste
analogWrite(Soundpin,127); // Tastenpiep
delay(10);
analogWrite(Soundpin,0); // Sound aus
lcd.setCursor(0,1);
lcd.print("Taste = ");
lcd.print(tastegedr);
delay(30);
}
else
{
}
}
}
}
}
}
delay(200); // das ist eine "Antiflimmerpause"
}
void DisplayAusgabe()
{
{
lcd.setCursor(0,2);
lcd.print("Sie drücken:");
//lcd.print(tastentxt[tastegedr][6]);
//lcd.print(tastentxt[6][tastegedr]);
delay(500);
//lcd.clear();
delay(5);
}
}
Ich schätze mal der Array-Ansatz ist völlig daneben...oder ??
Mir ging es darum aus der Varable tastegedr (das funktioniert) den numerischen Wert (0-5) in einen Text umzusetzen den dann in Display geprintet wird.
Das war bisher alles recht mühsam und ich habe lange gebraucht das bis hierher auch nur halbwegs zu verstehen...deswegen auch die endlosen Kommentare
Freue mich über Tipps und schaue mir mal die NUelectronic Lösung an.
LC