» Poradna » Ostatní

Arduino dvojtečka u sedmisegmentového dipleje

 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Ahoj, nevíte někdo jak udělat aby mě u sedmy segmentového displeje TM1637 blikala mezi hodiny každou sekundu dvojtečka? Mám to připojený k RTC, a dvojtečka blíká strašně rychle potřebuju aby blikla každou sekundu.Můj kód pro výpis času je: #include "Wire.h"#include <Arduino.h>#include "SevenSegmentTM1637.h"#include "SevenSegmentExtended.h"const byte PIN_CLK = 7; const byte PIN_DIO = 6; SevenSegmentExtended display(PIN_CLK, PIN_DIO);#define DS3231_I2C_ADDRESS 0x68byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;byte decToBcd(byte val) { return ( (val /10 * 16) + (val % 10) );}byte bcdToDec(byte val) { return ( (val / 16 * 10) + (val % 16) );}void setup() { Serial.begin(9600); Wire.begin(); display.setBacklight(70); display.begin(); pinMode(10, OUTPUT); Timer1.initialize(1000000); Timer1.pwm(9, 512); Timer1.attachInterrupt(callback);} void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x3f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read());}void Ukázat celý příspěvek

Mohlo by vás také zajímat

Odpovědi na otázku

 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Ten RCT obvod má výstup přerušení, podle toho co si zvolíš může být aktivní každou sekundu, tím vyvolá přerušení MCU v Arduinu, v tom přerušení zobrazíš čas a blikneš dvojtečkou.https://datasheets.maximintegrated.com/en/ds/DS3231.pdfNebo blbě...pokud čas zobrazuješ pitomě cyklicky, tak si ho vždy ulož a porovnávej, asi tak nějak:byte PrechoziSekunda=0, Sekunda;...if (Sekunda!=PredchoziSekunda) { .....blikni dvojteckou..Sekunda=PredchoziSkunda;}Sekunda=...cti sekundy z RTC...

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux AppleMAC-Safari 5.0

MČ to nechápu nemohl byste mě prosím napsat celý ten kód jen abych ho vložil. Díky

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Nechce se mi, uč se, zkoušej. Pracovat s přerušením je v případě MCU základ.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Linux AppleMAC-Safari 5.0

Prosím, já to potřebuju aby to fungovalo dneska a vůbec si s tím nevím rady.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

A než používat molocha "Serial" je na 7seg displej lepší si to udělat sám a krásně multiplexním zapojením displeje. K tomu 4 tranzistory, 8 odporů ke každému segmentu a 4 odpory do bází tranzistoru.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Chrome 55.0.2883.98

Teda ten kód vypadá jako řádná prasárna. Hlavně by mě zajímalo proč tam máš inicializaci Timer1, ale nikde ho nepoužíváš. Ale to je tvoje věc.V tom tvém prasáckém řešení bude úplně dostatečné, když to uděláš tak, aby každá sudá vteřina (x0, x2, x4, x6, x8) zobrazila dvojtečku a každá lichá (x1, x3, x5, x7, x9) tu dvojtečku nezobrazovala. To je myslím řešení které zvládneš i ty.

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

jak to mám napsat aby to zobrazilo a nezobrazilo to právě nevim ten příkaz

Souhlasím  |  Nesouhlasím  |  Odpovědět
 | Microsoft Windows 7 Chrome 55.0.2883.98

Kontrola na to zda je číslo sudé se snad učí už na základní škole. No lze to zjistit například tak, že je číslo dělitelné 2mi beze zbytku. Na to se používá operátor "%", který vrací zbytek po dělení. Kdyby jsi ho tam už neměl použitý tak bych řekl že to nevíš, ale když už to tam používáš tak jsi asi natvrdlý.Takže pro ty natvrdlé stačí místo tohoto:Serial.print(minute);Serial.print(":");Serial.print(second);Napsat toto:Serial.print(minute);if ((second%2) == 0) Serial.print(":");else Serial.print(" ");Serial.print(second);

Souhlasím  |  Nesouhlasím  |  Odpovědět
 |   |  Microsoft Windows 10 Chrome 55.0.2883.87

Akorát sekundová dvojtečka blikává v půlsekundovém intervalu. To moje řešení taky není ideální, ale kdyby si nastudoval datasheet toho RTC obvodu a udělal to v přerušení a ne takto prasácky, tak mu to může blikat jak má. Ale na to fakt není jeden "příkaz".

Souhlasím  |  Nesouhlasím  |  Odpovědět