Hallo zusammen,
Ich brauche mal eure Hilfe, ich versuche gerade mir ein lcd Menue (16x2) mit zwei Einträgen (Name und Ort) zu erstellen. Das Menü soll dazu dienen zwei variablen zu befüllen die später im Programm verwendet werden (es soll ein Ausdruck über einen Thermodrucker erfolgen) sollen. Idealerweise mit einem rotary encoder mit klick Funktionalität... Zur Not reichen mir aber auch die Buttons des shields und die analog Auswertung.
Ich lerne zur Zeit Schritt für Schritt mit dem Arduino umzugehen habe auch schon versucht mit Arrays zu arbeiten doch so bekomme ich immer nur einzelne Buchstaben und das ganze nicht in einen string. Jetzt hab ich schon gelesen das ich mit Zeigern und Funktionen arbeiten könnte, leider fehlen mir hier jedoch die Kenntnisse...
Kann mir jemand ein paar Tipps geben wie ich am besten vorgehen kann?
Ich habe schon so viele unterschiedliche Versionen versucht das hier scheint mir zumindest vom Ansatz die vielversprechendste zu sein... Doch wie gesagt... Ich komme nicht mehr weiter....
#define WITH_LCD 1
#include <ClickEncoder.h>
#include <TimerOne.h>
#ifdef WITH_LCD
#include <LiquidCrystal.h>
int i = 0;
int menue = 0;
/*
The circuit:
* LCD RS pin to digital pin 12
* LCD Enable pin to digital pin 11
* LCD D4 pin to digital pin 5
* LCD D5 pin to digital pin 4
* LCD D6 pin to digital pin 3
* LCD D7 pin to digital pin 2
* LCD R/W pin to ground
* 10K resistor:
* ends to +5V and ground
* wiper to LCD VO pin (pin 3)
*/
#define LCD_CHARS 20
#define LCD_LINES 4
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
#endif
ClickEncoder *encoder;
int16_t last, value;
void timerIsr() {
encoder->service();
}
void setup() {
Serial.begin(9600);
encoder = new ClickEncoder(A9, A8, A10);
#ifdef WITH_LCD
lcd.begin(LCD_CHARS, LCD_LINES);
lcd.clear();
#endif
Timer1.initialize(1000);
Timer1.attachInterrupt(timerIsr);
last = -1;
}
void loop() {
char Zeichen [108] = { 'A','A','A','A','B','B','B','B','C','C','C','C','D','D','D','D','E','E','E','E','F','F','F','F','G','G','G','G','H','H','H','H','I','I','I','I','J','J','J','J','K','K','K','K','L','L','L','L','M','M','M','M','N','N','N','N','O','O','O','O','P','P','P','P','Q','Q','Q','Q','R','R','R','R','S','S','S','S','T','T','T','T','U','U','U','U','V','V','V','V','W','W','W','W','X','X','X','X','Y','Y','Y','Y','Z','Z','Z','Z','_','_','_','_'};
char Name[16] = {'""','""','""','""','""','""','""','""','""','""','""','""','""','""','""','""'};
value += encoder->getValue();
/*
if (value != last) {
last = value;
Serial.print("Encoder Value: ");
Serial.println(value);
#ifdef WITH_LCD
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(0, 0);
lcd.print(value);
#endif
}
*/
if (value >= 0 && value != last && value <= 107) // noch testen
{
/*
if (menue <= 10)
{
if (value != last)
{
last = value;
//#ifdef WITH_LCD
if (menue <=5)
{
lcd.setCursor(1, 0);
lcd.print("Ort");
lcd.setCursor(10, 0);
lcd.print(value);
}
if (menue <= 10 && menue >=5)
{
lcd.setCursor(1, 0);
lcd.print("Name");
lcd.setCursor(10, 0);
lcd.print(value);
}
}
menue++;
}
*/
/// Name eingeben
if (i<=16)
{
if (value != last)
{
Serial.print("Wert ");
Serial.println(Zeichen[int ((value))]);
last = value;
//#ifdef WITH_LCD
lcd.setCursor(i, 0);
lcd.print(" ");
lcd.setCursor(i, 0);
lcd.print(Zeichen[int ((value))]);
Name[i] = Zeichen[int ((value))];
// String Name = String(Name[1]+ String(Name[2]) );
// lcd.setCursor(i, 1);
//lcd.print (Name);
}
}
}
ClickEncoder::Button b = encoder->getButton();
if (b != ClickEncoder::Open)
{
i++; //Bei klick stelle weiter
lcd.setCursor(9, 0);
lcd.print(i);
Serial.print(i);
Serial.print("Button: ");
#define VERBOSECASE(label) case label: Serial.println(#label); break;
switch (b)
{
//VERBOSECASE(ClickEncoder::Pressed);
case ClickEncoder::Pressed:
//VERBOSECASE(ClickEncoder::Held)
//VERBOSECASE(ClickEncoder::Released)
//VERBOSECASE(ClickEncoder::Clicked)
//case ClickEncoder::Clicked:
case ClickEncoder::DoubleClicked: //Doppelklick stelle zurück
i=i-2;
Serial.println("i-1");
break;
}
if(i > 20)
{
// lcd.setCursor(0, 1);
// lcd.print("Enter");
}
}
}
Gruß Jens
Von Arduino gesendet