Pages: 1 ... 7 8 [9] 10   Go Down
Author Topic: Arduino Uno und Menü für LCD Keypad Shield  (Read 11423 times)
0 Members and 1 Guest are viewing this topic.
Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Klappt es den nun ?
Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

So ja:
Code:
void set_Date(uint8_t func_name)
  {
     // Wird nur einmal ausgeführt daher brauch diese Funktion keine Inhalt, darf aber nicht gelöscht werden
     if(!CONTROL_set_func_active(func_name)) { }
    // Alternative Schreibweise
     CONTROL_set_func_active(func_name);
     
    //Überprüft jede Sekunde ob änderungen vorhanden sind und führt diese dann aus
     if(CONTROL_refresh_time(1000, 1))
     
 {
    lcd.clear();
    char lcdline[17];
    lcd.setCursor(3,0);
    sprintf(lcdline,"%02d:%02d:%02d",hour(),minute(),second());
    lcd.print(lcdline);
    lcd.setCursor(3,1);
    sprintf(lcdline,"%02d.%02d.%04d",day(),month(),year());
    lcd.print(lcdline);
 }

lcd.blink(); habe ich rausgenommen, weil wenn (CONTROL_refresh_time(1000, 1)) ausgeführt wird, blinkt es nicht da wo es soll sondern hinter year()
Wenn man day() einstellt, aktualisiert sich nur jede sekunde und nicht beim Tastendruck.
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Du kannst auch die Zeit von 1000 ms  reduzieren. Nur irgendwann ist das Display nicht mehr schnell genug, daher ist das nicht die beste Lösung.

Ich habe mich da damals schon mit dem Problem beschäftigt und eine Funktion implementiert.

z.B.  die Variablen  'menu_button_down'  und die anderen Button Variablen auch zählen, nicht nur bis 1 sondern bis maximal 255.
Sprich wenn du deine Funktionen nach diesem Schema anpasst, sollte das Problem nicht mehr so groß sein:
Code:
setTime(hour(),minute(),second(),day(),month(),year()-menu_button_down);
menu_button_down=0;

Nun wird nicht -1 gerechnet sondern maximal -5 da die Button Press Time auf 200ms steht, werden 5 Tasten drücke Pro Sekunde maximal möglich sein.

Das geht natürlich auch mit + und month() und day() und und und.

Das ist das "dumme" oder "schöne" an der Programmierung, es gibt immer 1000 Lösungen und noch viel mehr, nur die eine bzw. die wenigen zu finden, die dich weiterbringen das ist nicht immer ganz leicht.  smiley-grin
« Last Edit: April 01, 2013, 12:31:28 pm by Jomelo » Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Wie kann man es machen dass nicht lcd.setCursor(9,1) blinkt sondern lcd.setCursor(year())?

Also komplett alle ziffern vom Jahr, Monat, Tag....
Bei lcd.setCursor(9,1) blinkt ja nur eine Ziffer
« Last Edit: April 01, 2013, 02:28:47 pm by skorpi08 » Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mir ist nicht bekannt das, dass geht. Da müsste man sich selbst eine Funktion schreiben.
Logged

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So, wieder ein Update fertig:

- Lib ist gleich geblieben
- Beispiel, dass dabei ist, wurde wesentlich vereinfacht und benötigt weniger Flash speicher bei gleichem Funktionsumfang
- Funktionen die nicht verändert werden müssen befinden sich in einer separaten Datei


Status: Beta Version


@skorpi08
Vielleicht kannst du es dir nochmal anschauen. Es ist wesentlich übersichtlicher geworden. Neue Funktionen lassen sich sehr einfach einbinden.

* LCDMenuLib.rar (9.09 KB - downloaded 9 times.)
« Last Edit: April 02, 2013, 05:35:58 am by Jomelo » Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Back button funzt nicht.

Der neueste Sketch: http://pastebin.com/ME322DiQ Binäre Sketchgröße: 11.918 Bytes
Davor: http://pastebin.com/Scc0T987 Binäre Sketchgröße: 11.378 Bytes

Hoffe ich hab da alles richtig angepasst.
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ok im Beispiel muss die   boolean CTR_check_button();   von der  "no_chages_here"  in die  Hauptdatei kopiert werden, am besten unter die Deklaration vom LiquidCrystal Objekt, dann läuft es.

Bei Version 1.01 läuft auch das anderes ;-)

[edit]
Ist das Beispiel so übersichtlicher ?
[/edit]

* LCDMenuLib.rar (9.1 KB - downloaded 7 times.)
« Last Edit: April 02, 2013, 01:17:17 pm by Jomelo » Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Meinst du so?

Code:
// LCD initialisieren
  LiquidCrystal lcd(_LCD_PIN_rs, _LCD_PIN_e, _LCD_PIN_dat4, _LCD_PIN_dat5, _LCD_PIN_dat6, _LCD_PIN_dat7);
boolean CTR_check_button();
Back Button funzt immer noch nicht.
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja, ich teste das nun nochmal. Mit Arduino 1.01 traten keine Fehler auf, ich muss mal eben herausfinden was sich geändert hat bis 1.04
Logged

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Erster Eintrag war Müll, ich lade gleich nochmal eine Version hoch.

In der  "no changes here"  befindet sich in der Funktion ButtonMode_analog() einen Fehler.

Aus dem letztem If
Code:
else if(value >= _BUTTON_back_min && value <= _BUTTON_back_max)
    {
      ButtonMode_help_quit();
    }

muss das hier gemacht werden

Code:
    if(value >= _BUTTON_back_min && value <= _BUTTON_back_max)
    {
      ButtonMode_help_quit();
    }
« Last Edit: April 02, 2013, 01:29:20 pm by Jomelo » Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ja der rest funktioniert.

EDIT: Ich hab Mac OS IDE 1.0.4, LEFT BUTTON dient auch als BACK BUTTON
« Last Edit: April 02, 2013, 01:30:22 pm by skorpi08 » Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmm, ich habe gerade kein Tastenfeld hier. Ich versuch das mal nachzuvollziehen, aber es ist schon merkwürdig, da es Serial funktioniert mit "back".
Logged

Cloppenburg
Offline Offline
Edison Member
*
Karma: 28
Posts: 1017
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

[edit]
Ist das Beispiel so übersichtlicher ?
[/edit]

Man gewöhnt sich an alles. Zu vergleichen mit Win7 und Win 8.
Logged

Nicht Mensch, nicht Tier: Programmierer halt...

Germany, Osnabrück
Online Online
God Member
*****
Karma: 30
Posts: 646
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hast du das mal mit der Änderung ausprobiert, also aus dem  else if  ein if zu machen ?
Logged

Pages: 1 ... 7 8 [9] 10   Go Up
Jump to: