DIY Arduino Dot Matrix polshorloge (8 / 13 stap)

Stap 8: Arduino Sketch voor digitale klok


Digitale modus gebruiken frequentie Timer 2 bibliotheek. Bibliotheek kunt u downloaden vanaf hier.

 #include <FrequencyTimer2.h> #include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Convert normal decimal numbers to binary coded decimal byte decToBcd(byte val) { return( (val/10*16) + (val%10) ); } // Convert binary coded decimal to normal decimal numbers byte bcdToDec(byte val) { return( (val/16*10) + (val%16) ); } byte second_unit, second_tens, minute_unit, minute_tens, hour_unit, hour_tens, date_unit, date_tens, month_unit, month_tens, year_unit, year_tens, year_remain; byte _second = 0, _minute = 10, _hour = 12, _day = 1, _date = 1, _month = 1, _year = 15; byte tMSB, tLSB; float temp3231; long lastPressTime; #define space { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define slash { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define A { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define M { \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 0, 1, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define P { \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define zero { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 1, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 1, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define one { \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define two { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define three { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define four { \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 1, 0, 0, 0}, \ {0, 0, 1, 0, 1, 0, 0, 0}, \ {0, 1, 0, 0, 1, 0, 0, 0}, \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define five { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define six { \ {0, 0, 0, 1, 1, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define seven { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 0, 1, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define eight { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define nine { \ {0, 0, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 1, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define colon { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 1, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define DEGC { \ {1, 1, 0, 0, 1, 1, 1, 0}, \ {1, 1, 0, 1, 0, 0, 0, 1}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 1}, \ {0, 0, 0, 0, 1, 1, 1, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define T { \ {0, 1, 1, 1, 1, 1, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 1, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define smallm { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 0, 1, 0, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 1, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } #define smallp { \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 1, 0, 0}, \ {0, 1, 1, 1, 1, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 1, 0, 0, 0, 0, 0, 0}, \ {0, 0, 0, 0, 0, 0, 0, 0} \ } byte col = 0; byte leds[8][8]; byte rows[8] = {0, 3, 6, 12, 7, 14, 15, 4}; byte cols[8] = {8, 1, 10, 5, 17, 11, 16, 13}; const byte numPatterns = 14; byte patterns[numPatterns][8][8] = { zero, one, two, three, four, five, six, seven, eight, nine, colon, space, slash, DEGC }; int pattern = 0; void setup() { Wire.begin(); for (byte i = 3; i <= 17; i++) { if(i==9) continue; pinMode(i, OUTPUT); } pinMode(0, OUTPUT); pinMode(1, OUTPUT); // set up cols and rows for (byte i = 1; i <= 8; i++) { digitalWrite(rows[i - 1], LOW); } for (byte i = 1; i <= 8; i++) { digitalWrite(cols[i - 1], LOW); } clearLeds(); // Turn off toggling of pin 11 FrequencyTimer2::disable(); // Set refresh rate (interrupt timeout period) FrequencyTimer2::setPeriod(2000); // Set interrupt routine to be called FrequencyTimer2::setOnOverflow(display); setPattern(pattern); } void loop() { calculateDateTime(); digitalClock(); } void clearLeds() { // Clear display array for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { leds[i][j] = 0; } } } void setPattern(int pattern) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { leds[i][j] = patterns[pattern][i][j]; } } } void slidePattern(int pattern, int del) { for (int l = 0; l < 8; l++) { for (int i = 0; i < 7; i++) { for (int j = 0; j < 8; j++) { leds[j][i] = leds[j][i+1]; } } for (int j = 0; j < 8; j++) { leds[j][7] = patterns[pattern][j][0 + l]; } delay(del); } } // Interrupt routine void display() { digitalWrite(cols[col], LOW); // Turn whole previous column off col++; //digitalWrite(rows[row], LOW); // Turn whole previous column off //row++; if (col == 8) { col = 0; } for (int row = 0; row < 8; row++) { if (leds[col][7 - row] == 1) { digitalWrite(rows[row], LOW); // Turn on this led } else { digitalWrite(rows[row], HIGH); // Turn off this led } } digitalWrite(cols[col], HIGH); // Turn whole column on at once (for equal lighting times) } void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year) { // sets time and date data to DS3231 Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set next input to start at the seconds register Wire.write(decToBcd(second)); // set seconds Wire.write(decToBcd(minute)); // set minutes Wire.write(decToBcd(hour | 0x40)); // set hours Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday) Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31) Wire.write(decToBcd(month)); // set month Wire.write(decToBcd(year)); // set year (0 to 99) Wire.endTransmission(); } void readDS3231time(byte *second, byte *minute, byte *hour, byte *dayOfWeek, byte *dayOfMonth, byte *month, byte *year) { Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0); // set DS3231 register pointer to 00h Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 7); // request seven bytes of data from DS3231 starting from register 00h *second = bcdToDec(Wire.read() & 0x7f); *minute = bcdToDec(Wire.read()); *hour = bcdToDec(Wire.read() & 0x1f); *dayOfWeek = bcdToDec(Wire.read()); *dayOfMonth = bcdToDec(Wire.read()); *month = bcdToDec(Wire.read()); *year = bcdToDec(Wire.read()); } void calculateDateTime(){ byte second, minute, hour, dayOfWeek, dayOfMonth, month, year; // retrieve data from DS3231 readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year); if(hour > 12){ hour = hour - 24; } second_unit = second % 10; second_tens = second / 10; minute_unit = minute % 10; minute_tens = minute / 10; hour_unit = hour % 10; hour_tens = hour / 10; date_unit = dayOfMonth % 10; date_tens = dayOfMonth / 10; month_unit = month % 10; month_tens = month / 10; year_unit = year % 10; year_tens = year / 10; } void digitalClock(){ FrequencyTimer2::setOnOverflow(display); slidePattern(hour_tens, 80); slidePattern(hour_unit, 80); slidePattern(10, 80); slidePattern(minute_tens, 80); slidePattern(minute_unit, 80); slidePattern(10, 80); slidePattern(second_tens, 80); slidePattern(second_unit, 80); //slidePattern(11, 80); slidePattern(11, 80); slidePattern(date_tens, 80); slidePattern(date_unit, 80); slidePattern(12, 80); slidePattern(month_tens, 80); slidePattern(month_unit, 80); slidePattern(12, 80); slidePattern(2, 80); slidePattern(0, 80); slidePattern(year_tens, 80); slidePattern(year_unit, 80); slidePattern(11, 80); int tempC = get3231Temp(); int tempC_unit = tempC % 10; int tempC_tens = tempC / 10; slidePattern(tempC_tens, 80); slidePattern(tempC_unit, 80); slidePattern(13, 80); slidePattern(11, 80); slidePattern(11, 80); } int get3231Temp() { //temp registers (11h-12h) get updated automatically every 64s Wire.beginTransmission(DS3231_I2C_ADDRESS); Wire.write(0x11); Wire.endTransmission(); Wire.requestFrom(DS3231_I2C_ADDRESS, 2); if(Wire.available()) { tMSB = Wire.read(); //2's complement int portion tLSB = Wire.read(); //fraction portion temp3231 = (tMSB & B01111111); //do 2's math on Tmsb } else { //oh noes, no data! } return temp3231; } 

Gerelateerde Artikelen

Arduino Dot Matrix Game Console

Arduino Dot Matrix Game Console

Slimme telefoon & iPad gaming is groot en alle liefde Candy Crush & Angry Birds, maar niets kan aanraken van de charme van het maken van een game console door eigen en speel mee. Het was 2003, toen kreeg ik een Nokia 3310 mobiele telefoon en ik ge
Eenvoudige Arduino Dot-Matrix beeldscherm

Eenvoudige Arduino Dot-Matrix beeldscherm

tegenwoordig zijn er vele Dot-matrix displays op de top van winkels of dit soort plaatsen.Dot-matrix heeft een eenvoudige idee achter, voor het maken en weergeven met LED of lamp puntjes.In deze handleiding wil ik u laten zien hoe een beginner en een
Arduino - Dot-Matrix scherm schrijven LED

Arduino - Dot-Matrix scherm schrijven LED

1. doelstellingenEen pen schrijven op dot-matrix scherm bereiken.2. circuit analyseDot-matrix scherm handschrift bestaat uit drie hoofdonderdelen: de rij scanning circuit kolom scannen circuit weergegeven, lichte pen detectie circuit, blokdiagram hie
DIY LED bord met MAX7219 Dot Matrix Module STM8S003F3 MCU voor AVR PIC MSP430 Arduino ARM STM32

DIY LED bord met MAX7219 Dot Matrix Module STM8S003F3 MCU voor AVR PIC MSP430 Arduino ARM STM32

om te voldoen aan de elektronische DIY hobbyisten, ICStation MAX7219 Dot Matrix Moduleheeft ontwikkeld. Het gebruikt de Max7219-chip die een geweldige job op besparing van MCU i/o. Het kan geen alleen controle over elk punt afzonderlijk, maar ook kan
Arduino Controlled RGB LED Dot Matrix bord

Arduino Controlled RGB LED Dot Matrix bord

dit project is een relatief eenvoudig en simpel DIY muziek-board.De Dot Matrix bord kan elke ouder persoon maken hun eigen muziek en beats.Allen u moet hebben is een goed begrip van de Arduino en circuits.Stap 1: Verzamel onderdelen die nodig zijnHie
Kamertemperatuur in Dot-Matrix beeldscherm met Arduino en LM35

Kamertemperatuur in Dot-Matrix beeldscherm met Arduino en LM35

Hey daar!Dit is mijn eerste instructable, en ik zal je laten zien hoe u een temperatuursensor en een Dot-Matrix beeldscherm met arduino in real-time kunt interface.Ik heb bijgevoegd de arduino schets, die nogal groot in één oogopslag is, maar als u o
Met behulp van een Dot Matrix LED met een Arduino en Shift Register

Met behulp van een Dot Matrix LED met een Arduino en Shift Register

de Siemens DLO7135 Dot matrix LED is een verbazingwekkend stukje opto-elektronica. Het is gefactureerd als een 5 x 7 Dot Matrix intelligente Display (r) met geheugen/Decoder/Driver. Samen met dat het geheugen, het heeft een 96-ASCII karakterdisplay s
Arduino - Mini Dot Matrix-scherm

Arduino - Mini Dot Matrix-scherm

In dit project van Arduino ik zal u laten zien hoe maak je een mini dot matrix bord met twee 8 door 8 LED modules worden weergegeven.Voor dit Project, u moet de volgende onderdelen:Compatibel is met Arduino boardJumper dradenPrototyping BreadboardUSB
Bluetooth dot-matrix beeldscherm met Arduino

Bluetooth dot-matrix beeldscherm met Arduino

Hebt u een smartphone en een Bluetooth-module. Kun je echt creatief met je Arduino. Hier hebben we een dot matrix display bouwen gecontroleerd door een Arduino gebouwd. U kunt patronen tekenen op uw smart phone en het zal getoond worden op de dot-mat
5 x 5 dot matrix Arduino (krijgt tekst vanaf pc) volledige instructies en script

5 x 5 dot matrix Arduino (krijgt tekst vanaf pc) volledige instructies en script

U typt gewoon de tekst die u op uw computer wilt en uw 5 × 5 dot matrix geeft de melding.Gebruikt:~ 25 leds~ Arduino uno~ 5 x 100 ohm weerstand~ en een beetje van skriptingHet kostte me een tijdje om dit allemaal uitzoeken maar uiteindelijk werd het
8 x 8 rode Dot Matrix met Arduino

8 x 8 rode Dot Matrix met Arduino

LedControl.h moet je voor de Arduino IDE.Stap 1: BenodigdhedenArduino of Arduino kloon8 x 8 Dot Matrix met Driver Board5 male naar vrouwelijke Jumper dradenAls je dit spul van eBay zijn over AU $10.Stap 2: bedradingVCC gaat in een 5v op de Arduino.GN
Arduino 8 x 8 Dot Matrix scrollen tekst Calculator leidde

Arduino 8 x 8 Dot Matrix scrollen tekst Calculator leidde

HalloIk doe het omdat ik een rekenmachine nodig voor mijn vriendin (ik ben de voorbereiding van een cadeau voor haar :))Hoe dan ook, het is gemakkelijk. Ik gehecht standart code voor arduino 8 x 8 dot matrix 7219. Dan kunt u uw tekst met mijn excel-b
LED Dot-Matrix beeldscherm

LED Dot-Matrix beeldscherm

dit is een eenvoudige HOW-TO maken uw eigen gepersonaliseerde LED Dot-Matrix beeldscherm. Ik zal het toevoegen van het complete programma met een uitleg aan het licht van de LED's met. Het is ook nogal gehackt, dat kunt u het aan jezelf.Ik decieded o
8 * 8 LED Dot Matrix klok

8 * 8 LED Dot Matrix klok

Ik heb een LED-module een paar dagen geleden en zat te denken over het gebruik van het voor het spelen van Tetris of een slang spel, maar ik dacht dat dat zou lame. Dus ik dacht: "waarom niet maken een horloge?"Als er alleen vierenzestig stippen