Skip to content

Instantly share code, notes, and snippets.

@eduardodx
Created December 1, 2011 11:23
Show Gist options
  • Save eduardodx/1415989 to your computer and use it in GitHub Desktop.
Save eduardodx/1415989 to your computer and use it in GitHub Desktop.
Arduino Relogio Despertador
#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