Guest User

Untitled

a guest
Feb 24th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.54 KB | None | 0 0
  1. #include <Time.h>
  2. #include <TimeLib.h>
  3.  
  4.  
  5.  
  6. // using 4 coomon cathode 7 segment display.....
  7. int digit1 = 9; //PWM Display pin 3 and 8 pins of segment display A1
  8. int digit2 = 10; //PWM same as above A2
  9. int digit3 = 11; //PWM same as above A3
  10. int digit4 = 12; //PWM same as above A4
  11.  
  12. //Pin mapping from Arduino to the ATmega DIP28 if you need it
  13. //http://www.arduino.cc/en/Hacking/PinMapping
  14. int segA = 2; //Display pin A
  15. int segB = 3; //Display pin b
  16. int segC = 4; //Display pin c
  17. int segD = 5; //Display pin d
  18. int segE = 6; //Display pin e
  19. int segF = 7; //Display pin f
  20. int segG = 8; //Display pin g
  21. int segDP = 13;// Display pin dot
  22.  
  23. //input pins for push buttons
  24. byte SW0 = A0;
  25. byte SW1 = A1;
  26. byte SW2 = A2;
  27.  
  28.  
  29. void setup() {
  30.  
  31.  
  32.  
  33. pinMode(segA, OUTPUT);
  34. pinMode(segB, OUTPUT);
  35. pinMode(segC, OUTPUT);
  36. pinMode(segD, OUTPUT);
  37. pinMode(segE, OUTPUT);
  38. pinMode(segF, OUTPUT);
  39. pinMode(segG, OUTPUT);
  40. pinMode(segDP, OUTPUT);
  41.  
  42. pinMode(digit1, OUTPUT);
  43. pinMode(digit2, OUTPUT);
  44. pinMode(digit3, OUTPUT);
  45. pinMode(digit4, OUTPUT);
  46.  
  47. Serial.begin(9600);
  48.  
  49. pinMode(SW0, INPUT); // for this use a slide switch
  50. pinMode(SW1, INPUT); // N.O. push button switch
  51. pinMode(SW2, INPUT); // N.O. push
  52.  
  53. digitalWrite(SW0, HIGH); // pull-ups on
  54. digitalWrite(SW1, HIGH);
  55. digitalWrite(SW2, HIGH);
  56.  
  57.  
  58.  
  59. }
  60.  
  61. void loop() {
  62. digitalWrite(segDP, LOW);
  63. int timp = hourFormat12()*100+minute();
  64. // display parts
  65. for(int i = 250 ; i >0 ; i--) {
  66. if (timp > 100) displayNumber01(timp);
  67. else displayNumber02(timp);
  68. }
  69.  
  70. for(int i = 250 ; i >0 ; i--) {
  71. if (timp > 100) displayNumber03(timp);
  72. else displayNumber04(timp);
  73. }
  74.  
  75. if (!(digitalRead(SW0))) set_time(); // hold the switch to set time
  76. }
  77.  
  78.  
  79. void set_time() {
  80. byte minutes1 = 0;
  81. byte hours1 = 0;
  82. byte minutes = minute();
  83. byte hours = hourFormat12();
  84.  
  85. while (!digitalRead(SW0)) // set time switch must be released to exit
  86. {
  87. minutes1=minutes;
  88. hours1=hours;
  89.  
  90.  
  91. while (!digitalRead(SW1)) // set minutes
  92. {
  93. minutes++;
  94.  
  95. if (minutes > 59) minutes = 0;
  96. for(int i = 20 ; i >0 ; i--) {
  97. int timp= hours*100+minutes;
  98. if (timp > 1000) displayNumber01(timp);
  99. else displayNumber02(timp);
  100. }
  101.  
  102.  
  103.  
  104.  
  105.  
  106. delay(150);
  107. }
  108.  
  109. while (!digitalRead(SW2)) // set hours
  110. {
  111. hours++;
  112.  
  113. if (hours > 12) hours = 01;
  114.  
  115. for(int i = 20 ; i >0 ; i--) {
  116. int timp= hours*100+minutes;
  117. if (timp > 1000) displayNumber01(timp);
  118. else displayNumber02(timp);
  119. }
  120.  
  121.  
  122.  
  123.  
  124.  
  125. delay(150);
  126. }
  127.  
  128.  
  129.  
  130. for(int i = 20 ; i >0 ; i--) {
  131. displayNumber01(hours*100+minutes);
  132. }
  133. setTime(hours,minutes,0,0,0,0);
  134. // delay(150);
  135.  
  136. }
  137.  
  138. }
  139.  
  140.  
  141.  
  142. void displayNumber01(int toDisplay) {
  143. #define DISPLAY_BRIGHTNESS 500
  144.  
  145. #define DIGIT_ON LOW
  146. #define DIGIT_OFF HIGH
  147.  
  148. for(int digit = 4 ; digit > 0 ; digit--) {
  149.  
  150. //Turn on a digit for a short amount of time
  151. switch(digit) {
  152. case 1:
  153. digitalWrite(digit1, DIGIT_ON);
  154. digitalWrite(segDP, LOW);
  155. break;
  156. case 2:
  157. digitalWrite(digit2, DIGIT_ON);
  158. digitalWrite(segDP, LOW);
  159. break;
  160. case 3:
  161. digitalWrite(digit3, DIGIT_ON);
  162. digitalWrite(segDP, LOW);
  163. break;
  164. case 4:
  165. digitalWrite(digit4, DIGIT_ON);
  166. digitalWrite(segDP, LOW);
  167. break;
  168. }
  169. lightNumber(toDisplay % 10);
  170. toDisplay /= 10;
  171. delayMicroseconds(DISPLAY_BRIGHTNESS);
  172.  
  173. //Turn off all segments
  174. lightNumber(10);
  175.  
  176. //Turn off all digits
  177. digitalWrite(digit1, DIGIT_OFF);
  178. digitalWrite(digit2, DIGIT_OFF);
  179. digitalWrite(digit3, DIGIT_OFF);
  180. digitalWrite(digit4, DIGIT_OFF);
  181. }
  182. }
  183.  
  184. void displayNumber02(int toDisplay) {
  185. #define DISPLAY_BRIGHTNESS 500
  186.  
  187. #define DIGIT_ON LOW
  188. #define DIGIT_OFF HIGH
  189.  
  190. for(int digit = 4 ; digit > 0 ; digit--) {
  191.  
  192. //Turn on a digit for a short amount of time
  193. switch(digit) {
  194. case 1:
  195. lightNumber(10);
  196. digitalWrite(segDP, LOW);
  197. break;
  198. case 2:
  199. digitalWrite(digit2, DIGIT_ON);
  200. digitalWrite(segDP, LOW);
  201. break;
  202. case 3:
  203. digitalWrite(digit3, DIGIT_ON);
  204. digitalWrite(segDP, LOW);
  205. break;
  206. case 4:
  207. digitalWrite(digit4, DIGIT_ON);
  208. digitalWrite(segDP, LOW);
  209. break;
  210. }
  211. lightNumber(toDisplay % 10);
  212. toDisplay /= 10;
  213. delayMicroseconds(DISPLAY_BRIGHTNESS);
  214.  
  215. //Turn off all segments
  216. lightNumber(10);
  217.  
  218. //Turn off all digits
  219. digitalWrite(digit1, DIGIT_OFF);
  220. digitalWrite(digit2, DIGIT_OFF);
  221. digitalWrite(digit3, DIGIT_OFF);
  222. digitalWrite(digit4, DIGIT_OFF);
  223. }
  224. }
  225.  
  226. void displayNumber03(int toDisplay) {
  227. #define DISPLAY_BRIGHTNESS 500
  228.  
  229. #define DIGIT_ON LOW
  230. #define DIGIT_OFF HIGH
  231.  
  232. for(int digit = 4 ; digit > 0 ; digit--) {
  233.  
  234. //Turn on a digit for a short amount of time
  235. switch(digit) {
  236. case 1:
  237. digitalWrite(digit1, DIGIT_ON);
  238. digitalWrite(segDP, HIGH);
  239. break;
  240. case 2:
  241. digitalWrite(digit2, DIGIT_ON);
  242. digitalWrite(segDP, HIGH);
  243. break;
  244. case 3:
  245. digitalWrite(digit3, DIGIT_ON);
  246. digitalWrite(segDP, HIGH);
  247. break;
  248. case 4:
  249. digitalWrite(digit4, DIGIT_ON);
  250. digitalWrite(segDP, HIGH);
  251. break;
  252. }
  253. lightNumber(toDisplay % 10);
  254. toDisplay /= 10;
  255. delayMicroseconds(DISPLAY_BRIGHTNESS);
  256.  
  257. //Turn off all segments
  258. lightNumber(10);
  259.  
  260. //Turn off all digits
  261. digitalWrite(digit1, DIGIT_OFF);
  262. digitalWrite(digit2, DIGIT_OFF);
  263. digitalWrite(digit3, DIGIT_OFF);
  264. digitalWrite(digit4, DIGIT_OFF);
  265. }
  266. }
  267.  
  268. void displayNumber04(int toDisplay) {
  269. #define DISPLAY_BRIGHTNESS 500
  270.  
  271. #define DIGIT_ON LOW
  272. #define DIGIT_OFF HIGH
  273.  
  274. for(int digit = 4 ; digit > 0 ; digit--) {
  275.  
  276. //Turn on a digit for a short amount of time
  277. switch(digit) {
  278. case 1:
  279. lightNumber(10);
  280. digitalWrite(segDP, HIGH);
  281. break;
  282. case 2:
  283. digitalWrite(digit2, DIGIT_ON);
  284. digitalWrite(segDP, HIGH);
  285. break;
  286. case 3:
  287. digitalWrite(digit3, DIGIT_ON);
  288. digitalWrite(segDP, HIGH);
  289. break;
  290. case 4:
  291. digitalWrite(digit4, DIGIT_ON);
  292. digitalWrite(segDP, HIGH);
  293. break;
  294. }
  295. lightNumber(toDisplay % 10);
  296. toDisplay /= 10;
  297. delayMicroseconds(DISPLAY_BRIGHTNESS);
  298.  
  299. //Turn off all segments
  300. lightNumber(10);
  301.  
  302. //Turn off all digits
  303. digitalWrite(digit1, DIGIT_OFF);
  304. digitalWrite(digit2, DIGIT_OFF);
  305. digitalWrite(digit3, DIGIT_OFF);
  306. digitalWrite(digit4, DIGIT_OFF);
  307. }
  308. }
  309.  
  310.  
  311. //Given a number, turns on those segments
  312. //If number == 10, then turn off number
  313. void lightNumber(int numberToDisplay) {
  314.  
  315. #define SEGMENT_ON HIGH
  316. #define SEGMENT_OFF LOW
  317.  
  318. switch (numberToDisplay){
  319.  
  320. case 0:
  321. digitalWrite(segA, SEGMENT_ON);
  322. digitalWrite(segB, SEGMENT_ON);
  323. digitalWrite(segC, SEGMENT_ON);
  324. digitalWrite(segD, SEGMENT_ON);
  325. digitalWrite(segE, SEGMENT_ON);
  326. digitalWrite(segF, SEGMENT_ON);
  327. digitalWrite(segG, SEGMENT_OFF);
  328. break;
  329.  
  330. case 1:
  331. digitalWrite(segA, SEGMENT_OFF);
  332. digitalWrite(segB, SEGMENT_ON);
  333. digitalWrite(segC, SEGMENT_ON);
  334. digitalWrite(segD, SEGMENT_OFF);
  335. digitalWrite(segE, SEGMENT_OFF);
  336. digitalWrite(segF, SEGMENT_OFF);
  337. digitalWrite(segG, SEGMENT_OFF);
  338. break;
  339.  
  340. case 2:
  341. digitalWrite(segA, SEGMENT_ON);
  342. digitalWrite(segB, SEGMENT_ON);
  343. digitalWrite(segC, SEGMENT_OFF);
  344. digitalWrite(segD, SEGMENT_ON);
  345. digitalWrite(segE, SEGMENT_ON);
  346. digitalWrite(segF, SEGMENT_OFF);
  347. digitalWrite(segG, SEGMENT_ON);
  348. break;
  349.  
  350. case 3:
  351. digitalWrite(segA, SEGMENT_ON);
  352. digitalWrite(segB, SEGMENT_ON);
  353. digitalWrite(segC, SEGMENT_ON);
  354. digitalWrite(segD, SEGMENT_ON);
  355. digitalWrite(segE, SEGMENT_OFF);
  356. digitalWrite(segF, SEGMENT_OFF);
  357. digitalWrite(segG, SEGMENT_ON);
  358. break;
  359.  
  360. case 4:
  361. digitalWrite(segA, SEGMENT_OFF);
  362. digitalWrite(segB, SEGMENT_ON);
  363. digitalWrite(segC, SEGMENT_ON);
  364. digitalWrite(segD, SEGMENT_OFF);
  365. digitalWrite(segE, SEGMENT_OFF);
  366. digitalWrite(segF, SEGMENT_ON);
  367. digitalWrite(segG, SEGMENT_ON);
  368. break;
  369.  
  370. case 5:
  371. digitalWrite(segA, SEGMENT_ON);
  372. digitalWrite(segB, SEGMENT_OFF);
  373. digitalWrite(segC, SEGMENT_ON);
  374. digitalWrite(segD, SEGMENT_ON);
  375. digitalWrite(segE, SEGMENT_OFF);
  376. digitalWrite(segF, SEGMENT_ON);
  377. digitalWrite(segG, SEGMENT_ON);
  378. break;
  379.  
  380. case 6:
  381. digitalWrite(segA, SEGMENT_ON);
  382. digitalWrite(segB, SEGMENT_OFF);
  383. digitalWrite(segC, SEGMENT_ON);
  384. digitalWrite(segD, SEGMENT_ON);
  385. digitalWrite(segE, SEGMENT_ON);
  386. digitalWrite(segF, SEGMENT_ON);
  387. digitalWrite(segG, SEGMENT_ON);
  388. break;
  389.  
  390. case 7:
  391. digitalWrite(segA, SEGMENT_ON);
  392. digitalWrite(segB, SEGMENT_ON);
  393. digitalWrite(segC, SEGMENT_ON);
  394. digitalWrite(segD, SEGMENT_OFF);
  395. digitalWrite(segE, SEGMENT_OFF);
  396. digitalWrite(segF, SEGMENT_OFF);
  397. digitalWrite(segG, SEGMENT_OFF);
  398. break;
  399.  
  400. case 8:
  401. digitalWrite(segA, SEGMENT_ON);
  402. digitalWrite(segB, SEGMENT_ON);
  403. digitalWrite(segC, SEGMENT_ON);
  404. digitalWrite(segD, SEGMENT_ON);
  405. digitalWrite(segE, SEGMENT_ON);
  406. digitalWrite(segF, SEGMENT_ON);
  407. digitalWrite(segG, SEGMENT_ON);
  408. break;
  409.  
  410. case 9:
  411. digitalWrite(segA, SEGMENT_ON);
  412. digitalWrite(segB, SEGMENT_ON);
  413. digitalWrite(segC, SEGMENT_ON);
  414. digitalWrite(segD, SEGMENT_ON);
  415. digitalWrite(segE, SEGMENT_OFF);
  416. digitalWrite(segF, SEGMENT_ON);
  417. digitalWrite(segG, SEGMENT_ON);
  418. break;
  419.  
  420. // all segment are ON
  421. case 10:
  422. digitalWrite(segA, SEGMENT_OFF);
  423. digitalWrite(segB, SEGMENT_OFF);
  424. digitalWrite(segC, SEGMENT_OFF);
  425. digitalWrite(segD, SEGMENT_OFF);
  426. digitalWrite(segE, SEGMENT_OFF);
  427. digitalWrite(segF, SEGMENT_OFF);
  428. digitalWrite(segG, SEGMENT_OFF);
  429. break;
  430.  
  431. }
  432. }
Add Comment
Please, Sign In to add comment