Obsah:
Video: Hodiny posúvania textu Arduino: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:58
Účelom tohto projektu je vytvoriť hodiny s posuvným textom, ktoré zobrazujú čas, ktorý sa hovorí (napríklad „je polnoc“).
Jedná sa o rýchly projekt - dáme vám dosť na to, aby ste sa mohli pustiť do hardvéru a náčrtu, a potom ho môžete posunúť ďalej, aby vyhovoval vašim potrebám.
Krok 1: Hardvér
Budete potrebovať tri hlavné položky -
- doska kompatibilná s Arduino Uno
- hodinový obvod alebo modul v reálnom čase pomocou integrovaného obvodu DS1307 alebo DS3231
- a monochromatický LED displej v štýle P10
Možno budete chcieť externý napájací zdroj, ale k tomu sa dostaneme neskôr.
Prvou fázou je prispôsobiť hodiny reálneho času. Kliknite sem a získajte návod, ak s tým potrebujete pomôcť.
Teraz už dúfam, že premýšľate „ako si nastavíte čas?“.
Na túto otázku existujú dve odpovede. Ak používate DS3231, jednoducho ho vložte do náčrtu (pozri nižšie), pretože presnosť je veľmi dobrá, stačí, aby ste skicu nahrali s novým časom dvakrát ročne, aby ste pokryli letný čas.
V opačnom prípade pridajte jednoduché používateľské rozhranie-niekoľko tlačidiel to zvládne. Nakoniec stačí hardvér nasadiť na zadnú stranu DMD. Existuje dostatok priestoru na splnenie vašich vlastných potrieb, jednoduchým riešením by mohlo byť zarovnanie ovládacej dosky, aby ste mali ľahký prístup k zásuvke USB - a potom ju prilepte nejakým Sugru.
Pokiaľ ide o napájanie hodín - z Arduina môžete spustiť JEDEN LED displej a na vnútorné použitie beží v dobrom svetle. Ak chcete, aby DMD bežal na plný jas sietnice, musíte použiť samostatný napájací zdroj 5 V 4 A DC. Ak používate dve DMD - ide to na 8A a podobne. Jednoducho pripojte externé napájanie k jedným svorkám DMD (k týmto svorkám pripojte druhý alebo viac DMD).
Ak sa vám nechce prestrihnúť koniec napájacieho kábla, použite prerušovač zásuvky DC.
Krok 2: Skica Arduino
Budete musieť nainštalovať nasledujúce dve knižnice Arduino - TimerOne a DMD. Potom nahrajte náčrt:
// pre RTC #zahrňte „Wire.h“#define DS1307_I2C_ADDRESS 0x68 // DS1307 RTC je 0x68
// pre LED displej
#include "SPI.h" #include "DMD.h" #include "TimerOne.h" #include "SystemFont5x7.h" #include "Arial_black_16.h" #define DISPLAYS_ACROSS 1 // you could have more than one DMD in a riadok #definovať DISPLAYS_DOWN 1 DMD dmd (DISPLAYS_ACROSS, DISPLAYS_DOWN);
Reťazec finalString; // slúži na podržanie poslednej vety na zobrazenie v DMD
neplatné ScanDMD () // požadované pre DMD
{dmd.scanDisplayBySPI (); }
neplatné nastavenie ()
{// pre DMD Timer1.initialize (5000); Timer1.attachInterrupt (ScanDMD); dmd.clearScreen (true);
// pre RTC
Wire.begin (); // spustenie bajtu zbernice I2C sekundu, minútu, hodinu, dayOfWeek, dayOfMonth, mesiac, rok; // zmeňte premenné a odkomentujte súbor setDateDs1307, aby ste nastavili čas // potom znova komentujte funkciu a nahrajte skicu znova ako druhú = 0; minúta = 13; hodina = 23; dayOfWeek = 4; dayOfMonth = 19; mesiac = 5; rok = 13; // setDateDs1307 (sekunda, minúta, hodina, dayOfWeek, dayOfMonth, mesiac, rok); }
// obvyklé funkcie RTC
// Konvertovanie normálnych desatinných čísel na binárne kódované desatinné bajty decToBcd (byte val) {return ((val/10*16) + (val%10)); }
// Previesť binárne kódované desatinné čísla na normálne desatinné čísla
byte bcdToDec (byte byte) {return ((val/16*10) + (val%16)); }
void setDateDs1307 (bajt sekunda, // 0-59
minúta bajtu, // 0-59 bajtov hodina, // 1-23 bajtov dayOfWeek, // 1-7 bajtov dayOfMonth, // 1-28/29/byte mesiac, // 1-12 bajtov rok) // 0- 99 {Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.write (decToBcd (druhý)); // 0 až bit 7 spustí hodiny Wire.write (decToBcd (minúta)); Wire.write (decToBcd (hodina)); Wire.write (decToBcd (dayOfWeek)); Wire.write (decToBcd (dayOfMonth)); Wire.write (decToBcd (mesiac)); Wire.write (decToBcd (rok)); Wire.write (00010000); // pošle 0x10 (hex) 00010000 (binárne) do riadiaceho registra - zapne štvorcovú vlnu Wire.endTransmission (); }
// Zistí dátum a čas z ds1307
neplatné getDateDs1307 (bajt *sekunda, bajt *minúta, bajt *hodina, bajt *dayOfWeek, bajt *dayOfMonth, bajt *mesiac, bajt *rok) {// Reset ukazovateľa registra Wire.beginTransmission (DS1307_I2C_ADDRESS); Wire.write (0); Wire.endTransmission ();
Wire.requestFrom (DS1307_I2C_ADDRESS, 7);
// Niektoré z nich vyžadujú masky, pretože určité bity sú kontrolné bity
*sekunda = bcdToDec (Wire.read () & 0x7f); *minúta = bcdToDec (Wire.read ()); *hodina = bcdToDec (Wire.read () & 0x3f); // Toto je potrebné zmeniť, ak 12 hodín ráno/hod. *DayOfWeek = bcdToDec (Wire.read ()); *dayOfMonth = bcdToDec (Wire.read ()); *mesiac = bcdToDec (Wire.read ()); *rok = bcdToDec (Wire.read ()); }
void drawText (String oldString)
{dmd.clearScreen (true); dmd.selectFont (Arial_Black_16); char newString [256]; int sLength = oldString.length (); oldString.toCharArray (newString, sLength+1); dmd.drawMarquee (newString, sLength, (32*DISPLAYS_ACROSS) -1, 0); dlhý štart = milis (); dlhý časovač = štart; dlhý časovač2 = štart; booleovský ret = nepravda; while (! ret) {if ((timer+20) <millis ()) {ret = dmd.stepMarquee (-1, 0); časovač = milis (); }}}
void createTextTime (int hh, int mm)
// toto spracuje všetky časové údaje do textu ako jedna veta {finalString = ""; // vymazanie vety pre špeciálne prípady (nižšie) finalString = finalString+"It";
// teraz pridajte hodinu
if (hh == 1 || hh == 13) {finalString = finalString+"one"; } if (hh == 2 || hh == 14) {finalString = finalString+"two"; } if (hh == 3 || hh == 15) {finalString = finalString+"three"; } if (hh == 4 || hh == 16) {finalString = finalString+"four"; } if (hh == 5 || hh == 17) {finalString = finalString+"Five"; } if (hh == 6 || hh == 18) {finalString = finalString+"six"; } if (hh == 7 || hh == 19) {finalString = finalString+"seven"; } if (hh == 8 || hh == 20) {finalString = finalString+"osem"; } if (hh == 9 || hh == 21) {finalString = finalString+"deväť"; } if (hh == 10 || hh == 22) {finalString = finalString+"ten"; } if (hh == 11 || hh == 23) {finalString = finalString+"jedenásť"; }
// teraz pridajte minúty
prepínač (mm) {prípad 1: finalString = finalString+"oh one"; prestávka; prípad 2: finalString = finalString+"oh dva"; prestávka; prípad 3: finalString = finalString+"oh tri"; prestávka; prípad 4: finalString = finalString+"oh four"; prestávka; prípad 5: finalString = finalString+"oh päť"; prestávka; prípad 6: finalString = finalString+"oh šesť"; prestávka; prípad 7: finalString = finalString+"oh sedem"; prestávka; prípad 8: finalString = finalString+"oh osem"; prestávka; prípad 9: finalString = finalString+"oh deväť"; prestávka; prípad 10: finalString = finalString+"desať"; prestávka; prípad 11: finalString = finalString+"jedenásť"; prestávka; prípad 12: finalString = finalString+"dvanásť"; prestávka; prípad 13: finalString = finalString+"trinásť"; prestávka; prípad 14: finalString = finalString+"štrnásť"; prestávka; prípad 15: finalString = finalString+"pätnásť"; prestávka; prípad 16: finalString = finalString+"šestnásť"; prestávka; prípad 17: finalString = finalString+"sedemnásť"; prestávka; prípad 18: finalString = finalString+"osemnásť"; prestávka; prípad 19: finalString = finalString+"devätnásť"; prestávka; prípad 20: finalString = finalString+"dvadsať"; prestávka; prípad 21: finalString = finalString+"dvadsaťjeden"; prestávka; prípad 22: finalString = finalString+"dvadsaťdva"; prestávka; prípad 23: finalString = finalString+"dvadsať tri"; prestávka; prípad 24: finalString = finalString+"dvadsaťštyri"; prestávka; prípad 25: finalString = finalString+"dvadsaťpäť"; prestávka; prípad 26: finalString = finalString+"dvadsať šesť"; prestávka; prípad 27: finalString = finalString+"dvadsať sedem"; prestávka; prípad 28: finalString = finalString+"dvadsať osem"; prestávka; prípad 29: finalString = finalString+"dvadsať deväť"; prestávka; prípad 30: finalString = finalString+"tridsať"; prestávka; prípad 31: finalString = finalString+"tridsať jedna"; prestávka; prípad 32: finalString = finalString+"tridsať dva"; prestávka; prípad 33: finalString = finalString+"tridsať tri"; prestávka; prípad 34: finalString = finalString+"tridsaťštyri"; prestávka; prípad 35: finalString = finalString+"tridsať päť"; prestávka; prípad 36: finalString = finalString+"tridsať šesť"; prestávka; prípad 37: finalString = finalString+"tridsať sedem"; prestávka; prípad 38: finalString = finalString+"tridsať osem"; prestávka; prípad 39: finalString = finalString+"tridsať deväť"; prestávka; prípad 40: finalString = finalString+"štyridsať"; prestávka; prípad 41: finalString = finalString+"štyridsať jedna"; prestávka; prípad 42: finalString = finalString+"štyridsať dva"; prestávka; prípad 43: finalString = finalString+"štyridsať tri"; prestávka; prípad 44: finalString = finalString+"štyridsať štyri"; prestávka; prípad 45: finalString = finalString+"štyridsať päť"; prestávka; prípad 46: finalString = finalString+"štyridsať šesť"; prestávka; prípad 47: finalString = finalString+"štyridsať sedem"; prestávka; prípad 48: finalString = finalString+"štyridsať osem"; prestávka; prípad 49: finalString = finalString+"štyridsať deväť"; prestávka; prípad 50: finalString = finalString+"päťdesiat"; prestávka; prípad 51: finalString = finalString+"päťdesiat jedna"; prestávka; prípad 52: finalString = finalString+"päťdesiat dva"; prestávka; prípad 53: finalString = finalString+"päťdesiat tri"; prestávka; prípad 54: finalString = finalString+"päťdesiat štyri"; prestávka; prípad 55: finalString = finalString+"päťdesiat päť"; prestávka; prípad 56: finalString = finalString+"päťdesiatšesť"; prestávka; prípad 57: finalString = finalString+"päťdesiat sedem"; prestávka; prípad 58: finalString = finalString+"päťdesiat osem"; prestávka; prípad 59: finalString = finalString+"päťdesiat deväť"; prestávka; }
// poludnie?
if (hh == 12 && mm == 0) {finalString = finalString+"midday"; } // polnoc? if (hh == 00 && mm == 0) {finalString = finalString+"midnight"; }
}
prázdna slučka ()
{// získajte čas z bajtu RTC sekundu, minútu, hodinu, dayOfWeek, dayOfMonth, mesiac, rok; getDateDs1307 (& sekunda, & minúta, & hodina, & deňOdTýždňa, & deňOdMesiaca, & mesiac, & rok);
// previesť čas na vetný reťazec
createTextTime (hodina, minúta);
// teraz pošlite text do DMD
drawText (finalString); }
Skica má obvyklé funkcie na nastavenie a načítanie času z integrovaných obvodov hodín reálneho času DS1307/3232 a ako obvykle u všetkých našich hodín môžete zadať informácie o čase do premenných v neplatnom nastavení (), potom odkomentujte súbor setDateDs1307 (), nahrajte skicu, znova okomentujte súbor setDateDs1307 a potom skicu nahrajte ešte raz. Ak ste nepridali žiadne hardvérové používateľské rozhranie, zopakujte tento postup a znova nastavte čas.
Krok 3:
Akonáhle je čas získaný vo void loop (), je odovzdaný do funkcie createTextTime (). Táto funkcia vytvorí textový reťazec, ktorý sa má zobraziť, začínajúc na „Je“a potom v závislosti od aktuálneho času určí, ktoré slová je potrebné nasledovať. Nakoniec funkcia drawText () skonvertuje reťazec obsahujúci text na zobrazenie na znakovú premennú, ktorú je možné odoslať do DMD.
Odporúča:
Meno elektronického posúvania čierneho života záleží: 5 krokov
Elektronické rolovacie mená Black Lives Matter: Kampane #sayhername, #sayhisname a #saytheirname prinášajú informácie o menách a príbehoch černochov, ktorí boli obeťami rasistického policajného násilia, a podporujú obhajobu rasovej spravodlivosti. Viac informácií o požiadavkách a
Pravidlo kruhového posúvania vyrobené laserovou rezačkou: 5 krokov
Pravidlo kruhového posúvania vyrobené laserovou rezačkou: Nakoniec som toto pravidlo posuvu urobil náhodou. Hľadal logové kruhové stupnice a vedel, že pravidlá snímky majú logové stupnice. Ale množstvo čísel v šablónach vyzeralo tak pekne, že som sa rozhodol vytvoriť pravidlo kruhového posúvania. Stránky na https: // sliderule
Vytvorte zobrazenie posúvania pomocou funkcie Swift: 9 krokov
Vytvorte zobrazenie posúvania pomocou Swift: Pred niekoľkými mesiacmi som nevedel o existencii swiftu a Xcode. Dnes som mohol vyvinúť malú časť aplikácie, ktorú chcem vytvoriť. Dokázal som vytvoriť niečo úžasné, o čo by som sa s vami chcel podeliť. V tomto návode sa pozriem na
Arduino TTS (prevod textu na reč): 3 kroky (s obrázkami)
Arduino TTS (prevod textu na reč): Ahoj, chlapci, dnes vás v tomto návode naučím, ako komunikovať s Arduino bez externého modulu. Tu to môžeme použiť v mnohých projektoch, ako je hovorový teplomer, roboty a mnoho ďalších. Začnime teda týmto projektom bez veľkého plytvania časom
Spustenie textu s Arduino: 3 kroky (s obrázkami)
Bežiaci text s Arduino: Nástroj a materiál: 1 položka LCD 16x2 1 položka odpor 220 ohm 1 položka potenciometer 1 k ohm 1 položka protoboard 1 položka arduino Niektoré prepojky káblov