Sunday, June 20, 2010

Major Project

My major project is an extended version of my minor project, The Binary Coded Decimal Light Emitting Diode Chronological Gauging Mechanism (BCDLEDCGM). I have added some extra features to the BCDLEDCGM including, the ability to set the hours and minutes, the ability to set it to 12 or 24 hour time and the ability to set an alarm to go off at a specific hour and minute.

Here is an image and some video footage of the BCDLEDCGM:


































Here is the code:


////Pin connected to DS of 74HC595
const int dataPin = 11;

//Pin connected to SH_CP of 74HC595
const int clockPin = 12;

//Pin connected to ST_CP of 74HC595
const int latchPin = 13;

const int switchModeButton = 2;
const int actionButton = 6;
const int hourButton = 4;
const int minuteButton = 5;
const int buzzer = 10;

int minuteSetNum;
int hourSetNum;
int setMinutes;
int setHours;
int shiftAlarmSeconds;
int shiftAlarmMinutes;
int shiftAlarmHours;
int alarmMinutes;
int alarmHours;
int alarmSet;
int hourMode = 0;
int clockMode = 1;




#define SECS_PER_MIN (60UL)

#define numberOfSeconds(_time_) (_time_ % SECS_PER_MIN)


void setup()
{
Serial.begin(9600);
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
pinMode(switchModeButton, INPUT);
pinMode(actionButton,INPUT);
pinMode(hourButton, INPUT);
pinMode(minuteButton, INPUT);
}
void loop()
{
if (clockMode == 1)
{
int modeButtonState = digitalRead(switchModeButton);
if (modeButtonState == 1)
clockMode = 0;
int actionButtonState = digitalRead(actionButton);
if (actionButtonState == 1)
if (hourMode == 1)
hourMode = 0;
else
hourMode = 1;
int seconds = shiftSeconds();
int minutes = shiftMinutes(seconds);
int hours = shiftHours(seconds, minutes, hourMode);
if (alarmSet == 1)
if((minutes == shiftAlarmMinutes) && (hours == shiftAlarmHours))
tone(buzzer, 880, 500);
showTime(hours, minutes, seconds);
}
else
{
int modeButtonState = digitalRead(switchModeButton);
if (modeButtonState == 1)
clockMode = 1;
int actionButtonState = digitalRead(actionButton);
if (actionButtonState == 1)
if (alarmSet == 1)
alarmSet = 0;
else
alarmSet = 1;
int seconds = shiftSeconds();
shiftAlarmSeconds = alarmShiftSeconds();
shiftAlarmMinutes = alarmShiftMinutes(seconds);
shiftAlarmHours = alarmShiftHours(seconds, hourMode);
showTime(shiftAlarmHours, shiftAlarmMinutes, shiftAlarmSeconds);
}
delay(500);
}


int shiftSeconds()
{
unsigned long time = millis() / 1000;
int tenSeconds = ((numberOfSeconds(time) - (numberOfSeconds(time) % 10))/ 10);
int oneSeconds = numberOfSeconds(time) % 10 ;
return ((tenSeconds<<4) + oneSeconds);
}


int shiftMinutes(int seconds)
{
int buttonState = digitalRead(minuteButton);
if (buttonState == 1)
minuteSetNum = (minuteSetNum + 1) % 60;
if (seconds == 0)
{
setMinutes = (setMinutes + 1) % 60;
delay(750);
}
int minutes = (setMinutes + minuteSetNum) % 60;
int tenMinutes = ((minutes - (minutes % 10))/ 10);
int oneMinutes = minutes % 10 ;
return ((tenMinutes<<4) + oneMinutes);
}


int shiftHours(int seconds, int minutes, int mode)
{
int buttonState = digitalRead(hourButton);
if (buttonState == 1)
hourSetNum = (hourSetNum + 1) % 24;
if ((seconds == 0) && (minutes == 0))
{
setHours = (setHours + 1) % 24;
delay(750);
}
int hours = (setHours + hourSetNum) % 24;
if (mode == 0)
hours = (hours % 12) + 1;
int tenHours = ((hours - (hours % 10))/ 10);
int oneHours = hours % 10 ;
return ((tenHours<<4) + oneHours);
}


int alarmShiftSeconds()
{
if (alarmSet == 1)
return 255;
else
return 0;
}


int alarmShiftMinutes(int seconds)
{
int buttonState = digitalRead(minuteButton);
if (buttonState == 1)
alarmMinutes = (alarmMinutes + 1) % 60;
if (seconds == 0)
{
setMinutes = (setMinutes + 1) % 60;
delay(750);
}
int minutes = alarmMinutes % 60;
int tenMinutes = ((minutes - (minutes % 10))/ 10);
int oneMinutes = minutes % 10 ;
return ((tenMinutes<<4) + oneMinutes);
}


int alarmShiftHours(int seconds, int mode)
{
int buttonState = digitalRead(hourButton);
if (buttonState == 1)
alarmHours = (alarmHours + 1) % 24;
if ((seconds == 0) && ((setMinutes + minuteSetNum) == 0))
{
setHours = (setHours + 1) % 24;
delay(750);
}
int hours = alarmHours % 24;
if (mode == 0)
hours = (hours % 12) + 1;
int tenHours = ((hours - (hours % 10))/ 10);
int oneHours = hours % 10 ;
return ((tenHours<<4) + oneHours);
}


void showTime(int hours, int minutes, int seconds)
{
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, LSBFIRST,hours);
shiftOut(dataPin, clockPin, LSBFIRST,minutes);
shiftOut(dataPin, clockPin, LSBFIRST,seconds);
digitalWrite(latchPin, HIGH);
}

No comments:

Post a Comment