Created
December 1, 2011 11:23
-
-
Save eduardodx/1415989 to your computer and use it in GitHub Desktop.
Arduino Relogio Despertador
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Wire.h> | |
int state; | |
byte SW0 = 3; | |
byte SW1 = 2; | |
byte SW2 = 1; | |
byte minutes; | |
byte hours; | |
int parar = 12; | |
int despertar[2]; | |
int despertarFlag; | |
byte despertador [7][4]; | |
int funcao; | |
int campo; | |
void setup () { | |
Wire.begin(); | |
byte minutes = 0; | |
byte hours = 5; | |
Wire.beginTransmission(0x68); | |
Wire.send(0); | |
Wire.send(0x00); | |
Wire.send(minutes); | |
Wire.send(0x80 | hours); | |
Wire.send(0x06); | |
Wire.send(0x01); | |
Wire.send(0x05); | |
Wire.send(0x09); | |
Wire.send(0x10); | |
Wire.endTransmission(); | |
pinMode(0, OUTPUT); | |
pinMode(1, OUTPUT); | |
pinMode(2, OUTPUT); | |
pinMode(3, OUTPUT); | |
pinMode(4, OUTPUT); | |
pinMode(5, OUTPUT); | |
pinMode(6, OUTPUT); | |
pinMode(7, OUTPUT); | |
pinMode(8, OUTPUT); | |
pinMode(9, OUTPUT); | |
pinMode(10,OUTPUT); | |
pinMode(12, OUTPUT); | |
pinMode(13, OUTPUT); | |
digitalWrite(13, HIGH); | |
} | |
void loop () { | |
Wire.beginTransmission(0x68); | |
Wire.send(0); | |
Wire.endTransmission(); | |
Wire.requestFrom(0x68, 3); | |
byte secs = Wire.receive(); | |
byte mins = Wire.receive(); | |
byte hrs = Wire.receive(); | |
digitalWrite(0, HIGH); | |
digitalWrite(1, LOW); | |
mostra(mins, 1); | |
digitalWrite(0, LOW); | |
digitalWrite(1, HIGH); | |
mostra(hrs, 2); | |
if ((analogRead(SW0) != 0)) set_time(); | |
delay(1000); | |
toggle(13); | |
if (mins == minutes && hrs == hours){ | |
while (parar =! 1){ | |
digitalWrite (12, HIGH); | |
delay (300); | |
digitalWrite (12, LOW); | |
delay (300); | |
} | |
} | |
} | |
void toggle( int pinNum ){ | |
int pinState = digitalRead(pinNum); | |
pinState = !pinState; | |
digitalWrite(pinNum, pinState); | |
} | |
void mostra(int num, int pos){ | |
int numEsq, numDir; | |
int bcd[4] = {0, 0, 0, 0}; | |
if (pos == 1){ | |
bcd[0] = 2; | |
bcd[1] = 3; | |
bcd[2] = 4; | |
bcd[3] = 5; | |
} else { | |
bcd[0] = 6; | |
bcd[1] = 7; | |
bcd[2] = 8; | |
bcd[3] = 9; | |
} | |
int msn = num/10; | |
int lsn = num-msn*10; | |
int mask = 8; | |
for(int i = 2; i < 11; i++) | |
digitalWrite(i, LOW); | |
for(int i = 0; i<4; i++){ | |
if(msn & mask != 0) | |
bcd[i] = 1; | |
mask >>= 1; | |
} | |
} | |
void acendeNo (int no, int pos) { | |
int bcd[4] = {0, 0, 0, 0}; | |
if (pos == 1){ | |
bcd[0] = 2; | |
bcd[1] = 3; | |
bcd[2] = 4; | |
bcd[3] = 5; | |
} else { | |
bcd[0] = 6; | |
bcd[1] = 7; | |
bcd[2] = 8; | |
bcd[3] = 9; | |
} | |
switch( no ){ | |
case 0: | |
digitalWrite(bcd[0], LOW); | |
digitalWrite(bcd[1], LOW); | |
digitalWrite(bcd[2], LOW); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 1: | |
digitalWrite(bcd[0], HIGH); | |
digitalWrite(bcd[1], LOW); | |
digitalWrite(bcd[2], LOW); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 2: | |
digitalWrite(bcd[0], LOW); | |
digitalWrite(bcd[1], HIGH); | |
digitalWrite(bcd[2], LOW); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 3: | |
digitalWrite(bcd[0], HIGH); | |
digitalWrite(bcd[1], HIGH); | |
digitalWrite(bcd[2], LOW); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 4: | |
digitalWrite(bcd[0], LOW); | |
digitalWrite(bcd[1], LOW); | |
digitalWrite(bcd[2], HIGH); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 5: | |
digitalWrite(bcd[0], HIGH); | |
digitalWrite(bcd[1], LOW); | |
digitalWrite(bcd[2], HIGH); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 6: | |
digitalWrite(bcd[0], LOW); | |
digitalWrite(bcd[1], HIGH); | |
digitalWrite(bcd[2], HIGH); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 7: | |
digitalWrite(bcd[0], HIGH); | |
digitalWrite(bcd[1], HIGH); | |
digitalWrite(bcd[2], HIGH); | |
digitalWrite(bcd[3], LOW); | |
break; | |
case 8: | |
digitalWrite(bcd[0], LOW); | |
digitalWrite(bcd[1], LOW); | |
digitalWrite(bcd[2], LOW); | |
digitalWrite(bcd[3], HIGH); | |
break; | |
case 9: | |
digitalWrite(bcd[0], HIGH); | |
digitalWrite(bcd[1], LOW); | |
digitalWrite(bcd[2], LOW); | |
digitalWrite(bcd[3], HIGH); | |
break; | |
} | |
} | |
void set_time() { | |
byte minutes = 0; | |
byte hours = 0; | |
while (analogRead(SW0) != 0) // set time switch must be released to exit | |
{ | |
while (analogRead(SW1) != 0) // set minutes | |
{ | |
minutes++; | |
if ((minutes & 0x0f) > 9) minutes = minutes + 6; | |
if (minutes > 0x59) minutes = 0; | |
Serial.print("Minutes = "); | |
if (minutes >= 9) Serial.print("0"); | |
Serial.println(minutes, HEX); | |
delay(750); | |
} | |
while (analogRead(SW2)!=0) // set hours | |
{ | |
hours++; | |
if ((hours & 0x0f) > 9) hours = hours + 6; | |
if (hours > 0x23) hours = 0; | |
Serial.print("Hours = "); | |
if (hours <= 9) Serial.print("0"); | |
Serial.println(hours, HEX); | |
delay(750); | |
} | |
Wire.beginTransmission(0x68); // activate DS1307 | |
Wire.send(0); // where to begin | |
Wire.send(0x00); //seconds | |
Wire.send(minutes); //minutes | |
Wire.send(0x80 | hours); //hours (24hr time) | |
Wire.send(0x06); // Day 01-07 | |
Wire.send(0x01); // Date 0-31 | |
Wire.send(0x05); // month 0-12 | |
Wire.send(0x09); // Year 00-99 | |
Wire.send(0x10); // Control 0x10 produces a 1 HZ square wave on pin 7. | |
Wire.endTransmission(); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment