LCD menu maken

algemene C code
Berichten: 9
Geregistreerd: 29 Aug 2014, 20:26

LCD menu maken

Berichtdoor chofie12 » 29 Aug 2014, 20:30

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

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: LCD menu maken

Berichtdoor nicoverduin » 30 Aug 2014, 08:19

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?
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 9
Geregistreerd: 29 Aug 2014, 20:26

Re: LCD menu maken

Berichtdoor chofie12 » 30 Aug 2014, 09:56

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

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: LCD menu maken

Berichtdoor nicoverduin » 30 Aug 2014, 15:23

Dit al 's bekeken? viewtopic.php?f=9&t=817
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 167
Geregistreerd: 19 Apr 2014, 15:03

Re: LCD menu maken

Berichtdoor Hanneman » 02 Sep 2014, 21:39

en deze:

http://www.mathertel.de/Arduino/OneButtonLibrary.aspx

supergoeie library voor meerdere buttons te debouncen.

Berichten: 167
Geregistreerd: 19 Apr 2014, 15:03

Re: LCD menu maken

Berichtdoor Hanneman » 27 Sep 2014, 14:14

Ben je er nog uitgekomen?

Berichten: 9
Geregistreerd: 29 Aug 2014, 20:26

Re: LCD menu maken

Berichtdoor chofie12 » 21 Nov 2014, 11:52

Nee helaas tijd gebrek,

Berichten: 9
Geregistreerd: 29 Aug 2014, 20:26

Re: LCD menu maken

Berichtdoor chofie12 » 09 Jan 2015, 22:46

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;
}

Berichten: 4068
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: LCD menu maken

Berichtdoor shooter » 10 Jan 2015, 10:49

heel veel encoders hebben een button output als je er op drukt.
paul deelen
shooter@home.nl

Berichten: 9
Geregistreerd: 29 Aug 2014, 20:26

Re: LCD menu maken

Berichtdoor chofie12 » 11 Jan 2015, 21:23

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.

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 5 gasten