- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 6 von 6

Thema: Uhrzeit auf LCD mit Arduino ausgeben (Eigene Zeichen)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    14.04.2012
    Beiträge
    16
    Hallo! Danke für die schnelle Antwort =). Nur weiß ich nicht genau wie ich mit deiner Funktion arbeiten soll. Meine Eigenen Zeichen sind wie folgt aufgebaut:
    Code:
    void Null (int x, int y)
    {
      int xPos = x;
      int yPos = y;
      lcd.setCursor(xPos, yPos);
      lcd.write(7);
      lcd.write(7);
      lcd.write(7);
      lcd.setCursor(xPos, yPos+1);
      lcd.write(7);
      lcd.setCursor(xPos+2, yPos+1);
      lcd.write(7);
      lcd.setCursor(xPos, yPos+2);
      lcd.write(7);
      lcd.setCursor(xPos+2, yPos+2);
      lcd.write(7);
      lcd.setCursor(xPos, yPos+3);
      lcd.write(7);
      lcd.write(7);
      lcd.write(7);
    }
    Das wäre jetzt z.B. meine Null. Ich übergebe die X- und Y-Positon auf dem LCD als Paramter und die Zahlen werden angezeigt. Vielleicht gibt es noch eine bessere Möglichkeit =)?

    LG

  2. #2
    Erfahrener Benutzer Roboter-Spezialist Avatar von robo_tom_24
    Registriert seit
    04.02.2012
    Ort
    Burgenland, Österreich
    Beiträge
    485
    Schau, du zerlegst sozusagen deine Uhrezeit in die einzelnen Zeichen, wandelst diese in große um und setzt sie wieder als String zusammen

    Vielleicht verstehst du es so: (ich gehe jetzt davon aus, das deine Uhrzeit in als Zahl in Sekunden seit 1.1.1970 (?) daherkommt)
    time ist deine "ganze" Zeit in sekunden
    das array int small_time deine Uhrzeit in kleinen Buchstaben

    Du machst dir eine Funktion, bzw benutzt eine Fertige die die Sekunden in die aktuelle Uhrzeit umwandelt:
    Code:
    void time_to_number(long time, int* small_time)
    {
    //UMWANDELN
    }
    Dann sieht dein array z.B so aus (13:05:27):
    Code:
    small_time: 
    [0]: 1
    [1]: 3
    [2]: 0
    [3]: 5
    [4]: 2
    [5]: 7
    Nun kommt wieder eine Funktion die dir das Ganze in deinen Text umwandelt
    Code:
    #define x_pos(x) (x)*120         //X Position für jedes Zeichen ermitteln - ich gehe von 120x200 Pixel pro Zeichen aus
    #define y_pos     20                //Randabstand von oben
    
    void number_to_text (const int* small time)
    {
    
    int i; for(i=0;i<=5;i++) {
    switch(i) {
    case 0: Null(x_pos(i),y_pos); break; case 1: Eins(x_pos(i),y_pos); break; //Und so weiter....
    }
    }
    }
    Din deinem Hauptprogramm würde dann nur das stehen:
    Code:
    void main()
    {
    
    int small_time[6]; //Andere Dinge.... while(1) {
    time_to_number(funktion_die_zeit_liefert, small_time); number_to_text(small_time);
    }
    }
    Ich hoffe es hilft dir weiter

    Mir kommt gerade.... du könntest aber auch eine große 7 Segmentanzeige verwenden

    mfg thomas
    Geändert von robo_tom_24 (15.04.2012 um 12:23 Uhr) Grund: Hauptprogramm vergessen

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    14.04.2012
    Beiträge
    16
    Hallo! Danke nochmal für die Antwort! Habe mir jetzt selber etwas ausgedacht, werde deine Möglichkeit aber auch noch mal überdenken:
    Code:
    void Zeige_Uhrzeit ()
    {
      int StundeBit = hour()%10;
      int MinuteBit = minute()%10;
       
      lcd.clear();
      if(hour() < 10)
      {
        Null (1, 0);
      }
      else if ((hour()>10) && (hour()<20))
      {
        Eins (1, 0);
      }
      else if ((hour()>=20) && (hour()<=24))
      {
        Zwei(1, 0);
      }
      
      switch (StundeBit)
      {
        case (0):
        {
          Null (5, 0);
        } break;
         case (1):
        {
          Eins (5, 0);
        } break;
         case (2):
        {
          
         Zwei (5, 0);
        } break;
         case (3):
        {
          Drei (5, 0);
        } break;
         case (4):
        {
          Vier (5, 0);
        } break;
         case (5):
        {
          Fuenf (5, 0);
        } break;
         case (6):
        {
          Sechs (5, 0);
        } break;
         case (7):
        {
          Sieben (5, 0);
        } break;
         case (8):
        {
          Acht (5, 0);
        }
        case(9):
        {
          Neun (5, 0);
        } break;
      }
      
            if(second()%2 == 0)
      {
          Doppelpunkt(9, 0);
          Doppelpunkt(10, 0);
      }
      
      if(minute() < 10)
      {
        Null (12, 0);
      }
      else if ((minute()>=10) && (minute()<20))
      {
        Eins (12, 0);
      }
      else if ((minute()>=20) && (minute()<30))
      {
        Zwei(12, 0);
      }
      else if ((minute()>=30) && (minute()<40))
      {
        Drei(12, 0);
      }
      else if ((minute()>=40) && (minute()<50))
      {
        Vier(12, 0);
      }
       else if ((minute()>=50) && (minute()<60))
      {
        Fuenf(12, 0);
      }
      else if (minute()==60)
      {
        Sechs(12, 0);
      }
    
      switch (MinuteBit)
      {
        case (0):
        {
          Null (16, 0);
        } break;
         case (1):
        {
          Eins (16, 0);
        } break;
        case (2):
        {
         Zwei (16, 0);
        } break;
        case (3):
        {
          Drei (16, 0);
        } break;
        case (4):
        {
          Vier (16, 0);
        } break;
        case (5):
        {
          Fuenf (16, 0);
        } break;
        case (6):
        {
          Sechs (16, 0);
        } break;
        case (7):
        {
          Sieben (16, 0);
        } break;
        case (8):
        {
          Acht (16, 0);
        }
        case(9):
        {
          Neun (16, 0);
        } break;
      }
    }
    Ein bisschen lang - aber es funktioniert =)

    Edit: Meine Zeit wird in folgendem Format geliefert: HH:MM:SS.
    Edit: Ich muss gestehen, dass ich deine Möglichkeit immer noch nicht verstehe. Liegt mit Sicherheit daran, dass ich mich mehr mit Spieleprogrammierung beschäftigt habe ... Aber mach dir nix drauß ... deine Lösung ist bestimmt besser, aber meine Funkiutoniert ja auch!

    LG!
    Geändert von NukeNoob (15.04.2012 um 12:33 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist Avatar von robo_tom_24
    Registriert seit
    04.02.2012
    Ort
    Burgenland, Österreich
    Beiträge
    485
    Wenn ichs dir nochmals erklären soll, als Text, bitte melden
    Für eine Arbeit soll der Code ja auch schön sein

    mfg thomas

Ähnliche Themen

  1. LCDChar Designer für Eigene Zeichen in BASCOM...
    Von MST_NRW im Forum Open Source Software Projekte
    Antworten: 23
    Letzter Beitrag: 04.03.2012, 10:30
  2. Problem mit LCD03, mit eigene Zeichen erstellen ?
    Von Enterprise im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 22.03.2009, 14:05
  3. EA DOG Display, eigene Zeichen in Bascom !?
    Von comex im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 0
    Letzter Beitrag: 27.02.2007, 00:44
  4. Große Zeichen auf Display ausgeben
    Von Olle_Filzlaus im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 11
    Letzter Beitrag: 28.02.2006, 20:57
  5. Spezielles Ascii zeichen im Hyperterminal ausgeben
    Von Andun im Forum C - Programmierung (GCC u.a.)
    Antworten: 7
    Letzter Beitrag: 18.07.2005, 20:21

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test