Вы находитесь на странице: 1из 6

/* CLOCKY DELUXE */

#include <MsTimer2.h>
//Variables conectadas a PINS (E/S)

boolean set = 11;


boolean set_alarm = 12;
boolean puls_horas = 9; // Pulsador conectado al pin 11
boolean puls_minutos = 13; // Pulsador conectado al pin 10
boolean interruptor_alarma = 10;

int points = 8;
int ud_min = 7;
int dec_min = 6;
int ud_hora = 5;
int dec_hora = 4;

int latchPin = 2;
int clockPin = 3;
int dataPin = 1;

//Variables del programa (de estado)


int hh;
int mm;
int segundos = 0;
int minutos = 13;
int minutos_alarm = 14;
int horas = 13;
int horas_alarm = 13;
int int_alarma;
int m;

int j=0;
int variable;

byte dataArray[11];
byte dataArray_motor[7];

boolean state = LOW;


boolean horas_inc=0;
boolean min_inc=0;
boolean set_select;
boolean set_select2;
boolean alarma = LOW;

void tick2()
{
segundos++;
/*digitalWrite(points, state);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, 219);
digitalWrite(latchPin, 1);*/
//state = !state;
j++;
}

void setup()
{
pinMode(puls_horas, INPUT);
pinMode(puls_minutos, INPUT);
pinMode(set_alarm, INPUT);
pinMode(set, INPUT);
pinMode(interruptor_alarma, INPUT);

pinMode(latchPin, OUTPUT);
pinMode(points, OUTPUT);
pinMode(ud_min, OUTPUT);
pinMode(dec_min, OUTPUT);
pinMode(ud_hora, OUTPUT);
pinMode(dec_hora, OUTPUT);

dataArray[0] = 63;
dataArray[1] = 6;
dataArray[2] = 91;
dataArray[3] = 79;
dataArray[4] = 102;
dataArray[5] = 109;
dataArray[6] = 125;
dataArray[7] = 7;
dataArray[8] = 127;
dataArray[9] = 103;
dataArray[10] = 219;

dataArray_motor[0] = 1;
dataArray_motor[1] = 2;
dataArray_motor[2] = 70;
dataArray_motor[3] = 69;
dataArray_motor[4] = 73;
dataArray_motor[5] = 74;
dataArray_motor[6] = 192;

MsTimer2::set(500, tick2); // 500ms period


MsTimer2::start();
}

void loop()
{
settings();
if(segundos==119)
{
minutos++;
segundos = 0;
if (minutos >59)
{
minutos = 0;
if (horas ==23)
{
horas = 0 ;
}
else horas = horas + 1;
}
}
if ((horas == horas_alarm)&&(minutos == minutos_alarm))
{
alarma = HIGH;
}
alarm();
set_select = digitalRead(set);
set_select2 = digitalRead(set_alarm);
if(set_select2 == HIGH && set_select == LOW)
{
hh = horas_alarm;
mm = minutos_alarm;
muestra(hh,mm,m);
}
else
{
hh = horas;
mm = minutos;
muestra(hh,mm,m);
}

void settings()
{
horas_inc = digitalRead(puls_horas);
min_inc = digitalRead(puls_minutos);
set_select = digitalRead(set);
set_select2 = digitalRead(set_alarm);
while (((horas_inc==LOW )||(min_inc==LOW))&& set_select2==LOW)
{
if(horas_inc==LOW)
{

if (horas ==23)
{
horas = 0 ;
}
else horas = horas + 1;

}
if (min_inc==LOW)
{
if (minutos == 59)
{
minutos = 0 ;
}
else minutos = minutos + 1;
}
delay(750);
horas_inc = digitalRead(puls_horas);
min_inc = digitalRead(puls_minutos);
set_select = digitalRead(set);
set_select2 = digitalRead(set_alarm);
}

while (((horas_inc==LOW )||(min_inc==LOW))&& set_select==LOW)


{
if(horas_inc==LOW)
{
muestra(hh,mm,m);
if (horas_alarm ==23)
{
horas_alarm = 0 ;
}
else horas_alarm = horas_alarm + 1;

}
if (min_inc==LOW)
{
muestra(hh,mm,m);
if (minutos_alarm == 59)
{
minutos_alarm = 0 ;
}
else minutos_alarm = minutos_alarm + 1;

delay(750);
horas_inc = digitalRead(puls_horas);
min_inc = digitalRead(puls_minutos);
set_select = digitalRead(set);
set_select2 = digitalRead(set_alarm);
}
}

void shiftOut(int myDataPin, int myClockPin, byte myDataOut)


{
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);

//clear everything out just in case to


//prepare shift register for bit shifting
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);

//for each bit in the byte myDataOut?


//NOTICE THAT WE ARE COUNTING DOWN in our for loop
//This means that %00000001 or "1" will go through such
//that it will be pin Q0 that lights.
for (i=7; i>=0; i--) {
digitalWrite(myClockPin, 0);

//if the value passed to myDataOut and a bitmask result


// true then... so if we are at i=6 and our value is
// %11010100 it would the code compares it to %01000000
// and proceeds to set pinState to 1.
if ( myDataOut & (1<<i) ) {
pinState= 0;
}
else {
pinState= 1;
}

//Sets the pin to HIGH or LOW depending on pinState


digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}

//stop shifting
digitalWrite(myClockPin, 0);
}

void alarm()
{
int_alarma = digitalRead(interruptor_alarma);
if((alarma == HIGH)&&(int_alarma == HIGH))
{
if (j>4)
{
variable=random(5);
m=variable;
j=0;
}
else
{
m=variable;
}
}
else
{
m=6;
alarma=LOW;
}
}

void muestra(int hh,int mm,int mot)


{

int min_ud;
int min_dec;
int hora_ud;
int hora_dec;

min_ud=mm%10;
min_dec=mm/10;
hora_ud=hh%10;
hora_dec=hh/10;

digitalWrite(ud_min, 1);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataArray_motor[mot]);
shiftOut(dataPin, clockPin, dataArray[min_dec]);
digitalWrite(latchPin, 1);
digitalWrite(ud_min,0);

digitalWrite(dec_min, 1);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataArray_motor[mot]);
shiftOut(dataPin, clockPin, dataArray[hora_ud]);
digitalWrite(latchPin, 1);
digitalWrite(dec_min, 0);

digitalWrite(ud_hora, 1);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataArray_motor[mot]);
shiftOut(dataPin, clockPin, dataArray[hora_dec]);
digitalWrite(latchPin, 1);
digitalWrite(ud_hora, 0);

digitalWrite(dec_hora, 1);
digitalWrite(latchPin, 0);
shiftOut(dataPin, clockPin, dataArray_motor[mot]);
shiftOut(dataPin, clockPin, dataArray[min_ud]);
digitalWrite(latchPin, 1);
digitalWrite(dec_hora, 0);
}

Вам также может понравиться