INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Uhr mit 7 Segmentanzeige
10.04.2016, 15:01
Beitrag #1
Uhr mit 7 Segmentanzeige
Liebe Gemeinde,

ich bin ein Fan von 7 Segmentanzeigen und hab mir eine Uhr gebaut.
Läuft super.
Den Sketch habe ich im Netz gefunden, da ich aber nicht so der Programmierer bin
brauche ich mal Eure Hilfe.

Bei der Anzeige der Stunden konkret bei der zehner Stelle wird in der Zeit von 0-9 Uhr die Null mit angezeigt, dass stört in der Nacht ein wenig.

Gibt es die Möglichkeit diese abzuschalten??????

Vielen dank schon mal.
Hier der Code:
PHP-Code:
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

int dataPin 10;
int latchPin 8;
int clockPin 9;

byte dec_digits[] = {0b10111111,0b00000110,0b11011011,0b01001111,0b11100110,0b01101101,0b11111101,0b00000111,0b11111111,0b01101111 };

void setup() {
  
  
pinMode(latchPinOUTPUT);
  
pinMode(clockPinOUTPUT);
  
pinMode(dataPinOUTPUT);
  
  
Wire.begin();
  
RTC.begin();
  if (! 
RTC.isrunning()) {
    
    
RTC.adjust(DateTime(__DATE____TIME__));
  }
}

void loop() {
  
DateTime now RTC.now();
  
int thehour now.hour();
  
  
int hour_tens thehour 10;
  
int hour_ones thehour 10;
  
int minute_tens now.minute() / 10;
  
int minute_ones now.minute() % 10;
  
int second_tens now.second() / 10;
  
int second_ones now.second() % 10;

  
digitalWrite(latchPinLOW);
  
shiftOut(dataPinclockPinMSBFIRSTdec_digits[second_ones]);
  
shiftOut(dataPinclockPinMSBFIRSTdec_digits[second_tens]);
  
shiftOut(dataPinclockPinMSBFIRSTdec_digits[minute_ones]);
  
shiftOut(dataPinclockPinMSBFIRSTdec_digits[minute_tens]);
  
shiftOut(dataPinclockPinMSBFIRSTdec_digits[hour_ones]); 
  
shiftOut(dataPinclockPinMSBFIRSTdec_digits[hour_tens]);

  
digitalWrite(latchPinHIGH);
 
  
delay(100);

Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 15:31
Beitrag #2
RE: Uhr mit 7 Segmentanzeige
Ich weiß nicht, wie du die einzelnen Ziffern anzeigst, aber ich könnte mir vorstellen, dass du der 10'er Ziffer die Ansteuerung oder Spannung abschaltest, wenn die Stunden kleiner als 10 sind.
Beispiel:
Code:
if (thehour < 10) {
//Anzeige ausschalten
}

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 15:37
Beitrag #3
RE: Uhr mit 7 Segmentanzeige
Daran habe ich auch schon gedacht. Nur müsste ich dann meine ganze Platine ändern!
Das wollte ich nicht, kann man das nicht im Code ändern?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 16:10
Beitrag #4
RE: Uhr mit 7 Segmentanzeige
Dann könntest du noch ein "dec_digits" für "keine Anzeige" erstellen, müsste "0b00000000" sein, welches du für die erste Ziffer aktivierst, wenn die oben geschriebene if-Anweisung zutrifft.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 16:34 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2016 16:38 von ottii50.)
Beitrag #5
RE: Uhr mit 7 Segmentanzeige
hab es jetzt so gemacht, geht aber nicht!!!
PHP-Code:
void loop() {
  
DateTime now RTC.now();
  
int thehour now.hour();
  
  if (
thehour 10) {
    
   
byte dec_digits[] = {0b00000000}; 
   
  }
  
  
int hour_tens thehour 10;
  
int hour_ones thehour 10;
  
int minute_tens now.minute() / 10;
  
int minute_ones now.minute() % 10;
  
int second_tens now.second() / 10;
  
int second_ones now.second() % 10

(10.04.2016 16:34)ottii50 schrieb:  hab es jetzt so gemacht, geht aber nicht!!!
PHP-Code:
void loop() {
  
DateTime now RTC.now();
  
int thehour now.hour();
  
  if (
thehour 10) {
    
   
byte dec_digits[] = {0b00000000}; 
   
  }
  
  
int hour_tens thehour 10;
  
int hour_ones thehour 10;
  
int minute_tens now.minute() / 10;
  
int minute_ones now.minute() % 10;
  
int second_tens now.second() / 10;
  
int second_ones now.second() % 10

Ich dachte vielleicht kann man der Zehnerstelle sagen, wenn Null dann, so meine Idee eine 8 für Cammon Anode senden. in diesem Fall müssten doch die Segmente aus bleiben.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 17:37
Beitrag #6
RE: Uhr mit 7 Segmentanzeige
Ich habe die Hardware nicht hier und kann es nicht nachvollziehen.
Du müsstest es einfach ausprobieren, wie die Stelle dunkel bleibt.

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. Cool
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 18:26
Beitrag #7
RE: Uhr mit 7 Segmentanzeige
Vielen Dank für die Antworten!

Hab verschiedene Sachen probiert, alles ohne Erfolg.

Ich hab es geschafft bei thehour <10, das alle 4 Anzeigen aus sind.
Sollte aber so nicht sein.

Vielleicht gibt es noch eine andere Lösung.

Gruß ottii50
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.04.2016, 19:06 (Dieser Beitrag wurde zuletzt bearbeitet: 10.04.2016 19:07 von Scheams.)
Beitrag #8
RE: Uhr mit 7 Segmentanzeige
Hallo!

Probier hier diesen Code einmal. Du überprüfst einfach bei der 10er-Stelle ob du eine Zahl größer als 0 oder 0 hast. Wenn die 10er-Stundenstelle auf 0 ist schickst du 8 nuller raus -> sollte die Segmentanzeige ausschalten.

Code:
#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

int dataPin = 10;
int latchPin = 8;
int clockPin = 9;

byte dec_digits[] = {0b10111111,0b00000110,0b11011011,0b01001111,0b11100110,0b01101101,0b11111101,0b​00000111,0b11111111,0b01101111 };

void setup() {
  
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
  
  Wire.begin();
  RTC.begin();
  if (! RTC.isrunning()) {
    
    RTC.adjust(DateTime(__DATE__, __TIME__));
  }
}

void loop() {
  DateTime now = RTC.now();
  int thehour = now.hour();
  
  int hour_tens = thehour / 10;
  int hour_ones = thehour % 10;
  int minute_tens = now.minute() / 10;
  int minute_ones = now.minute() % 10;
  int second_tens = now.second() / 10;
  int second_ones = now.second() % 10;

  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[second_ones]);
  shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[second_tens]);
  shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[minute_ones]);
  shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[minute_tens]);
  shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[hour_ones]);
  if (hour_tens > 0) // wenn 10er stelle größer als null ist
  {
    shiftOut(dataPin, clockPin, MSBFIRST, dec_digits[hour_tens]);
  }
  else // wenn 10er stelle nicht größer als null ist
  {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000); // alles auf LOW rausschieben
  }

  digitalWrite(latchPin, HIGH);

  delay(100);
}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Smile Datum Anzeige mit 7 Segmentanzeige ottii50 11 906 16.05.2016 19:12
Letzter Beitrag: Mathias
  Funkthermometer mit 7 Segmentanzeige-bitte um Hilfe ottii50 45 3.181 27.07.2015 14:02
Letzter Beitrag: ottii50
  Hilfe bei 7-Segmentanzeige und Shift-Register knut 4 2.231 01.06.2014 15:58
Letzter Beitrag: knut

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste