Arduino Zeit und datum mit 4 tasten einstellen

Hallo Zusammen,

ich bin ein blutiger Anfänger, was Arduino angeht.

Ich möchte gerne eine Schaltung entwerfen, diese ist um die Uhrzeit in vorhandenen Schaltungen zu setzen.

Erst mal zu meiner Hardware :

-Arduino Uni
-Franzis Grafikdisplay

Aber ich scheitere im moment an folgendes:

Ich würde gerne zwei tasten nutzen um von tag, Monat, Jahr, Stunde und Minute zu wechseln, dieses auch anzuzeigen (Cursor unter dem jeweiligen Punkt).

Und dazu noch 2 Tasten für Plus und Minus.

Ich habe den Code mal angehangen, bin gerade erst am Anfang.

#include "Display.h"
#include "SPI.h"

#define LCD_BUTTON_LEFT A4
#define LCD_BUTTON_RIGHT A5

Display lcd = Display();
int contrast = 18;
int stunde = 10;
int minute = 47;
int tag = 6;
int monat = 10;
int jahr = 2017;
void setup() {
  pinMode(LCD_BUTTON_LEFT, INPUT);
  digitalWrite(LCD_BUTTON_LEFT, HIGH);
  pinMode(LCD_BUTTON_RIGHT, INPUT);
  digitalWrite(LCD_BUTTON_RIGHT, HIGH);
  lcd.init(contrast);
  setContrast();

    char buffer[50];
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    lcd.clearVideoBuffer();
    lcd.drawString(55, 5, "ARDUINO");
    lcd.drawString(23, 15, "Uhrensetzgeraet");
    lcd.drawString(55, 25, "von");
    lcd.drawString(20, 35, "www.xyz-");
    lcd.drawString(24, 45, "abc.de");
    lcd.show();
delay(5000);  

    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    sprintf(buffer, "%d, %d, %d, %d:%d", tag, monat, jahr, stunde, minute);
    lcd.clearVideoBuffer();

    lcd.drawString(5, 3, "T, M , JJJJ, Std:Min");
    lcd.drawString(5, 20, buffer);
    lcd.drawString(10, 55, "<");
    lcd.drawString(112, 55, ">");
    lcd.show();

    

}

void loop() {

  if (!digitalRead(LCD_BUTTON_LEFT) && stunde < 23) {
    stunde++;
    setContrast();
    }
    if (!digitalRead(LCD_BUTTON_RIGHT) && minute < 59) {
      minute++;
      setContrast();
      }
      
    delay(50);
  }



  void setContrast() {
    char buffer[50];
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    sprintf(buffer, "%d, %d, %d, %d:%d", tag, monat, jahr, stunde, minute);
    lcd.clearVideoBuffer();

    lcd.drawString(5, 3, "T, M , JJJJ, Std:Min");
    lcd.drawString(5, 20, buffer);
    lcd.drawString(10, 55, "<");
    lcd.drawString(112, 55, ">");
    lcd.show();
  }

Vielleicht kann mir ja einer sagen oder tipps geben, dieses zu erstellen.

Mit freundlichen Gruß

s-maisch

So ich habe weiter gebastelt und bin auch schon zu einer Lösung gekommen.

Nur hänge ich nun daran, dass er die variable nicht ändert entweder habe ich ein Denkfehler drinnen.

Wer kann mir da Bitte weiterhelfen.

#include "Display.h"
#include "SPI.h"

#define LCD_BUTTON_LEFT A4
#define LCD_BUTTON_RIGHT A5


Display lcd = Display();
int spalte = 1;
int contrast = 18;
int stunde = 10;
int minute = 47;
int tag = 6;
int monat = 10;
int jahr = 2017;

int PP = digitalRead(3);
int MM = digitalRead(4);
void setup() {
  pinMode(LCD_BUTTON_LEFT, INPUT);
  digitalWrite(LCD_BUTTON_LEFT, HIGH);
  pinMode(LCD_BUTTON_RIGHT, INPUT);
  digitalWrite(LCD_BUTTON_RIGHT, HIGH);

  pinMode(PP, INPUT);
  digitalWrite(PP, HIGH);
  pinMode(MM, INPUT);
  digitalWrite(MM, HIGH);

  lcd.init(contrast);
  setContrast();



    char buffer[50];
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    lcd.clearVideoBuffer();
    lcd.drawString(55, 5, "xxx");
    lcd.drawString(23, 15, "xxx");
    lcd.drawString(55, 25, "xxx");
    lcd.drawString(20, 35, "xxx-");
    lcd.drawString(24, 45, "xxxx");
    lcd.show();
delay(5000);  

    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    sprintf(buffer, "%d, %d, %d, %d:%d", tag, monat, jahr, stunde, minute);
    lcd.clearVideoBuffer();

    lcd.drawString(5, 3, "T, M , JJJJ, Std:Min");
    lcd.drawString(5, 20, buffer);
    lcd.drawString(10, 55, "<");
    lcd.drawString(112, 55, ">");
    lcd.show();

    

}

void loop() {

  if (!digitalRead(LCD_BUTTON_LEFT)) {
    spalte--;
    setContrast();
    }
    delay(100);
    if (!digitalRead(LCD_BUTTON_RIGHT)) {
    spalte++;
    setContrast();
    }
      
delay(100);

    if (spalte==1) {
      lcd.drawString(5, 30, "^");
      lcd.show();
    }


    if (spalte==2) {
      lcd.drawString(23, 30, "^^");
      lcd.show();
    }

   if (spalte==3) {
      lcd.drawString(47, 30, "^^^^");
      lcd.show();
    }

    if (spalte==4) {
      lcd.drawString(83, 30, "^^");
      lcd.show();
    }

    if (spalte==5) {
      lcd.drawString(100, 30, "^^");
      lcd.show();
    delay(100);
    }


if (spalte==5) {
      
    if (!digitalRead(PP) == LOW && stunde < 23) {
    stunde++;
    setContrast();
    delay(100);
    }

    if (!digitalRead(MM) == LOW) {
    stunde--;
    setContrast();
    delay(100);
    }
      
    delay(100);
    }

    
}



  void setContrast() {
    char buffer[50];
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    sprintf(buffer, "%d, %d, %d, %d:%d", tag, monat, jahr, stunde, minute);
    lcd.clearVideoBuffer();

    lcd.drawString(5, 3, "T, M , JJJJ, Std:Min");
    lcd.drawString(5, 20, buffer);
    lcd.drawString(10, 55, "<");
    lcd.drawString(112, 55, ">");
    lcd.show();
  }

Hallo,
keine Ahnung was Du da machst- ich kenne das so:

int Sekunde;
int Minute;
int Stunde;

char Uhrzeit[9];//String Uhrzeit
setup()
{
}
loop()
{
Stunde = 22;
Minute = 17;
Sekunde = 47

snprintf(Uhrzeit,sizeof(Uhrzeit),"%02d:%02d:%02d",Stunde,Minute,Sekunde);// String Uhrzeit
}

Ausgabe ist:
22:17:47

Gruß und Spaß
Andreas

Hier noch etwas zum tasten zählen

/* * Tastendrücke zählen */   
int switchPinV = 25;
int switchPinR = 23;// Schalter ist mit Pin X
int val;                                // Variable für den Pin Zustand 
int buttonState;                        // Variable für den letzten Schalterzustand 
int buttonPresses = 0;                  // Wie oft ist der Schalter gedrückt

int valS28;                                // Variable für den Pin Zustand 
int buttonStateS28;                        // Variable für den letzten Schalterzustand 
int buttonPressesS28 = 0;                  // Wie oft ist der Schalter gedrückt   
                // Wie oft ist der Schalter gedrückt  

const int LED = 13;



void setup() 

{
pinMode(LED, OUTPUT);

digitalWrite(LED, LOW);

 pinMode(switchPinV, INPUT);           
pinMode(switchPinR, INPUT); 
Serial.begin(19200);                     
buttonState = (digitalRead(switchPinV));

}    
void loop()
{ 
 val = (digitalRead(switchPinV));

if (val != buttonState) 
{                                      
if (val == LOW) 
{

buttonPresses++;
if (buttonPresses > 23)
{(buttonPresses = 0);}



Serial.print("Schalter wurde "); 
Serial.print(buttonPresses);

Serial.println(" gedrueckt"); }
} buttonState = val;

 valS28 = (digitalRead(switchPinR));
buttonPressesS28=buttonPresses;
if (valS28 != buttonStateS28) 
{                                      
if (valS28 == LOW) 
{

if (buttonPresses < 1)
{(buttonPresses = 24);} 

buttonPresses--;

Serial.print("Schalter S28 wurde "); 
Serial.print(buttonPresses);

Serial.println(" gedrueckt"); }
} buttonStateS28 = valS28;

}

Danke für den Tipp,

jetzt ist es so wie es sein soll :slight_smile:

Hier mal der Code :

#include "Display.h"
#include "SPI.h"
#define LCD_BUTTON_LEFT A4
#define LCD_BUTTON_RIGHT A5

Display lcd = Display();
int spalte = 1;
int contrast = 18;
int stunde = 10;
int minute = 47;
int tag = 6;
int monat = 10;
int jahr = 2017;

void setup() {
  pinMode(LCD_BUTTON_LEFT, INPUT);
  digitalWrite(LCD_BUTTON_LEFT, HIGH);
  pinMode(LCD_BUTTON_RIGHT, INPUT);
  digitalWrite(LCD_BUTTON_RIGHT, HIGH);
  pinMode(3, OUTPUT);
  pinMode(4, INPUT);
  pinMode(2, INPUT);
  digitalWrite(3, HIGH);
  pinMode(5, OUTPUT);
  digitalWrite(5, HIGH);

  lcd.init(contrast);
  setContrast();

char buffer[50];
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    lcd.clearVideoBuffer();
    lcd.drawString(55, 5, "xxx");
    lcd.drawString(23, 15, "xxx");
    lcd.drawString(55, 25, "xxx");
    lcd.drawString(20, 35, "xxx-");
    lcd.drawString(24, 45, "xxx");
    lcd.show();
    delay(5000);  
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    sprintf(buffer, "%d, %d, %d, %d:%d", tag, monat, jahr, stunde, minute);
    lcd.clearVideoBuffer();
    lcd.drawString(5, 3, "TT, MM, JJJJ, HH:MM");
    lcd.drawString(5, 20, buffer);
    lcd.drawString(10, 55, "<");
    lcd.drawString(112, 55, ">");
    lcd.show();
}

void loop() {

  if (!digitalRead(LCD_BUTTON_LEFT)) {
    spalte--;
    setContrast();
  }
    delay(100);
  if (!digitalRead(LCD_BUTTON_RIGHT)) {
    spalte++;
    setContrast();
  }
      
    if (spalte==1) {
      if (!digitalRead(2) == LOW) {
      tag++;
      setContrast();
      }
      if (!digitalRead(4) == LOW) {
      tag--;
      setContrast();
      }
    lcd.drawString(5, 30, "^^");
    lcd.show();
    }

    if (spalte==2) {
      if (!digitalRead(2) == LOW) {
      monat++;
      setContrast();
      }
      if (!digitalRead(4) == LOW) {
      monat--;
      setContrast();
      }
    lcd.drawString(30, 30, "^^");
    lcd.show();
    }

    if (spalte==3) {
      if (!digitalRead(2) == LOW) {
      jahr++;
      setContrast();
      }
      if (!digitalRead(4) == LOW) {
      jahr--;
      setContrast();
      }
    lcd.drawString(53, 30, "^^^^");
    lcd.show();
    }

    if (spalte==4) {
      if (!digitalRead(2) == LOW) {
      stunde++;
      setContrast();
      }
      if (!digitalRead(4) == LOW) {
      stunde--;
      setContrast();
      }
    lcd.drawString(89, 30, "^^");
    lcd.show();
    }

    if (spalte==5) {
      if (!digitalRead(2) == LOW) {
      minute++;
      setContrast();
      }
      if (!digitalRead(4) == LOW) {
      minute--;
      setContrast();
      }
    lcd.drawString(106, 30, "^^");
    lcd.show();
    }
delay(100);

if (tag > 31) tag = 31;
if (monat > 12) monat = 12;
if (jahr > 2099) jahr = 2099;
if (stunde > 23) stunde = 23;
if (minute > 59) minute = 59;
if (spalte > 5) spalte = 5;
if (tag < 1) tag = 1;
if (monat < 1) monat = 1;
if (jahr < 1990) jahr = 1990;
if (stunde < 0) stunde = 0;
if (minute < 0) minute = 0;
if (spalte < 1) spalte = 1;
    
}



void setContrast() {
    char buffer[50];
    lcd.writeCommand(0x81);
    lcd.writeCommand(25);
    sprintf(buffer, "%02d, %02d, %d, %02d:%02d", tag, monat, jahr, stunde, minute);
    lcd.clearVideoBuffer();
    lcd.drawString(5, 3, "TT, MM, JJJJ, HH:MM");
    lcd.drawString(5, 20, buffer);
    lcd.drawString(10, 55, "<");
    lcd.drawString(112, 55, ">");
    lcd.show();

}

Vielleicht als Anregung für andere User

Und auch ein Bild von dem Display und Ergebnis

Hallo, für´n Anfänger doch sehr gut. Weiter so... Gruß und Spaß Andreas