Stránka 1 z 1

BTTF HODINY

Napsal: 09 zář 2021, 07:23
od coromorokluk
Ahoj všem, potřeboval bych poradit s kódem. Jedná se o hodiny viz.odkaz na YT.

Kód: Vybrat vše

https://www.youtube.com/watch?v=nEl211lNvgg&list=LL&index=2
Víceméně vše funguje, ale reálný čas (zelené displeje) je cca. o 4 hodiny a 4 minuty zpožděný. prosím o radu, kde to změnit. Dále bych potřeboval u červených displejů snížit jas.

Posílám kód arduina.

Díky za pomoc :)

Kód: Vybrat vše

#include "SevenSegmentTM1637.h"
#include "SevenSegmentExtended.h"
#include "RTClib.h"

// Sortie horloge Rouge
const byte PIN_CLK_Red = A0;   // define CLK pin  
// Sortie horloge Verte
const byte PIN_CLK_Green = A1;   // define CLK pin 
// Sortie horloge Orange
const byte PIN_CLK_Orange = A2;   // define CLK pin 

//RED Displays
const byte PIN_DIO_R1 = 3;
SevenSegmentExtended      red1(PIN_CLK_Red, PIN_DIO_R1);
const byte PIN_DIO_R2 = 4;
SevenSegmentTM1637       red2(PIN_CLK_Red, PIN_DIO_R2);
const byte PIN_DIO_R3 = 5;
SevenSegmentExtended     red3(PIN_CLK_Red, PIN_DIO_R3);

//GREEN Displays
const byte PIN_DIO_G1 = 6;
SevenSegmentExtended      green1(PIN_CLK_Green, PIN_DIO_G1);
const byte PIN_DIO_G2 = 7;
SevenSegmentTM1637       green2(PIN_CLK_Green, PIN_DIO_G2);
const byte PIN_DIO_G3 = 8;
SevenSegmentExtended     green3(PIN_CLK_Green, PIN_DIO_G3);
int greenAM = 12;
int greenPM = 13;

// ORANGE Displays
const byte PIN_DIO_O1 = 9;   // define DIO pin (any digital pin)
SevenSegmentExtended      orange1(PIN_CLK_Orange, PIN_DIO_O1); // SegmentExtended pour utiliser la methode "PrintTime"
const byte PIN_DIO_O2 = 10;   
SevenSegmentTM1637        orange2(PIN_CLK_Orange, PIN_DIO_O2); //SegmentTM1637 pour utiliser la methode "print" permet d'enlever les ":" entre les chiffres
const byte PIN_DIO_O3 = 11;   
SevenSegmentExtended       orange3(PIN_CLK_Orange, PIN_DIO_O3); 

bool parse=false;
bool config=false;
int Hour=0;
RTC_DS3231 rtc;
int backlight = 50;
int year_red = 2028;
int year_orange = 2018;

void setup() {

  pinMode(PIN_CLK_Red, OUTPUT);
  pinMode(PIN_CLK_Green, OUTPUT);
  pinMode(PIN_CLK_Orange, OUTPUT);
  pinMode(PIN_DIO_O1, OUTPUT);
  pinMode(PIN_DIO_O2, OUTPUT);
  pinMode(PIN_DIO_O3, OUTPUT);
  pinMode(PIN_DIO_G1, OUTPUT); 
  pinMode(PIN_DIO_G2, OUTPUT);
  pinMode(PIN_DIO_G3, OUTPUT); 
  pinMode(PIN_DIO_R1, OUTPUT);
  pinMode(PIN_DIO_R2, OUTPUT);
  pinMode(PIN_DIO_R3, OUTPUT);
  pinMode(greenAM, OUTPUT);
  pinMode(greenPM, OUTPUT);

  Serial.begin(9600);       // initializes the Serial connection @ 9600 baud
  orange1.begin();            // initializes the display
  orange2.begin();
  orange3.begin();              
  green1.begin();
  green2.begin();
  green3.begin();            
  red1.begin();
  red2.begin();
  red3.begin();            
  orange1.setBacklight(backlight);  // set the brightness to 100 %
  orange2.setBacklight(backlight);
  orange2.setColonOn(0); // Switch off ":" for orange "year"
  orange3.setBacklight(backlight);  
  green1.setBacklight(backlight); 
  green2.setBacklight(backlight);
  green3.setBacklight(backlight); 
  red1.setBacklight(backlight);
  red2.setBacklight(backlight);
  red3.setBacklight(backlight);  
  red2.setColonOn(0); // Switch off ":" for red "year"
  
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  Serial.begin(9600);

  delay(3000); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
//    following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  }

}

void loop() {
  
    DateTime now = rtc.now();
    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

if(now.hour()>=13){
   Hour=now.hour();
  digitalWrite(greenAM,0);
  digitalWrite(greenPM,1);}
  
else if(now.hour()==12)
  {Hour=now.hour();
   digitalWrite(greenAM,0);
  digitalWrite(greenPM,1);}

else{
  Hour=now.hour();
  digitalWrite(greenAM,1);
  digitalWrite(greenPM,0);
  }

//Red displays -  Destination TIME 08.01 2007 10:04
red1.printTime(11, 9, true);
red2.print(year_red, true);
red3.printTime(10, 07, true); 

//Green Displays - Present TIME - Heure actuelle
green1.printTime(now.month(), now.day(), true);  
green2.print(now.year());
green3.printTime(Hour, now.minute(), true);

// Orange Displays - Last time departed 01.08. 2008 01:24                      
orange1.printTime(11, 9, true);                     
orange2.print(year_orange, true);
orange3.printTime(01, 24, true);
                     
}

Re: BTTF HODINY

Napsal: 09 zář 2021, 15:27
od kiRRow
Musíš si nastavit ty RTC hodiny správně. Podle toho jak je napaný program by to mělo fungovat takhle : Vypni napájení RTC modulu, vyjmi baterii a nech ho nějakou dobu bez baterky, aby se uplně smazal. Potom baterii vlož zpátky, zapoj RTC modul a znovu ZKOMPILUJ!!! a nahrej program. Do RTC modulu se nastaví čas poslední kompilace.
Pokud to nepůjde tak na poslední řádek v setupu vlož

Kód: Vybrat vše

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Zkompiluj, nahrej, co nejrychleji ten řádek smaž a co nejrychleji překompiluj a nahrej. Nesmíš ho tam nechat jinak se ti při každém resetu nastaví hodiny na čas a datum poslední kompilace.

Kód: Vybrat vše

  red1.setBacklight(backlight); // místo backlight zadej rucne hodnotu ... ted tam je 50
  red2.setBacklight(backlight); // místo backlight zadej rucne hodnotu ... ted tam je 50
  red3.setBacklight(backlight); // místo backlight zadej rucne hodnotu ... ted tam je 50

Re: BTTF HODINY

Napsal: 09 zář 2021, 21:03
od jankop
Nemusí se ale ještě někam skočit? :D

Re: BTTF HODINY

Napsal: 09 zář 2021, 21:20
od coromorokluk
kiRRow píše:
09 zář 2021, 15:27
Musíš si nastavit ty RTC hodiny správně. Podle toho jak je napaný program by to mělo fungovat takhle : Vypni napájení RTC modulu, vyjmi baterii a nech ho nějakou dobu bez baterky, aby se uplně smazal. Potom baterii vlož zpátky, zapoj RTC modul a znovu ZKOMPILUJ!!! a nahrej program. Do RTC modulu se nastaví čas poslední kompilace.
Pokud to nepůjde tak na poslední řádek v setupu vlož

Kód: Vybrat vše

rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
Zkompiluj, nahrej, co nejrychleji ten řádek smaž a co nejrychleji překompiluj a nahrej. Nesmíš ho tam nechat jinak se ti při každém resetu nastaví hodiny na čas a datum poslední kompilace.

Kód: Vybrat vše

  red1.setBacklight(backlight); // místo backlight zadej rucne hodnotu ... ted tam je 50
  red2.setBacklight(backlight); // místo backlight zadej rucne hodnotu ... ted tam je 50
  red3.setBacklight(backlight); // místo backlight zadej rucne hodnotu ... ted tam je 50
Díky moc, už to běží jak má.