» 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

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

Související témata: Arduino, Wire, Byte, Serial, Print, Read, Year, Second, #include, Void, Serial begin, Serial println, Loop


Určitě si přečtěte

Windows 10 May 2020 Update je venku. Odstraňuje hesla a přináší Linux

Windows 10 May 2020 Update je venku. Odstraňuje hesla a přináší Linux

** Jarní aktualizace Desítek přináší dost novinek, jsou ale spíš menší ** Zlepšují se stabilita, rychlost i komfort ovládání ** Revoluce ve Windows 10 teprve přijde

Vladislav Kluska | 90

Deset kotev, které i v roce 2020 táhnou Android ke dnu

Deset kotev, které i v roce 2020 táhnou Android ke dnu

** Android existuje skoro 12 let a za tu dobu v mnoha směrech dospěl ** Dnes běží na sedmi z deseti telefonů, ale čemu za to vděčí? ** Našli jsme 10 kotev, které táhnou tento operační systém ke dnu

Karel Kilián | 155

Proč je COVID-19 tak nebezpečný, jak se detekuje, jak ničí a máme už pandemii?

Proč je COVID-19 tak nebezpečný, jak se detekuje, jak ničí a máme už pandemii?

** V čem spočívá nebezpečí nemoci COVID-19? ** Jak se testuje její přítomnost v těle? ** Jak se ničí UVC i ozónem a proč už CNN mluví o pandemii?

Jakub Čížek | 73


Aktuální číslo časopisu Computer

Megatest 24 PC zdrojů

Jak využít umělou inteligenci

10 špičkových sluchátek s ANC

Playstation 5 vs Xbox Series X