Go Down

Topic: Arduino Uno und Menü für LCD Keypad Shield (Read 14667 times) previous topic - next topic


skorpi08

So ja:
Code: [Select]
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.
Nicht Mensch, nicht Tier: Programmierer halt...

Jomelo

#122
Apr 01, 2013, 07:27 pm Last Edit: Apr 01, 2013, 07:31 pm by Jomelo Reason: 1
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: [Select]

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.  :D

skorpi08

#123
Apr 01, 2013, 09:12 pm Last Edit: Apr 01, 2013, 09:28 pm by skorpi08 Reason: 1
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
Nicht Mensch, nicht Tier: Programmierer halt...

Jomelo

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

Jomelo

#125
Apr 02, 2013, 12:07 pm Last Edit: Apr 02, 2013, 12:35 pm by Jomelo Reason: 1
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.

skorpi08

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.
Nicht Mensch, nicht Tier: Programmierer halt...

Jomelo

#127
Apr 02, 2013, 08:14 pm Last Edit: Apr 02, 2013, 08:17 pm by Jomelo Reason: 1
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]

skorpi08

Meinst du so?

Code: [Select]

// 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.
Nicht Mensch, nicht Tier: Programmierer halt...

Jomelo

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

Jomelo

#130
Apr 02, 2013, 08:27 pm Last Edit: Apr 02, 2013, 08:29 pm by Jomelo Reason: 1
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: [Select]

else if(value >= _BUTTON_back_min && value <= _BUTTON_back_max)
    {
      ButtonMode_help_quit();
    }


muss das hier gemacht werden

Code: [Select]

    if(value >= _BUTTON_back_min && value <= _BUTTON_back_max)
    {
      ButtonMode_help_quit();
    }


skorpi08

#131
Apr 02, 2013, 08:28 pm Last Edit: Apr 02, 2013, 08:30 pm by skorpi08 Reason: 1
Ja der rest funktioniert.

EDIT: Ich hab Mac OS IDE 1.0.4, LEFT BUTTON dient auch als BACK BUTTON
Nicht Mensch, nicht Tier: Programmierer halt...

Jomelo

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

skorpi08


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


Man gewöhnt sich an alles. Zu vergleichen mit Win7 und Win 8.
Nicht Mensch, nicht Tier: Programmierer halt...

Jomelo

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

Go Up