cmk20

Arduino Gps Clock

Jan 7th, 2016
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.25 KB | None | 0 0
  1. #include <TinyGPS++.h>
  2. TinyGPSPlus gps;
  3. int d1a = 12;
  4. int d1b = 11;
  5. int d1c = 10;
  6. int d1d = 9;
  7. int d2a = 7;
  8. int d2b = 6;
  9. int d2c = 5;
  10. int d2d = 4;
  11. int d3a = 22;
  12. int d3b = 23;
  13. int d3c = 24;
  14. int d3d = 25;
  15. int d4a = 26;
  16. int d4b = 27;
  17. int d4c = 28;
  18. int d4d = 29;
  19. int ampmled = 30;
  20. int hr = 0;
  21. int mn = 0;
  22. int timezonehr = -6; //Timezone hour offset
  23. int timezonemn = 0; //Timezone minute offset
  24. int numbers[][4] = //Display codes
  25. {
  26. {0,0,0,0}, // 0
  27. {0,0,0,1}, // 1
  28. {1,0,0,0}, // 2
  29. {1,0,0,1}, // 3
  30. {0,1,0,0}, // 4
  31. {0,1,0,1}, // 5
  32. {1,1,0,0}, // 6
  33. {1,1,0,1}, // 7
  34. {0,0,1,0}, // 8
  35. {0,0,1,1}, // 9
  36. {1,1,1,1} // Clear
  37. };
  38. int num[4];
  39. void disp(int dispnum,int numtodisplay){
  40. for (int x = 0; x < 4; x++){
  41. num[x] = numbers[numtodisplay][x];
  42. }
  43. if (dispnum == 1){
  44. if (num[0] == 1){
  45. digitalWrite(d1a, HIGH);
  46. }
  47. else{
  48. digitalWrite(d1a, LOW);
  49. }
  50. if (num[1] == 1){
  51. digitalWrite(d1b, HIGH);
  52. }
  53. else{
  54. digitalWrite(d1b, LOW);
  55. }
  56. if (num[2] == 1){
  57. digitalWrite(d1c, HIGH);
  58. }
  59. else{
  60. digitalWrite(d1c, LOW);
  61. }
  62. if (num[3] == 1){
  63. digitalWrite(d1d, HIGH);
  64. }
  65. else{
  66. digitalWrite(d1d, LOW);
  67. }
  68. }
  69. if (dispnum == 2){
  70. if (num[0] == 1){
  71. digitalWrite(d2a, HIGH);
  72. }
  73. else{
  74. digitalWrite(d2a, LOW);
  75. }
  76. if (num[1] == 1){
  77. digitalWrite(d2b, HIGH);
  78. }
  79. else{
  80. digitalWrite(d2b, LOW);
  81. }
  82. if (num[2] == 1){
  83. digitalWrite(d2c, HIGH);
  84. }
  85. else{
  86. digitalWrite(d2c, LOW);
  87. }
  88. if (num[3] == 1){
  89. digitalWrite(d2d, HIGH);
  90. }
  91. else{
  92. digitalWrite(d2d, LOW);
  93. }
  94. }
  95. if (dispnum == 3){
  96. if (num[0] == 1){
  97. digitalWrite(d3a, HIGH);
  98. }
  99. else{
  100. digitalWrite(d3a, LOW);
  101. }
  102. if (num[1] == 1){
  103. digitalWrite(d3b, HIGH);
  104. }
  105. else{
  106. digitalWrite(d3b, LOW);
  107. }
  108. if (num[2] == 1){
  109. digitalWrite(d3c, HIGH);
  110. }
  111. else{
  112. digitalWrite(d3c, LOW);
  113. }
  114. if (num[3] == 1){
  115. digitalWrite(d3d, HIGH);
  116. }
  117. else{
  118. digitalWrite(d3d, LOW);
  119. }
  120. }
  121. if (dispnum == 4){
  122. if (num[0] == 1){
  123. digitalWrite(d4a, HIGH);
  124. }
  125. else{
  126. digitalWrite(d4a, LOW);
  127. }
  128. if (num[1] == 1){
  129. digitalWrite(d4b, HIGH);
  130. }
  131. else{
  132. digitalWrite(d4b, LOW);
  133. }
  134. if (num[2] == 1){
  135. digitalWrite(d4c, HIGH);
  136. }
  137. else{
  138. digitalWrite(d4c, LOW);
  139. }
  140. if (num[3] == 1){
  141. digitalWrite(d4d, HIGH);
  142. }
  143. else{
  144. digitalWrite(d4d, LOW);
  145. }
  146. }
  147. }
  148. void setup() {
  149. // put your setup code here, to run once:
  150. pinMode(d1a, OUTPUT);
  151. pinMode(d1b, OUTPUT);
  152. pinMode(d1c, OUTPUT);
  153. pinMode(d1d, OUTPUT);
  154. pinMode(d2a, OUTPUT);
  155. pinMode(d2b, OUTPUT);
  156. pinMode(d2c, OUTPUT);
  157. pinMode(d2d, OUTPUT);
  158. pinMode(d3a, OUTPUT);
  159. pinMode(d3b, OUTPUT);
  160. pinMode(d3c, OUTPUT);
  161. pinMode(d3d, OUTPUT);
  162. pinMode(d4a, OUTPUT);
  163. pinMode(d4b, OUTPUT);
  164. pinMode(d4c, OUTPUT);
  165. pinMode(d4d, OUTPUT);
  166. pinMode(ampmled, OUTPUT);
  167. Serial.begin(9600);
  168. Serial3.begin(9600);
  169. }
  170. uint32_t timer = millis();
  171. void loop() {
  172. // put your main code here, to run repeatedly:
  173. while (Serial3.available()) {
  174. gps.encode(Serial3.read());
  175. }
  176. if (timer > millis()) timer = millis();
  177. if (millis() - timer > 500) {
  178. timer = millis();
  179. hr = gps.time.hour();
  180. mn = gps.time.minute();
  181. //hr = 0; //DEBUG
  182. //mn = 0; //DEBUG
  183. mn = mn + timezonemn;
  184. if (mn > 59) {
  185. mn = mn - 60;
  186. hr = hr + 1;
  187. }
  188. else {
  189. if (mn < 0) {
  190. mn = mn + 60;
  191. hr = hr - 1;
  192. }
  193. }
  194. hr = hr + timezonehr;
  195. if (hr > 23) {
  196. hr = hr - 24;
  197. }
  198. else {
  199. if (hr < 0) {
  200. hr = hr + 24;
  201. }
  202. }
  203. if (hr > 12) {
  204. hr = hr - 12;
  205. digitalWrite(ampmled, LOW);
  206. }
  207. else {
  208. digitalWrite(ampmled, HIGH);
  209. }
  210. if (hr == 0) {
  211. hr = 12;
  212. }
  213. disp(1, int(hr / 10));
  214. disp(2, int(hr % 10));
  215. disp(3, int(mn / 10));
  216. disp(4, int(mn % 10));
  217. }
  218. }
Advertisement
Add Comment
Please, Sign In to add comment