BTTF HODINY

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Odpovědět
coromorokluk
Příspěvky: 4
Registrován: 09 zář 2021, 07:14
Reputation: 0

BTTF HODINY

Příspěvek od coromorokluk » 09 zář 2021, 07:23

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);
                     
}

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: BTTF HODINY

Příspěvek od kiRRow » 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

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: BTTF HODINY

Příspěvek od jankop » 09 zář 2021, 21:03

Nemusí se ale ještě někam skočit? :D

coromorokluk
Příspěvky: 4
Registrován: 09 zář 2021, 07:14
Reputation: 0

Re: BTTF HODINY

Příspěvek od coromorokluk » 09 zář 2021, 21:20

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á.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 18 hostů