{"id":34,"date":"2012-03-01T11:50:25","date_gmt":"2012-03-01T10:50:25","guid":{"rendered":"http:\/\/www.unicoda.com\/?p=34"},"modified":"2016-09-29T12:11:26","modified_gmt":"2016-09-29T10:11:26","slug":"horloge-binaire-via-arduino-lol-shield","status":"publish","type":"post","link":"https:\/\/www.unicoda.com\/?p=34","title":{"rendered":"Horloge Binaire Via Arduino + LoL Shield"},"content":{"rendered":"<p>Aujourd&rsquo;hui, premier mars, je partage avec vous le code permettant l&rsquo;affichage d&rsquo;une horloge binaire sur votre LoL Shield contr\u00f4l\u00e9 par Arduino. Cette horloge se divise en trois colonnes correspondant bien \u00e9videmment aux heures, minutes et secondes. Chaque colonne fait deux leds de large. Pour \u00eatre correct, l&rsquo;heure doit \u00eatre initialis\u00e9e \u00e0 chaque fois que l&rsquo;on relance le Arduino et il faut alors renvoyer le programme sur celui-ci. Il serait possible de synchroniser automatiquement l&rsquo;horloge en se servant d&rsquo;un shield Ethernet pour r\u00e9cup\u00e9rer l&rsquo;heure.<\/p>\n<p>Quelques mots sur la fonction millis(). Cette fonction renvoie le nombre de millisecondes \u00e9coul\u00e9es depuis que le Arduino a commenc\u00e9 \u00e0 ex\u00e9cuter le programme en cours. Ce nombre revient \u00e0 0 apr\u00e8s environ 50 jours. Ainsi, cette fonction va nous permettre d&rsquo;incr\u00e9menter les secondes. Nous utiliserons le code suivant:<\/p>\n<pre>static unsigned long lastTick = 0;\r\n\r\nif (millis() \u2013 lastTick &gt;= 1000) {\r\n lastTick = millis();\r\n seconde++;}<\/pre>\n<p>Si le nombre de millisecondes depuis le d\u00e9but du programme moins le moment du dernier test est sup\u00e9rieur ou \u00e9gale \u00e0 1 000, nous stockons le nombre de ms depuis le d\u00e9but du programme dans lastTick et nous incr\u00e9mentons les secondes, dans le cas contraire, on ne change rien. Ainsi, toutes les 1 000 ms, les secondes seront incr\u00e9ment\u00e9es.<\/p>\n<p>Pour la fonction LedSign::Set, la syntaxe est la suivante: LedSign::Set( C, L, E); . Avec C, le num\u00e9ro de la colonne de la led concern\u00e9e, L le num\u00e9ro de la ligne et E l&rsquo;\u00e9tat: 0 \u00e9teinte, 1 allum\u00e9e. On a C = {0&#8230;13}, L = {0&#8230;8} et E = {0, 1}.<\/p>\n<p>Voil\u00e0 donc le code associ\u00e9; la fa\u00e7on dont il est pr\u00e9sent\u00e9 ne me satisfait pas du tout. Pas \u00e9vident d&rsquo;afficher clairement du code avec WordPress&#8230;Donc finalement, j&rsquo;ai trouv\u00e9 un autre moyen, fournir le code directement dans un fichier texte: <a href=\"http:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/03\/horloge_binaire_LoLShield.txt\">Horloge Binaire LoLShield<\/a><a href=\"http:\/\/www.unicoda.com\/wp-content\/uploads\/2012\/03\/horloge_binaire_LoLShield.txt\"><br \/>\n<\/a><\/p>\n<pre>#include &lt;avr\/pgmspace.h&gt;\u00a0 \/\/AVR library for writing to ROM\r\n#include &lt;Charliplexing.h&gt; \/\/Imports the library, which needs to be\r\n\/\/Initialized in setup.\r\n\r\nvoid setup() {\r\n  LedSign::Init();\u00a0 \/\/Initializes the screen\r\n}\r\n\r\nint seconde = 42;\r\nint minute = 42;\r\nint heure = 11;\r\nint reste_heure,reste_minute, reste_seconde;\r\n\r\nvoid loop() {\r\n static unsigned long lastTick = 0;\r\n\r\n \/\/Incr\u00e9mentation des secondes\r\n if (millis() - lastTick &gt;= 1000) {\r\n   lastTick = millis();\r\n   seconde++;\r\n }\r\n\r\n\r\n\/*Remise \u00e0 z\u00e9ro des variables si celles-ci atteignent ou d\u00e9passent 60 pour les minutes et les secondes et 12 pour les heures.*\/\r\n if(seconde &gt;= 60) {\r\n   minute++;\r\n   seconde = 0;\r\n }\r\n\r\nif(minute &gt;= 60) {\r\n heure++;\r\n minute = 0;\r\n}\r\n\r\nif(heure &gt;= 12) {\r\n heure = 0;\r\n}\r\n\r\n\/\/calcul des leds allum\u00e9es pour les heures\r\nif(heure\/8&gt;=1) {\r\n  LedSign::Set( 1, 5, 1);\r\n  LedSign::Set( 2, 5, 1);\r\n  reste_heure=heure%8;\r\n} else {\r\n  LedSign::Set( 1, 5, 0);\r\n  LedSign::Set( 2, 5, 0);\r\n  reste_heure=heure;\r\n}\r\n\r\n if(reste_heure\/4&gt;=1) {\r\n  LedSign::Set( 1, 6, 1);\r\n  LedSign::Set( 2, 6, 1);\r\n  reste_heure=reste_heure%4;\r\n } else {\r\n  LedSign::Set( 1, 6, 0);\r\n  LedSign::Set( 2, 6, 0);\r\n }\r\n\r\n if(reste_heure\/2&gt;=1) {\r\n  LedSign::Set( 1, 7, 1);\r\n  LedSign::Set( 2, 7, 1);\r\n  reste_heure=reste_heure%2;\r\n } else {\r\n  LedSign::Set( 1, 7, 0);\r\n  LedSign::Set( 2, 7, 0);\r\n }\r\n\r\n if(reste_heure\/1&gt;=1) {\r\n  LedSign::Set( 1, 8, 1);\r\n  LedSign::Set( 2, 8, 1);\r\n  reste_heure=reste_heure%1;\r\n } else {\r\n  LedSign::Set( 1, 8, 0);\r\n  LedSign::Set( 2, 8, 0);\r\n }\r\n\r\n\/\/calcul des leds allum\u00e9es pour les minutes\r\n if((minute\/32)&gt;=1) {\r\n  LedSign::Set( 6, 3, 1);\r\n  LedSign::Set( 7, 3, 1);\r\n  reste_minute=minute%32;\r\n } else {\r\n  LedSign::Set( 6, 3, 0);\r\n  LedSign::Set( 7, 3, 0);\r\n  reste_minute=minute;\r\n}\r\n\r\n if((reste_minute\/16)&gt;=1) {\r\n  LedSign::Set( 6, 4, 1);\r\n  LedSign::Set( 7, 4, 1);\r\n  reste_minute=reste_minute%16;\r\n } else {\r\n  LedSign::Set( 6, 4, 0);\r\n  LedSign::Set( 7, 4, 0);\r\n }\r\n\r\n if((reste_minute\/8)&gt;=1) {LedSign::Set( 6, 5, 1); LedSign::Set( 7, 5, 1);reste_minute=reste_minute%8;} else {LedSign::Set( 6, 5, 0); LedSign::Set( 7, 5, 0);}\r\n\r\n if((reste_minute\/4)&gt;=1) {LedSign::Set( 6, 6, 1); LedSign::Set( 7, 6, 1);reste_minute=reste_minute%4;} else {LedSign::Set( 6, 6, 0); LedSign::Set( 7, 6, 0);}\r\n\r\n if((reste_minute\/2)&gt;=1) {LedSign::Set( 6, 7, 1); LedSign::Set( 7, 7, 1);reste_minute=reste_minute%2;} else {LedSign::Set( 6, 7, 0); LedSign::Set( 7, 7, 0);}\r\n\r\n if((reste_minute\/1)&gt;=1) {LedSign::Set( 6, 8, 1); LedSign::Set( 7, 8, 1);reste_minute=reste_minute%1;} else {LedSign::Set( 6, 8, 0); LedSign::Set( 7, 8, 0);}\r\n\r\n\r\n\r\n\r\n\/\/calcul des leds allum\u00e9es pour les secondes\r\n if((seconde\/32)&gt;=1) {LedSign::Set( 11, 3, 1); LedSign::Set( 12, 3, 1);reste_seconde=seconde%32;} else {LedSign::Set( 11, 3, 0); LedSign::Set( 12, 3, 0);reste_seconde=seconde;}\r\n if((reste_seconde\/16)&gt;=1) {LedSign::Set( 11, 4, 1); LedSign::Set( 12, 4, 1);reste_seconde=reste_seconde%16;} else {LedSign::Set( 11, 4, 0); LedSign::Set( 12, 4, 0);}\r\n if((reste_seconde\/8)&gt;=1) {LedSign::Set( 11, 5, 1); LedSign::Set( 12, 5, 1);reste_seconde=reste_seconde%8;} else {LedSign::Set( 11, 5, 0); LedSign::Set( 12, 5, 0);}\r\n if((reste_seconde\/4)&gt;=1) {LedSign::Set( 11, 6, 1); LedSign::Set( 12, 6, 1);reste_seconde=reste_seconde%4;} else {LedSign::Set( 11, 6, 0); LedSign::Set( 12, 6, 0);}\r\n if((reste_seconde\/2)&gt;=1) {LedSign::Set( 11, 7, 1); LedSign::Set( 12, 7, 1);reste_seconde=reste_seconde%2;} else {LedSign::Set( 11, 7, 0); LedSign::Set( 12, 7, 0);}\r\n if((reste_seconde\/1)&gt;=1) {LedSign::Set( 11, 8, 1); LedSign::Set( 12, 8, 1);reste_seconde=reste_seconde%1;} else {LedSign::Set( 11, 8, 0); LedSign::Set( 12, 8, 0);}\r\n\r\n}<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Aujourd&rsquo;hui, premier mars, je partage avec vous le code permettant l&rsquo;affichage d&rsquo;une horloge binaire sur votre LoL Shield contr\u00f4l\u00e9 par Arduino. Cette horloge se divise en trois colonnes correspondant bien \u00e9videmment aux heures, minutes et secondes. Chaque colonne fait deux leds de large. Pour \u00eatre correct, l&rsquo;heure doit \u00eatre initialis\u00e9e \u00e0 chaque fois que l&rsquo;on &hellip; <a href=\"https:\/\/www.unicoda.com\/?p=34\" class=\"more-link\">Continuer la lecture<span class=\"screen-reader-text\"> de &laquo;&nbsp;Horloge Binaire Via Arduino + LoL Shield&nbsp;&raquo;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[238,51],"class_list":["post-34","post","type-post","status-publish","format-standard","hentry","category-arduino","category-code","tag-arduino","tag-lol-shield"],"_links":{"self":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/34","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=34"}],"version-history":[{"count":25,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions"}],"predecessor-version":[{"id":2333,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=\/wp\/v2\/posts\/34\/revisions\/2333"}],"wp:attachment":[{"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=34"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=34"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.unicoda.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=34"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}