LCD menu maken
10 berichten
• Pagina 1 van 1
LCD menu maken
Hallo allen,
Ik be bezig om een menu te maken op een LCD scherm en deze met buttons te bedienen.
Ik heb al diverse mogelijk heden getest, ok die van Arduino, maar ik krijg het niet aan de gang.
zijn er hier leden die eventueel hun code willen delen?
m.v.g. Chris
Ik be bezig om een menu te maken op een LCD scherm en deze met buttons te bedienen.
Ik heb al diverse mogelijk heden getest, ok die van Arduino, maar ik krijg het niet aan de gang.
zijn er hier leden die eventueel hun code willen delen?
m.v.g. Chris
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: LCD menu maken
Als je een vraag hebt over code die niet werkt roep je een heleboel vragen op:
a) wat gaat er fout?... (compilatie, feitelijke werking)?
b) welke code heb je gebruikt?
c) welke library heb je gebruikt?
Nu ga je naar de auto garage zonder de auto mee te nemen.... en je roept... "hij doet het niet". Denk je dat de monteur weet waar je het over hebt?
a) wat gaat er fout?... (compilatie, feitelijke werking)?
b) welke code heb je gebruikt?
c) welke library heb je gebruikt?
Nu ga je naar de auto garage zonder de auto mee te nemen.... en je roept... "hij doet het niet". Denk je dat de monteur weet waar je het over hebt?
Re: LCD menu maken
De volgende heb ik gebruikt:
https://github.com/WiringProject/Wiring ... uBackend.h
Ik heb het voorbeeld geladen en aangesloten, maar de buttons werken niet.
Waarschijnlijk zijn er eenvoudiger programma's waarmee je het zelfde kan doen.
De bedoeling is om 3 sensoren uit te lezen in 3 verschillende menu's te bedienen door 3 buttons
namelijk up,down,select.
dit programma heb ik gebruikt:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
const int BTN_LEFT = 9;
const int BTN_RIGHT = 8;
const int BTN_CONFIRM = 10;
long last_read = 0;
char* list[] = {"chris1","stan2","menu3","menu4"};
byte index = 0;
void setup() {
Wire.begin(); // Join i2c bus
pinMode(BTN_LEFT,INPUT);
pinMode(BTN_RIGHT,INPUT);
pinMode(BTN_CONFIRM,INPUT);
lcd.begin(16,2);
Serial.begin(9600);
printMenu(list[index]);
}
void loop() {
if(millis() - last_read > 200) {
if(digitalRead(BTN_LEFT) == 1) {
buttonClicked(BTN_LEFT);
}
if(digitalRead(BTN_RIGHT) == 1) {
buttonClicked(BTN_RIGHT);
}
if(digitalRead(BTN_CONFIRM) == 1) {
buttonClicked(BTN_CONFIRM);
}
last_read = millis();
}
}
void buttonClicked(int btn) {
if(btn == BTN_LEFT && index > 0 ) {
--index;
} else if (btn == BTN_RIGHT && index < 3) {
index++;
} else if (btn == BTN_CONFIRM) {
char cmd[500] = "{\"menuSelected\": \"";
strcat(cmd,list[index]);
strcat(cmd, "\"}");
Serial.println(cmd);
}
printMenu(list[index]);
}
void printMenu(String s) {
lcd.clear();
lcd.print("OpenRad.io");
lcd.setCursor(0,1)
lcd.print(s);
}
Wat er gebeurt is dat de buttons niet goed door het menu lopen, ik vermoed dat ik de debounce mis.maar hoe kan ik dat
makkelijk voor 3 buttons maken.
m.v.g Chris
https://github.com/WiringProject/Wiring ... uBackend.h
Ik heb het voorbeeld geladen en aangesloten, maar de buttons werken niet.
Waarschijnlijk zijn er eenvoudiger programma's waarmee je het zelfde kan doen.
De bedoeling is om 3 sensoren uit te lezen in 3 verschillende menu's te bedienen door 3 buttons
namelijk up,down,select.
dit programma heb ik gebruikt:
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
const int BTN_LEFT = 9;
const int BTN_RIGHT = 8;
const int BTN_CONFIRM = 10;
long last_read = 0;
char* list[] = {"chris1","stan2","menu3","menu4"};
byte index = 0;
void setup() {
Wire.begin(); // Join i2c bus
pinMode(BTN_LEFT,INPUT);
pinMode(BTN_RIGHT,INPUT);
pinMode(BTN_CONFIRM,INPUT);
lcd.begin(16,2);
Serial.begin(9600);
printMenu(list[index]);
}
void loop() {
if(millis() - last_read > 200) {
if(digitalRead(BTN_LEFT) == 1) {
buttonClicked(BTN_LEFT);
}
if(digitalRead(BTN_RIGHT) == 1) {
buttonClicked(BTN_RIGHT);
}
if(digitalRead(BTN_CONFIRM) == 1) {
buttonClicked(BTN_CONFIRM);
}
last_read = millis();
}
}
void buttonClicked(int btn) {
if(btn == BTN_LEFT && index > 0 ) {
--index;
} else if (btn == BTN_RIGHT && index < 3) {
index++;
} else if (btn == BTN_CONFIRM) {
char cmd[500] = "{\"menuSelected\": \"";
strcat(cmd,list[index]);
strcat(cmd, "\"}");
Serial.println(cmd);
}
printMenu(list[index]);
}
void printMenu(String s) {
lcd.clear();
lcd.print("OpenRad.io");
lcd.setCursor(0,1)
lcd.print(s);
}
Wat er gebeurt is dat de buttons niet goed door het menu lopen, ik vermoed dat ik de debounce mis.maar hoe kan ik dat
makkelijk voor 3 buttons maken.
m.v.g Chris
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: LCD menu maken
Dit al 's bekeken? viewtopic.php?f=9&t=817
Re: LCD menu maken
en deze:
http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
supergoeie library voor meerdere buttons te debouncen.
http://www.mathertel.de/Arduino/OneButtonLibrary.aspx
supergoeie library voor meerdere buttons te debouncen.
Re: LCD menu maken
Ik heb het voor elkaar, maar nog niet naar mijn zijn
Hier is de code maar is nog niet af, ik wil er nog een button in bouwen om wat te kunnen selecteren
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
void Encoder_san();
//==============================================
//Set Encoder pin
//==============================================
const int Encoder_A = 3; // Incremental Encoder singal A is PD3
const int Encoder_B = 2; // Incremental Encoder singal B is PD2
//const int ledPin = 13;
unsigned int Encoder_number=0;
int state=0;
void setup()
{
Wire.begin(); // Join i2c bus
// Open serial communications and wait for port to open:
Serial.begin(9600);
lcd.begin(20, 4); // start the library
lcd.setCursor(0,0);
lcd.print("Menu (mph)");
delay(1000);
pinMode(Encoder_A, INPUT);
pinMode(Encoder_B, INPUT);
digitalWrite(Encoder_A, 1);
digitalWrite(Encoder_B, 1);
//========================================
attachInterrupt(1, Encoder_san, FALLING); //interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).
}
void loop() // run over and over
{
if (Encoder_number > 3) {
Encoder_number = 0;
}
lcd.clear();
switch (Encoder_number) {
case 1:
lcd.setCursor(0,0);
lcd.print("Speed (mph)");
delay(50);
break;
case 2:
lcd.setCursor(0,0);
lcd.print("Date: ");
lcd.setCursor(0,1);
lcd.print("Time: ");
lcd.print(".");
delay(50);
break;
case 3:
lcd.setCursor(0,0);
lcd.print("Altitude");
delay(50);
break;
case 4:
lcd.setCursor(0,0);
lcd.print("Level");
delay(50);
break;
default:
lcd.setCursor(0,0);
lcd.print("Long ");
lcd.setCursor(0,1);
lcd.print("Lat ");
delay(100);
}
}
void Encoder_san()
{
if(digitalRead(Encoder_B))
{
Encoder_number++;
}
else
{
Encoder_number--;
}
state=1;
}
Hier is de code maar is nog niet af, ik wil er nog een button in bouwen om wat te kunnen selecteren
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Addr, En, Rw, Rs, d4, d5, d6, d7, backlighpin, polarity
void Encoder_san();
//==============================================
//Set Encoder pin
//==============================================
const int Encoder_A = 3; // Incremental Encoder singal A is PD3
const int Encoder_B = 2; // Incremental Encoder singal B is PD2
//const int ledPin = 13;
unsigned int Encoder_number=0;
int state=0;
void setup()
{
Wire.begin(); // Join i2c bus
// Open serial communications and wait for port to open:
Serial.begin(9600);
lcd.begin(20, 4); // start the library
lcd.setCursor(0,0);
lcd.print("Menu (mph)");
delay(1000);
pinMode(Encoder_A, INPUT);
pinMode(Encoder_B, INPUT);
digitalWrite(Encoder_A, 1);
digitalWrite(Encoder_B, 1);
//========================================
attachInterrupt(1, Encoder_san, FALLING); //interrupts: numbers 0 (on digital pin 2) and 1 (on digital pin 3).
}
void loop() // run over and over
{
if (Encoder_number > 3) {
Encoder_number = 0;
}
lcd.clear();
switch (Encoder_number) {
case 1:
lcd.setCursor(0,0);
lcd.print("Speed (mph)");
delay(50);
break;
case 2:
lcd.setCursor(0,0);
lcd.print("Date: ");
lcd.setCursor(0,1);
lcd.print("Time: ");
lcd.print(".");
delay(50);
break;
case 3:
lcd.setCursor(0,0);
lcd.print("Altitude");
delay(50);
break;
case 4:
lcd.setCursor(0,0);
lcd.print("Level");
delay(50);
break;
default:
lcd.setCursor(0,0);
lcd.print("Long ");
lcd.setCursor(0,1);
lcd.print("Lat ");
delay(100);
}
}
void Encoder_san()
{
if(digitalRead(Encoder_B))
{
Encoder_number++;
}
else
{
Encoder_number--;
}
state=1;
}
Re: LCD menu maken
heel veel encoders hebben een button output als je er op drukt.
paul deelen
shooter@home.nl
shooter@home.nl
Re: LCD menu maken
Klopt, dat die er zijn,
helaas heb ik die nog niet in mijn bezit.
wat ik wil is dat ik met de encoder naar een menu titel draai en met de button het menu er achter open, waar ik vervolgens weer met de encoder verder kant kiezen, met als laatste keuze terug naar het hoofd menu.
Ik ga hiermee verder puzzelen.
helaas heb ik die nog niet in mijn bezit.
wat ik wil is dat ik met de encoder naar een menu titel draai en met de button het menu er achter open, waar ik vervolgens weer met de encoder verder kant kiezen, met als laatste keuze terug naar het hoofd menu.
Ik ga hiermee verder puzzelen.
10 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten