Sari la conținut
ELFORUM - Forumul electronistilor

Pagini cu meniu si modificare/salvare parametri


catalin004

Postări Recomandate

Salut.

Astazi mi-am montat display-ul 4x20 si vreau sa ma apuc de modificari ale paginilor, meniului etc...problema este ca am incercat sa fac ceva simplu, adica 2 pagini si la a doua imi afisaza numai hieroglife....pe prima este ok...postez mai jos codul...

#include "LCD_config.h"
#include "hww.h"

void page1(){
LCD_Out(1, 1, " 3 Phase Invertory  ");
LCD_Out(2, 1, " Speed:     PWM:    ");
LCD_Out(3, 1, " Uout:              ");
LCD_Out(4, 1, " Iout:   ");
}

void page2(){
LCD_Out(1, 1, "     Parameters     ");
LCD_Out(2, 1, " I1=         U1=    ");
LCD_Out(3, 1, " I2=         U2=    ");
LCD_Out(4, 1, " I3=         U3=    ");
}



void main() {
static unsigned int stare_buton = 1;
Button_dir = INPUT;
LCD_Init();
LCD_Cmd(_LCD_CURSOR_OFF);
LCD_Cmd(_LCD_CLEAR);

LCD_Out(2, 1, "     Program    ");
LCD_Out(3, 1, "   pagini meniu  ");

for(;;){
        if(!Button){
        delay_ms(200);
                     if(!Button && stare_buton == 1)
                                {
                                 stare_buton = 0;
                                 page1();
                                 }
                     }
        if(!Button){
        delay_ms(200);
                      if(!Button && stare_buton == 0)
                                 {
                                 stare_buton = 1;
                                 page2();
                                  }
                      }

}}
Editat de catalin004
Link spre comentariu
Daca puneai si o poza, era mult mai bine pentru cei care ar putea sa-ti dea un sfat.

Cand scrii un text pe un display si apoi doresti sa modifici acel text cu altul, mai intai trebuie sa gasesti o metoda sa stergi ce ai scris prima data si apoi sa scrii pe un ecran curat.

La scoala, daca tabla de scris este plina, prima data se sterge tabla si apoi se scrie pe ea.

La tine acea curatare se intampla doar o singura data.

Editat de Elison
Link spre comentariu

Poti incerca asa.

Din buton selectezi menu = x; ( x = 0 sau 2 );

switch (menu) {
case 0:
LCD.Cmd(_LCD_CLEAR);
menu = 1;
break;
case 1:
  page1();
  break;
case 2:
  LCD.Cmd(_LCD_CLEAR);
  menu = 3;
  break;
case 3:
  page2();
  break;
  .
  .
  .
}
Link spre comentariu

Am incercat si cu CLEAR la fiecare pagina...si imi apar alte hieroglife....

Asigura-te ca tot timpul tiparesti 16 caractere pe linie, adica maxim. Daca ai caractere utile mai putine de 16, atunci adauga spatii (space). In acest fel numai ai nevoie sa stergi ecranul, o operatie care ia destul timp, incat face ca afisarea sa fie suparatoare (ezitanta).

Link spre comentariu

Salut...Mars am 20 caractere ...4x20 displayul.

Am facut exact ce ai zis tu cu spatiu in loc de clear ca am obsrvat ca merge greu...meniul am reusit sa il fac insa acum ma chinui cu selectia...trebuie facut un alt switch case care sa plimbe o sagetuta >

problema este ca la schimbarea meniului nu apare sagetuta la primul rand...apare dupa ce apas pe buton...

Ar mai fi o problema la selectie...cand apas enter sa zicem sau ok sa imi intre in meniul selectat...adica un flag separat in switchuri care sa depinda doar de selectia respectiva

 

adica if(ok apasat & option 1 selectat)

then ( afiseaza option 1 items)

Link spre comentariu

Cristi, tu ai facut design-ul la icon-uri?

Mie partea aceasta mi se pare cea mai scarboasa ...

Colegii mei care fac aplicatii PC primesc design-ul de la cei de la marketing si apoi se apuca sa deseneze pixeli :84

Tu cum ai facut?

 

Iar partea de UI mi se pare cea mai laborioasa intr-un software.

Partea de "handling" din spate nu este atat de dificila. Practic ai un contor care este incrementat / decrementat functie de apasarea unei taste / rotirea unui encoder. Treci rapid prin bucla respectiva si faci afisarea pe LCD numai daca difera contorul de cel din trecerea precedenta prin bucla. Aceasta pentru a face afisarea rapida.

 

Eu as fi folosit in loc de un Arduino Mega un blue-pill cu STM32F103C8T6 sau daca chiar vrei ceva gen MEGA (nevoie de pini multi) atunci un Arduino DUE. In felul acesta ti se misca si tie meniurile mai omeneste fara lag-ul acela de afisare.

 

LE: daca se doreste folosirea unui PIC atunci probabil ca trebuie minim un PIC din familia PIC32.

Editat de mars01
Link spre comentariu

Pentru aplicatii cu meniu mai complex (grafic) mi se par display-urile Nextion foarte tari. Am unu-l de 7" (sunt si modele mult mai mici 4.3", 5") si se misca foarte bine. Are un IDE pentru design unde incarci iconite facute cu photoshop sau alte tool-uri de imagini, le aranjezi cum vrei si incepi sa adaugi hotsopuri pentru touch. Cand se apasa un hotsop display-ul trimite prin UART id-ul butonului si poti apoi sa trimiti valori noi pentru campuri de text,etc... Sunt putin mai costisitoare decat un GLCD dar te scapa de multa munca la design prin IDE care e un fell de drag-n-drop cu elemente standard: camp text, imagini, introducere text / numere, scroll, progress bar, etc..

Editat de Bandi Szasz
Link spre comentariu

Mai ramane de vazut cat de rapide sunt.

Am cumparat si eu unul putin mai devreme (merci pentru pont), am facut comanda pentru versiunea de 3.5" pentru ca am vazut ca are procesor de 108MHz spre desosebire de cele cu dimensiuni mai mici care au procesor la 48MHz.

Link spre comentariu

Cristi, tu ai facut design-ul la icon-uri?

Mie partea aceasta mi se pare cea mai scarboasa ...

Colegii mei care fac aplicatii PC primesc design-ul de la cei de la marketing si apoi se apuca sa deseneze pixeli :84

Tu cum ai facut?

Salut mars01!

Da eu am facut iconurile. Am invatat singur, si acuma mi se par simple. As fi vrut sa deschid un topic, cu tema aceasta, cum sa realizam iconite pt diferite display-uri. Dar am facut o pauza pe acest forum din cauza unuia dintre forumisti.

Pe blogul meu era o postare, cum se realizeaza iconite, dar am sters tot de pe blog, youtube. Dar o sa revin pe forum, "ca imi este dor".

 

Cand faci ceva teste cu display-ul, deschide un topic, poate ma prind si eu, ca, chiar am de facut un proiect pt apartament.

 

Sa nu uitam ca suntem pe sectiunea PIC-uri :) .

Editat de Vizitator
Link spre comentariu

Sunt destul de rapide, uite aici ce am reusit sa fac eu pana acuma cu al meu. Momentan e doar strict display-ul fara montajul din spate pe care inca nu am avut timp sa-l termin, o sa fie un master RS485 care o sa comunice cu alte montaje slave prin casa. https://www.youtube.com/watch?v=LNrzKi-iN6U

 

 

On topic: La display-uri LCD 16X2 eu de obicei am o variabila char care retine ultimul buton apasat ( o structura if else care verifica fiecare buton in parte daca e apasat), dupa care trec acea variabila in "switch" si in functie de butonul apasat ori se fac mici operatii iar daca e nevoie de cod mai lung (5+ linii cod) apelez o functie, la sfarsit resetez variabila la 0 si se ia ciclul de la capat. Singura problema cu metoda aste e ca nu detecteaza apasari simultane, unde am avut nevoie am verificat in structura if prima data combinatii de butoane si in caz ca a fost gasit unu-l atunci am setat variabila char cu un numar mai mare de exemplu pronind de la 100 pt prima combinatie 101 pentru a doua etc..

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum
×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări