Final version, with changing analogue clock colours, Friday 11:20am

Dependencies:   MMA8451Q SPI_TFT_ILI9341 TFT_fonts mbed

Smart clock by Duncan and Kieran

Photo

http://www.imgur.com/SiyOshx.jpg

Equipment

  • PCB: FRDM-KL25Z
  • TFT Color Display: MI0283QT-9A
  • Buzzer
  • 3 x buttons
  • 3 x 2kΩ resistors and 1 x 100Ω resistor
  • Stripboard
  • Wires (stranded is preferable due to their flexibility)
  • USB to Mini-USB cable, and computer

Setup

PCB to TFT (Output)

FRDM-KL25ZMI0283QT-9A
P3V33.3V, IM1, IM2, IM3
GNDRD, IM0, LEDK
PTD5CS
PTD1RS
PTD0RST
PTD2SDI
PTD3SDO
PTA13WR
P5V_USB through 100Ω resistor (approx. 20mA)LEDA

The buzzer should be connected between PTA12 and ground.

Note: The resistance between P5V_USB and LEDA can be reduced to increase the brightness of the screen. However, resistors lower than 30Ω have not been tested, and may result in the current causing damage to the PCB.

PCB to Buttons (Inputs)

FRDM-KL25ZInput
PTA5Minute button
PTC8Hour button
PTC9Time change button - toggles between changing the alarm time and the clock time

Each button should be connected in series with a 2kΩ resistor between 3.3V and 0V, so that pressing the button switches between these two voltages.

Features

  • A digital clock, displayed in 24-hour format
  • An analogue clock, displaying the time in standard 12-hour format
  • Alarm can be changed using the minute and hour buttons
  • Time can be changed by holding the third button
  • Alarm will sound for one minute at the displayed time
  • Putting the alarm on its side will snooze the alarm if the alarm is going off (or just disable it if the alarm is not sounding)
Committer:
scat6490
Date:
Tue May 23 15:05:29 2017 +0000
Revision:
2:21c4f254786f
Parent:
1:a33f6ca5a5b3
Child:
3:6a328c7e9b1c
Screen showing time, with alarm at 9:00, Tuesday 4:05pm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
scat6490 0:4fd6c8718206 1
scat6490 0:4fd6c8718206 2 #include "stdio.h"
scat6490 0:4fd6c8718206 3 #include "mbed.h"
scat6490 0:4fd6c8718206 4 #include "SPI_TFT_ILI9341.h"
scat6490 0:4fd6c8718206 5 #include "string"
scat6490 0:4fd6c8718206 6 #include "Arial12x12.h"
scat6490 0:4fd6c8718206 7 #include "Arial24x23.h"
scat6490 0:4fd6c8718206 8 #include "Arial28x28.h"
scat6490 0:4fd6c8718206 9 #include "font_big.h"
scat6490 0:4fd6c8718206 10
scat6490 1:a33f6ca5a5b3 11 Ticker timer;
scat6490 1:a33f6ca5a5b3 12 DigitalOut output_high1(PTA4);
scat6490 1:a33f6ca5a5b3 13 DigitalOut output_high60(PTC8);
scat6490 2:21c4f254786f 14 DigitalOut buzzer(PTA12);
scat6490 1:a33f6ca5a5b3 15 DigitalIn input1(PTA5);
scat6490 1:a33f6ca5a5b3 16 DigitalIn input60(PTC9);
scat6490 1:a33f6ca5a5b3 17 Serial pc(USBTX,USBRX);
scat6490 0:4fd6c8718206 18 SPI_TFT_ILI9341 TFT(PTD2, PTD3, PTD1, PTD5, PTD0, PTA13,"TFT"); // mosi, miso, sclk, cs, reset, dc for frdmkl25z
scat6490 0:4fd6c8718206 19
scat6490 1:a33f6ca5a5b3 20 int minutes = 0;
scat6490 1:a33f6ca5a5b3 21 int hours = 0;
scat6490 1:a33f6ca5a5b3 22
scat6490 1:a33f6ca5a5b3 23 void timeup(){
scat6490 1:a33f6ca5a5b3 24 minutes = (minutes + 1)%60;
scat6490 1:a33f6ca5a5b3 25 if(minutes==0) (hours++)%24;
scat6490 1:a33f6ca5a5b3 26 }
scat6490 1:a33f6ca5a5b3 27
scat6490 0:4fd6c8718206 28 int main()
scat6490 0:4fd6c8718206 29 {
scat6490 0:4fd6c8718206 30 //pc.baud(115200);
scat6490 0:4fd6c8718206 31 wait(0.2);
scat6490 0:4fd6c8718206 32
scat6490 0:4fd6c8718206 33 TFT.set_orientation(1); // Make it horizontal
scat6490 0:4fd6c8718206 34 TFT.background(Red); // Set background to black
scat6490 0:4fd6c8718206 35 TFT.foreground(White); // Set text to white
scat6490 0:4fd6c8718206 36 TFT.cls(); // Clear screen
scat6490 0:4fd6c8718206 37 TFT.set_font((unsigned char*) Arial12x12); // Set the font
scat6490 0:4fd6c8718206 38
scat6490 0:4fd6c8718206 39 TFT.fillrect(0, 0, 320, 30, Red);
scat6490 0:4fd6c8718206 40 TFT.printf("Clock by Duncan and Kieran");
scat6490 0:4fd6c8718206 41
scat6490 0:4fd6c8718206 42 wait(0.1);
scat6490 0:4fd6c8718206 43
scat6490 0:4fd6c8718206 44 TFT.background(Black); // Set background to black
scat6490 0:4fd6c8718206 45 TFT.set_font((unsigned char*) Arial28x28); // Set the font
scat6490 1:a33f6ca5a5b3 46
scat6490 1:a33f6ca5a5b3 47 output_high1 = 1;
scat6490 1:a33f6ca5a5b3 48 output_high60 = 1;
scat6490 1:a33f6ca5a5b3 49 timer.attach(&timeup, 1);
scat6490 1:a33f6ca5a5b3 50
scat6490 1:a33f6ca5a5b3 51 while(1) {
scat6490 1:a33f6ca5a5b3 52 switch(input1){
scat6490 1:a33f6ca5a5b3 53 case 1:
scat6490 1:a33f6ca5a5b3 54 minutes = (minutes++)%60;
scat6490 1:a33f6ca5a5b3 55 wait(0.2);
scat6490 1:a33f6ca5a5b3 56 break;
scat6490 1:a33f6ca5a5b3 57 case 0:
scat6490 1:a33f6ca5a5b3 58 break;
scat6490 1:a33f6ca5a5b3 59
scat6490 1:a33f6ca5a5b3 60 }
scat6490 1:a33f6ca5a5b3 61
scat6490 1:a33f6ca5a5b3 62
scat6490 1:a33f6ca5a5b3 63 switch(input60){
scat6490 1:a33f6ca5a5b3 64 case 1:
scat6490 1:a33f6ca5a5b3 65 hours=hours++;
scat6490 1:a33f6ca5a5b3 66 wait(0.2);
scat6490 1:a33f6ca5a5b3 67 break;
scat6490 1:a33f6ca5a5b3 68 case 0:
scat6490 1:a33f6ca5a5b3 69 break;
scat6490 2:21c4f254786f 70 }
scat6490 2:21c4f254786f 71
scat6490 2:21c4f254786f 72 if (hours == 9 && minutes == 0)
scat6490 2:21c4f254786f 73 {
scat6490 2:21c4f254786f 74 buzzer = 1;
scat6490 2:21c4f254786f 75 } else
scat6490 2:21c4f254786f 76 {
scat6490 2:21c4f254786f 77 buzzer = 0;
scat6490 2:21c4f254786f 78 }
scat6490 1:a33f6ca5a5b3 79
scat6490 1:a33f6ca5a5b3 80 TFT.locate(50, 50);
scat6490 1:a33f6ca5a5b3 81 TFT.printf("%d:%d ",hours,minutes);
scat6490 0:4fd6c8718206 82 }
scat6490 0:4fd6c8718206 83
scat6490 0:4fd6c8718206 84 }