fork(3) download
  1. /**************************************
  2. Built and coded By Hassan Ali
  3. Started on July 11th 2012
  4.  
  5. Arduino LCD clock
  6. using milliseconds to check time
  7. no delays are used for time tracking
  8. only in button pressing.
  9. this way buttons can always be read.
  10. ***************************************/
  11.  
  12. // http://w...content-available-to-author-only...e.com
  13. // http://w...content-available-to-author-only...x.com
  14.  
  15. //Used for this particular LCD with these pin specific pin numbers.
  16. //http://d...content-available-to-author-only...t.net/images/products/00255-03-L.jpg
  17. //http://w...content-available-to-author-only...n.com/datasheets/LCD/GDM1602K.pdf
  18.  
  19. //**********************************
  20.  
  21.  
  22.  
  23. //include lcd library
  24. #include <LiquidCrystal.h>
  25.  
  26. /*Connect LCD to Arduino:
  27. LCD -> Arduino
  28. --------------------------
  29. 1|VSS| -> Arduino GND
  30. 2|VDD| -> Arduino +5v
  31. 3|VO | -> Arduino GND pin + Resistor or Potentiometer
  32. 4|RS | -> Arduino pin 12
  33. 5|RW | -> Arduino GND - pin can be conected to 11. But Ground was used here.
  34. 6|E | -> Arduino pin 10
  35. 7|D0 | -> Arduino - Not Connected
  36. 8|D1 | -> Arduino - Not Connected
  37. 9|D2 | -> Arduino - Not Connected
  38. 10|D3 | -> Arduino - Not Connected
  39. 11|D4 | -> Arduino pin 5
  40. 12|D5 | -> Arduino pin 4
  41. 13|D6 | -> Arduino pin 3
  42. 14|D7 | -> Arduino pin 2
  43. 15|A | -> Arduino Pin 13 + Resistor (Backlight power)
  44. 16|K | -> Arduino GND (Backlight ground)
  45. */
  46.  
  47.  
  48. //create object
  49. //lcd(RS, E, D4,D5,D6,D7);
  50. LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
  51. const int backlight =13;
  52. const int buttonHr = 7; //digital pin used as hour adjustment input
  53. const int buttonMin = 8; //digital pin used as min adjustment input
  54.  
  55. int secs =0;
  56. int secs2 = 0;
  57. int mins = -1;
  58. int hrs = 0;
  59. boolean isAM = true;
  60.  
  61. int milliDivSecs = 1000;
  62. int milliDivMins = 60000;
  63. int milliDivHrs = 360000;
  64.  
  65. unsigned long prevmillis=0;
  66.  
  67. int interval = 1000;
  68.  
  69.  
  70. void setup(){
  71. pinMode(backlight, OUTPUT);
  72. pinMode(buttonHr, INPUT);
  73. pinMode(buttonMin, INPUT);
  74.  
  75. digitalWrite(backlight, HIGH);
  76. lcd.begin(16,2); //set number of cols and rows
  77.  
  78. //print out LCD clock duisplay
  79. lcd.setCursor(5,0);
  80. lcd.print("12:00:00 AM");
  81.  
  82. Serial.begin(9600);
  83. }
  84.  
  85.  
  86. void loop(){
  87.  
  88. unsigned long currmillis = millis();
  89.  
  90. //detect button pressing
  91. if(digitalRead(buttonHr) == HIGH){
  92. delay(25);
  93. hrs = hrs+1;
  94. updateHrs();
  95.  
  96. //update AMPM on button press
  97. if(hrs==12){
  98. updateAMPM();
  99. }
  100.  
  101. delay(400);
  102. }
  103. if(digitalRead(buttonMin) == HIGH){
  104. delay(25);
  105. mins = mins + 1;
  106. //Serial.println(mins);
  107. updateMin();
  108. delay(400);
  109. }
  110.  
  111. if(currmillis-prevmillis > 999){
  112. //lcd.clear();
  113. prevmillis =currmillis;
  114. if(secs<10){
  115. lcd.setCursor(12,0);
  116. lcd.print(secs);
  117. lcd.setCursor(11,0);
  118. lcd.print(0);
  119. }
  120. else{
  121. lcd.setCursor(11,0);
  122. lcd.print(secs);
  123. }
  124.  
  125. //display minutes
  126. if(secs == 0){
  127. mins = mins+1;
  128. updateMin();
  129. }
  130.  
  131.  
  132. //get new seconds from system time
  133. secs = (millis()/milliDivSecs)%60; // divide by 1000 and mod by 60 gives seconds from milliseconds
  134.  
  135. }
  136.  
  137. }
  138.  
  139. //update min function
  140. //calls the update am apm funciton and the update hours functions.
  141. void updateMin(){
  142. if(mins > 59){
  143. hrs = hrs+1;
  144. updateHrs(); //update hours then
  145. if(hrs==11 && mins >59){
  146. updateAMPM();
  147. }
  148. mins = 0; //reset mins
  149.  
  150. lcd.setCursor(8,0);
  151. lcd.print("00");
  152. }
  153. if(mins < 10){
  154. lcd.setCursor(9,0);
  155. }
  156. else{
  157. lcd.setCursor(8,0);
  158. }
  159. lcd.print(mins);
  160. }
  161.  
  162. //update hour function
  163. void updateHrs(){
  164. //display hours - needs fixing for am pm
  165.  
  166. if(hrs> 12){
  167. //reset to 1
  168. hrs = 1;
  169. }
  170. if(hrs< 10){
  171. lcd.setCursor(5,0);
  172. lcd.print(" ");
  173. lcd.setCursor(6,0);
  174. }
  175. else{
  176. lcd.setCursor(5,0);
  177. }
  178. lcd.print(hrs);
  179.  
  180. }
  181.  
  182. void updateAMPM(){
  183. if(isAM){
  184. isAM = false;
  185. lcd.setCursor(14,0);
  186. lcd.print("PM");
  187. }
  188. else{
  189. isAM = true;
  190. lcd.setCursor(14,0);
  191. lcd.print("AM");
  192. }
  193. }
Not running #stdin #stdout 0s 0KB
stdin
Standard input is empty
stdout
Standard output is empty