DIY Arduino matrisskrivare armbandsur (7 / 13 steg)

Steg 7: Arduino Program för binär klocka



Alla program är skrivna i arduino miljö och laddas upp till ATMega328 genom att använda arduino uno. ISP programmering protokoll används för programmering. Programmet har jag delat i två delar och var och en kan användas självständigt. En för binär klocka och ett annat för digital-läge i klockan.

Följande program är endast för binärt läge av klockan och används knappen bibliotek:

#include "Wire.h"
#define DS3231_I2C_ADDRESS 0x68

#include < Button.h > / / https://github.com/JChristensen/Button

#define BUTTON_PIN_1 2 //Connect en taktil knapp switch (eller något liknande)
#define BUTTON_PIN_2 9 //from Arduino stift 2 till marken.
#define PULLUP sant //To hålla det enkelt, vi använder Arduinos interna pullup motstånd.
#define INVERTERA true //Since pullup motstånd kommer att hålla pin hög om inte den
växeln är stängd, det är negativ logik, dvs en hög stat
innebär att knappen inte är intryckt. (Förutsatt att en normalt öppen switch.)
#define DEBOUNCE_MS 20 //A debounce tid 20 millisekunder oftast fungerar bra för taktil knappen växlar.

#define LONG_PRESS 1000 //We definierar en "long press" vara 1000 millisekunder.

#define MSEK 1 //for ljusstyrka LED

Knappen myBtn1 (BUTTON_PIN_1, PULLUP, INVERTERA, DEBOUNCE_MS); Deklarera på knappen
Knappen myBtn2 (BUTTON_PIN_2, PULLUP, INVERTERA, DEBOUNCE_MS);

Konvertera normala decimaltal till binary coded decimal
byte decToBcd(byte val)
{
tillbaka ((val/10 * 16) + (val % 10));
}
Konvertera binary coded decimal till normala decimaltal
byte bcdToDec(byte val)
{
tillbaka ((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.

lång lastPressTime;

Du måste justera pin-kod enligt din anslutning
byte colPin [8] = {4, 15, 14, 7, 12, 6, 3, 0}; -ve pin
byte rowPin [8] = {8, 1, 10, 5, 17, 11, 16, 13}; + ve

byte buttonStateOne = 0, buttonLongStateOne = 0, buttonStateTwo = 0, buttonLongStateTwo = 0;

byte clockMode = 0;

void setup() {
Wire.BEGIN();

för (byte jag = 3; jag < = 17; i ++) {
IF(i==9) fortsätta; Ignorera pin 9
pinMode (i, matas);
}

pinMode (0, OUTPUT);
pinMode (1, OUTPUT);
pinMode (2, ingång); knappen en
pinMode (9, ingång); knappen två
digitalWrite (2, hög). Aktivera inre pullup
digitalWrite (9, hög).

Ställ in kolumner och rader
för (byte jag = 1; jag < = 8; i ++) {
digitalWrite (colPin [i - 1], hög);
}

för (byte jag = 1; jag < = 8; i ++) {
digitalWrite (rowPin [i - 1], låg);
}

}

void loop() {
calculateDateTime();
IF(buttonLongStateTwo == 0)
binaryClock();
annat
editDisplay();

}

void setDS3231time (byte andra, byte minut, byte timme, byte dayOfWeek, byte
dayOfMonth, byte månad, byte år)
{
ställer in tid och datum data till DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); ställa in nästa ingång att starta vid sekunder register
Wire.write(decToBcd(Second)); ställa in sekunder
Wire.write(decToBcd(Minute)); minuter
Wire.write (decToBcd(hour | 0x40)); Ange timmar
Wire.write(decToBcd(DAYOFWEEK)); Ställ in dagen i veckan (1 = söndag, 7 = lördag)
Wire.write(decToBcd(dayOfMonth)); Ställ in datum (1 till 31)
Wire.write(decToBcd(month)); ange månad
Wire.write(decToBcd(Year)); år (0-99)
Wire.endTransmission();
}

void readDS3231time (byte * andra,
byte * minut,
byte * timme,
byte * dayOfWeek,
byte * dayOfMonth,
byte * månad,
byte * år)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); Ange DS3231 register pekaren till 00h
Wire.endTransmission();
Wire.requestFrom (DS3231_I2C_ADDRESS, 7);
begära sju byte data från DS3231 start från registret 00h
* andra = bcdToDec(Wire.read() & 0x7f);
* minut = bcdToDec(Wire.read());
* timme = bcdToDec(Wire.read() & 0x1f);
* dayOfWeek = bcdToDec(Wire.read());
* dayOfMonth = bcdToDec(Wire.read());
* månad = bcdToDec(Wire.read());
* år = bcdToDec(Wire.read());
}

void calculateDateTime() {
byte sekund, minut, timme, dayOfWeek, dayOfMonth, månad, år.
Hämta data från DS3231
readDS3231time (& sekund, minut, timme, & dayOfWeek, & dayOfMonth, & månad,
& år);

om (timme > 12) {
timme = timme - 24;
}

second_unit = andra % 10.
second_tens = andra / 10;

minute_unit = minut % 10.
minute_tens = minuter / 10;

hour_unit = timme % 10.
hour_tens = timme / 10;

date_unit = dayOfMonth % 10.
date_tens = dayOfMonth / 10;

month_unit = månad % 10.
month_tens = månad / 10;

year_unit = år % 10.
year_tens = år / 10;
}

void time_zero (int pos) {
Delay(MSEC);
}

void time_one (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [7], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [7], låg);
}

void time_two (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [6], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [6], låg);
}

void time_three (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [6], hög);
digitalWrite (rowPin [7], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [6], låg);
digitalWrite (rowPin [7], låg);
}

void time_four (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5], låg);
}

void time_five (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5], hög);
digitalWrite (rowPin [7], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5], låg);
digitalWrite (rowPin [7], låg);
}

void time_six (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5], hög);
digitalWrite (rowPin [6], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5], låg);
digitalWrite (rowPin [6], låg);
}

void time_seven (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5], hög);
digitalWrite (rowPin [6], hög);
digitalWrite (rowPin [7], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5], låg);
digitalWrite (rowPin [6], låg);
digitalWrite (rowPin [7], låg);
}

void time_eight (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [4], låg);
}

void time_nine (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [4], hög);
digitalWrite (rowPin [7], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [4], låg);
digitalWrite (rowPin [7], låg);
}

void date_zero (int pos) {
Delay(MSEC);
}

void date_one (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [7-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [7-4], låg);
}

void date_two (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [6-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [6-4], låg);
}

void date_three (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [6-4], hög);
digitalWrite (rowPin [7-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [6-4], låg);
digitalWrite (rowPin [7-4], låg);
}

void date_four (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5-4], låg);
}

void date_five (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5-4], hög);
digitalWrite (rowPin [7-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5-4], låg);
digitalWrite (rowPin [7-4], låg);
}

void date_six (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5-4], hög);
digitalWrite (rowPin [6-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5-4], låg);
digitalWrite (rowPin [6-4], låg);
}

void date_seven (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [5-4], hög);
digitalWrite (rowPin [6-4], hög);
digitalWrite (rowPin [7-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [5-4], låg);
digitalWrite (rowPin [6-4], låg);
digitalWrite (rowPin [7-4], låg);
}

void date_eight (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [4-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [4-4], låg);
}

void date_nine (int pos) {
digitalWrite (colPin [pos], låg);
digitalWrite (rowPin [4-4], hög);
digitalWrite (rowPin [7-4], hög);
Delay(MSEC);
digitalWrite (colPin [pos], hög);
digitalWrite (rowPin [4-4], låg);
digitalWrite (rowPin [7-4], låg);
}

{Ogiltig Visa (int siffror, int pos)
Switch(DIGIT) {
fall 0:
time_zero(POS);
bryta;

fall 1:
time_one(POS);
bryta;

fall 2:
time_two(POS);
bryta;

fall 3:
time_three(POS);
bryta;

fall 4:
time_four(POS);
bryta;

fall 5:
time_five(POS);
bryta;

fall 6:
time_six(POS);
bryta;

fall 7:
time_seven(POS);
bryta;

mål 8:
time_eight(POS);
bryta;

mål 9:
time_nine(POS);
bryta;
}

}

void date_show (int tecken, int pos) {
Switch(DIGIT) {
fall 0:
date_zero(POS);
bryta;

fall 1:
date_one(POS);
bryta;

fall 2:
date_two(POS);
bryta;

fall 3:
date_three(POS);
bryta;

fall 4:
date_four(POS);
bryta;

fall 5:
date_five(POS);
bryta;

fall 6:
date_six(POS);
bryta;

fall 7:
date_seven(POS);
bryta;

mål 8:
date_eight(POS);
bryta;

mål 9:
date_nine(POS);
bryta;
}

}

void binaryClock() {
FrequencyTimer2::setOnOverflow(0);
Visa (second_unit, 7);
Visa (second_tens, 6);

Visa (minute_unit, 4);
Visa (minute_tens, 3);

Visa (hour_unit, 1);
Visa (hour_tens, 0);

date_show (date_unit, 7);
date_show (date_tens, 6);

date_show (month_unit, 4);
date_show (month_tens, 3);

date_show (year_unit, 1);
date_show (year_tens, 0);
}

void showMinute() {
int _minute_unit = _minute % 10.
int _minute_tens = _minute / 10;
Visa (_minute_unit, 4);
Visa (_minute_tens, 3);
}

void showHour() {
int _hour_unit = _hour % 10.
int _hour_tens = _hour / 10;
Visa (_hour_unit, 1);
Visa (_hour_tens, 0);
}
void showDate() {
int _date_unit = _date % 10.
int _date_tens = _date / 10;
date_show (_date_unit, 7);
date_show (_date_tens, 6);
}

void showMonth() {
int _month_unit = _month % 10.
int _month_tens = _month / 10;
date_show (_month_unit, 4);
date_show (_month_tens, 3);
}
void showYear() {
int _year_unit = _year % 10.
int _year_tens = _year / 10;
date_show (_year_unit, 1);
date_show (_year_tens, 0);
}

void button() {
myBtn1.read(); Läs på-knappen
myBtn2.read(); Läs på-knappen

om (myBtn1.wasReleased()) {
lastPressTime = millis();
IF(buttonLongStateTwo == 0) {}
annars om ((buttonLongStateTwo == 1) & & (buttonStateTwo == 1))
{
showMinute();
_minute ++;
Delay(20);
IF(_minute > 59)
_minute = 0;
Serial.println(Minute);
}
annars om ((buttonLongStateTwo == 1) & & (buttonStateTwo == 2))
{
showHour();
_hour ++;
Delay(20);
IF(_hour > 12)
_hour = 1;
Serial.println(Hour);
}
annars om ((buttonLongStateTwo == 1) & & (buttonStateTwo == 3))
{
showDate();
_date ++;
Delay(20);
IF(_date > 31)
_date = 1;
Serial.println(date);
}
annars om ((buttonLongStateTwo == 1) & & (buttonStateTwo == 4))
{
showMonth();
_month ++;
Delay(20);
IF(_month > 12)
_month = 1;
Serial.println(month);
}
annars om ((buttonLongStateTwo == 1) & & (buttonStateTwo == 5))
{
showYear();
_Year ++;
IF(_Year > 99)
_Year = 15.
Delay(20);
Serial.println(Year);
}

}

annat if (myBtn1.pressedFor(LONG_PRESS)) {
lastPressTime = millis();
setDS3231time(_second,_minute,_hour,1,_date,_month,_year);

Serial.println ("datum uppsättning");
buttonLongStateTwo = 0;
Serial.println(buttonLongStateTwo);
Delay(100);
}

annat if (myBtn2.wasReleased()) {
lastPressTime = millis();
IF(buttonLongStateTwo == 0) {

}
annat if(buttonLongStateTwo == 1) {
buttonStateTwo ++;
IF(buttonStateTwo > 5)
buttonStateTwo = 1;
}
om ((buttonStateTwo == 1) & &(buttonLongStateTwo == 1)) {
showMinute();
Delay(20);
Serial.println ("display minut");
}
om ((buttonStateTwo == 2) & &(buttonLongStateTwo == 1)) {
Serial.println ("display timme");
showHour();
Delay(20);
}
om ((buttonStateTwo == 3) & &(buttonLongStateTwo == 1)) {
Serial.println ("display datum");
showDate();
Delay(20);
}
om ((buttonStateTwo == 4) & &(buttonLongStateTwo == 1)) {
Serial.println ("display månad");
showMonth();
Delay(20);
}
om ((buttonStateTwo == 5) & &(buttonLongStateTwo == 1)) {
Serial.println ("display år").
showYear();
Delay(20);
}

}
annat if (myBtn2.pressedFor(LONG_PRESS)) {
lastPressTime = millis();
readDS3231time (_second, _minute, & _hour, & _day, & _date, & _month,
& _year);
buttonLongStateTwo = 1;
Serial.println ("redigeringsläge");
Delay(10);
}

}

void editDisplay() {
om ((buttonStateTwo == 1) & &(buttonLongStateTwo == 1)) {
showMinute();

Serial.println ("display minut");
}
om ((buttonStateTwo == 2) & &(buttonLongStateTwo == 1)) {
Serial.println ("display timme");
showHour();

}
om ((buttonStateTwo == 3) & &(buttonLongStateTwo == 1)) {
Serial.println ("display datum");
showDate();

}
om ((buttonStateTwo == 4) & &(buttonLongStateTwo == 1)) {
Serial.println ("display månad");
showMonth();

}
om ((buttonStateTwo == 5) & &(buttonLongStateTwo == 1)) {
Serial.println ("display år").
showYear();

}

}

Se Steg
Relaterade Ämnen

DIY Arduino Word-klocka projekt

Detta instructable är på byggandet av min Arduino Word-klocka. Detta instructable ger tillsammans ett par min tidigare delprojekt som har publicerats på instructables som jag har kommit till avslutningen av Word-klockan.Så, vad är en Word-klocka? Det...

DIY ARDUINO styrelsen för 5$

Arduino styrelsen är en öppen källkod elektroniska prototyping plattform används av hobby, konstnär, formgivare, beslutsfattare osv...Arduino är enkel att använda i stället för alla andra prototyper styrelsen!.Jag bortskämd så mycket pengar på att kö...

DIY Arduino Mega 2560 eller 1280

så detta är min första instructables... Låt oss prova detta!* original kan hittas här: http://tsjwang.blogspot.com/2013/08/diy-arduino-mega-2560.html*Okej.Här är berättelsen: jag arbetade på detta frustrerande Arduino projekt, och jag beslutade att t...

DIY Arduino rullning LCD text sköld

Detta projekt är en uppgradering på min "DIY Arduino LCD shield" gå kolla in hur man gör det på min kanal!I detta projekt kommer jag att använda en Arduino Uno för att bläddra lite text på en 16 × 2 tecken LCD som kontrolleras med ett par tryckk...

DIY Arduino färgsensor

Hur man gör en DIY Arduino färgsensorSteg 1: delar 4 lysdioder (grön, blå, röd, gul)4 220 ohms motstånd1 LDR1 10 k motståndKvinnliga PinsPCBSteg 2: Skär PCB Forma din design att PCB. Sedan skär den. Jag använde 3,5 cm 2,5 cmSteg 3: Starta lödning del...

DIY Arduino Nano

Hur man gör en Arduino Nano med en Attiny 85.Steg 1: PCB Forma din design att PCB. Jag använde 6cm 2 cm.Steg 2: Skär PCB Jag använde Dremel men du kan använda vad du vill. Se till att gnida det väl, så det kommer att ta en god form.Steg 3: delarSe de...

DIY Arduino armbandsur Walkie-Talkie

Alrighty, jag har alltid velat göra en armbandsur walkie-talkie efterlikna de kommunikatörer som används i Mighty Morphin Power Rangers. Mitt intresse har nyligen föryngrats efter att hitta en cool Power Rangers communicator prop och av den senaste u...

DIY ARDUINO flyg CONTROLLER

Kan bygga en Arduino baserat flygning styrenhet som kan göra trådlösa PID tuning, orientering lås och höjd håller och placerar lås med hjälp av en GPS. OK så här DIY flyg controller är en pedagogisk Arduino baserad modul. Det är enkelt att göra, lätt...

(Ännu en) DIY Arduino Robotics Platform-A Robot chassi från reservdelar

Jag gav min systerson en Arduino startpaket för några månader sedan. Jag frågade min syster hur han gjorde det och hon sa att han hade haft några problem räkna ut. Jag kommer att få se honom veckan efter jul, så jag sa till honom att få satsen och vi...

Gör fast robotarm kanten till "Trådlös" med DIY Arduino + XBee

Uppdatering: Schematisk, Top Layer PCB, botten Layer PCB och både toppen, botten PCB bilderNär jag slutade "RevIO" - en Arduino klon som har olika sätt att exponera pins användning. Jag beslutat att gå vidare till nästa projekt. Att testa min &q...

Monteringsanvisningar för reaktorhärden, DIY Arduino programmeraren

Hur det fungerarUSB-Mini-kontakt, detta ger både kraften och den seriell datakommunikationen från datorn till reaktorn kärnar ur programmeraren.-USB/seriell FT232RL, meddelande IC chip av FTDI. USB-signalen konverteras till 5 volt TTY följetong för d...

DIY Arduino fjärrkontroll och Lego RC bil!

Uppdatera (8/29/13): tacka er läsare för din entusiasm och typ kommentarer angående detta projekt! Det har varit en enorm resa sedan jag började detta projekt redan i mars, men jag är mycket glad med den resulterande produkten och spänningen som det...

DIY Arduino batteri plats svetsare

En Arduino Nano baserat plats svetsare för batteri svetsningDenna Spot Svetsare kan användas till att svetsa 18650 batterier. Det behöver en 7-12V strömkälla (12V rekommenderas) och använder ett 12V bilbatteri som svetsning strömtillförsel. Vanligtvi...

DIY Arduino eller "Den DIY-Duino"

här hela guiden finns också på min hemsida påhttp://www.theparsley.com/Arduino/DIY/För att citera Arduino webbplats:"Arduino är en öppen källkod elektronik prototyping plattform baserad på flexibel, lätt att använda maskinvara och programvara. Den är...

DIY Arduino Radar

inte så länge sedan, köpte en Srf02 ultrasonic sensor för min hobbyprojekt. Det första projektet som jag gjorde var en DIY radar som ritar en karta.När jag avslutat det jag ville dela detta projekt och här jag skriver detta instructable.Principen för...

DIY Arduino temperaturgivare

detta instructable visar dig hur man bygger en temperaturgivare som är kompatibel med Arduino stiger ombord, som kan användas för olika hem projekt. Det visar också ett enkelt program, där DIY sensorn används för att göra en enkel Arduino baserade in...

DIY Arduino LED-färg orgel 2.0

I detta projekt som jag kommer att visa dig hur man bygger ett Arduino LED färg Organ som reagerar på olika frekvensband i din musik med ljus visar. I mitt fall representerar den röda lampan basen, grönt ljus mellersta frekvenser och blå är de höga t...

DIY Arduino tid förflutit Panner för GoPro

Jag behövde skapa en panner som skulle göra 1 rotation över 5 minuter.Upptäckte jag två andra projekt att basera min på. Konstruktion är ungefär samma som källkodsprojekt nedan.Jag skrev om några av koden. Min TimeLapse Panner efterfrågar # rotatione...

DIY Arduino 3D IR gest Sensor

Om du gillar detta projekt Vänligen rösta för det i "Sensorer Contest 2016" som det tog mig mycket tid att göra det (att trycka på knappen överst till höger där det står "Rösta").* Har du någonsin velat använda gester för att styra mus...