{"id":5299,"date":"2022-12-07T01:29:44","date_gmt":"2022-12-07T00:29:44","guid":{"rendered":"https:\/\/www.breizh56.fr\/crepp2024\/?page_id=5299"},"modified":"2022-12-19T10:46:17","modified_gmt":"2022-12-19T09:46:17","slug":"ssd1306-affichage-oled-i2c-_-c-arduino-_-version-2022","status":"publish","type":"page","link":"https:\/\/www.breizh56.fr\/crepp2024\/ssd1306-affichage-oled-i2c-_-c-arduino-_-version-2022\/","title":{"rendered":"SSD1306 affichage OLED i2c  _ C Arduino _ version 2022"},"content":{"rendered":"<p>petit <a href=\"https:\/\/www.amazon.fr\/s?k=OLED+SSD1306&amp;i=electronics&amp;__mk_fr_FR=\u00c5M\u00c5\u017d\u00d5\u00d1&amp;ref=nb_sb_noss\">\u00e9cran Oled<\/a>, type SSD1306, largeur 128c x longueur 64c, \u00a0i2c, noir et blanc permettant d&rsquo;afficher des textes, des images..<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5302 size-medium\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/SSD1306_128x64-271x300.jpg\" alt=\"\" width=\"271\" height=\"300\" srcset=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/SSD1306_128x64-271x300.jpg 271w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/SSD1306_128x64-768x849.jpg 768w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/SSD1306_128x64-926x1024.jpg 926w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/SSD1306_128x64.jpg 1745w\" sizes=\"(max-width: 271px) 100vw, 271px\" \/><\/p>\n<p>On peut utliser l&rsquo;Oled soit en mode <strong>SPI<\/strong>, soit en mode <strong><a href=\"https:\/\/www.breizh56.fr\/crepp2024\/technique\/informatique\/cartes-embarquees\/i2c\/\" target=\"_blank\" rel=\"noopener noreferrer\">I2C<\/a><\/strong>.<\/p>\n<p>nous utiliserons le <a href=\"https:\/\/www.breizh56.fr\/crepp2024\/technique\/informatique\/cartes-embarquees\/i2c\/\" target=\"_blank\" rel=\"noopener noreferrer\"><strong>mode I2C<\/strong><\/a> et cela compl\u00e8tera la partie micropython vue en <a href=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-admin\/post.php?post=1941&amp;action=edit\" target=\"_blank\" rel=\"noopener noreferrer\">novembre 2018<\/a>.<\/p>\n<p>4 broches:<\/p>\n<ul>\n<li>GND<\/li>\n<li>VCC 3,3v \/ 5v<\/li>\n<li><strong>SCL &#8211;&gt; A5 <a href=\"https:\/\/www.breizh56.fr\/crepp2024\/technique\/informatique\/cartes-embarquees\/i2c\/\">communication i2c<\/a><\/strong><\/li>\n<li><strong>SDA&#8211;&gt; A4 <a href=\"https:\/\/www.breizh56.fr\/crepp2024\/technique\/informatique\/cartes-embarquees\/i2c\/\">communication i2c<\/a><\/strong><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-5303 size-full\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_Arduino_A4A5.jpg\" alt=\"\" width=\"735\" height=\"680\" srcset=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_Arduino_A4A5.jpg 735w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_Arduino_A4A5-300x278.jpg 300w\" sizes=\"(max-width: 735px) 100vw, 735px\" \/><\/p>\n<p>&nbsp;<\/p>\n<p>plusieurs biblioth\u00e8ques sont disponibles pour utiliser l&rsquo;oled SSD1306 dont \u00a0<a href=\"https:\/\/github.com\/adafruit\/Adafruit_SSD1306\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">adafruit_SSD1306.h<\/a>.<\/p>\n<p>Pour changer, j&rsquo;utiliserai la biblioth\u00e8que de <a href=\"http:\/\/www.rinkydinkelectronics.com\/library.php?id=79\" target=\"_blank\" rel=\"noopener noreferrer\">rinky-dink-electronics:<\/a> <a href=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OLED_I2C.zip\">OLED_I2C.zip<\/a> bien <a href=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OLED_I2C_Rinky-Dink.pdf\" target=\"_blank\" rel=\"noopener noreferrer\">document\u00e9e <\/a> et simple d&rsquo;utilisation:<\/p>\n<p>Pour installer la biblioth\u00e8que\u00a0 <strong>OLED_I2C.zip<\/strong>\u00a0<b> <\/b>dans l&rsquo;IDE Arduino:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5346\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/ArduinoAjoutbibZip.jpg\" alt=\"\" width=\"802\" height=\"332\" srcset=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/ArduinoAjoutbibZip.jpg 802w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/ArduinoAjoutbibZip-300x124.jpg 300w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/ArduinoAjoutbibZip-768x318.jpg 768w\" sizes=\"(max-width: 802px) 100vw, 802px\" \/><\/p>\n<p>Il y a 3 possibilit\u00e9s de cablage de l&rsquo;oled sur le shield Arduino mais dans les 3 cas <strong>SDA&#8211;&gt;A4 et SCL&#8211;&gt;A5<\/strong>:<\/p>\n<ol>\n<li>utilisation des broches I2C du ShieldAduino<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5352\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_2.jpg\" alt=\"\" width=\"4032\" height=\"3024\" srcset=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_2.jpg 4032w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_2-300x225.jpg 300w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_2-768x576.jpg 768w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_2-1024x768.jpg 1024w\" sizes=\"(max-width: 4032px) 100vw, 4032px\" \/><\/li>\n<li>\u00a0ou on compl\u00e8te les broches A4 et A5 du shield Arduino<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5354\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_1.jpg\" alt=\"\" width=\"3024\" height=\"4032\" srcset=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_1.jpg 3024w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_1-225x300.jpg 225w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OledShield_1-768x1024.jpg 768w\" sizes=\"(max-width: 3024px) 100vw, 3024px\" \/><\/li>\n<li>enfin, un mixte montrant l&rsquo;utilisation des broches A4 et A5<\/li>\n<\/ol>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-5394\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_A4A5.jpg\" alt=\"\" width=\"833\" height=\"623\" srcset=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_A4A5.jpg 833w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_A4A5-300x224.jpg 300w, https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Oled_A4A5-768x574.jpg 768w\" sizes=\"(max-width: 833px) 100vw, 833px\" \/><\/p>\n<p>dans le programme suivi solaire nous rajouterons:<\/p>\n<ol>\n<li><strong>avant la partie setup,<\/strong> pour d\u00e9finir l&rsquo;environnement Oled et la cr\u00e9ation de l&rsquo;objet myOLED; il n&rsquo;y a aucune d\u00e9finition des broches A4 et A5 pour l&rsquo;utilisation de l&rsquo;I2C.<\/li>\n<\/ol>\n<pre>\/\/ ----------ppr d\u00e9but ------------------------\r\n\/\/ \u00e9cran OLED\r\n\/\/ --------------------------------------------\r\n\/\/\r\n#include &lt;OLED_I2C.h&gt;\r\nOLED\u00a0 myOLED(SDA, SCL, 8);\r\nextern uint8_t SmallFont[];\r\nextern uint8_t MediumNumbers[];\r\nextern uint8_t BigNumbers[];\r\n\/\/ ----------ppr fin\u00a0 \u00a0------------------------\r\n\/\/<\/pre>\n<div><\/div>\n<div>2. <strong>dans la partie setup<\/strong>, d\u00e9marrage de l&rsquo;\u00e9cran OLED<\/div>\n<pre>\/\/ \r\n----------ppr d\u00e9but ------------------------\r\n\/\/ \u00e9cran OLED d\u00e9marrage\r\n\/\/ --------------------------------------------\r\n\/\/\r\nmyOLED.begin();\r\nmyOLED.setFont(SmallFont);\r\n\/\/ ----------ppr fin ------------------------\r\n\/\/<\/pre>\n<p>3. <strong>enfin dans la partie loop,<\/strong> apr\u00e8s <em>\/\/ Affichage les consignes sur le moniteur s\u00e9rie<\/em>, j&rsquo;ins\u00e8re <span style=\"font-size: 0.95em;\">le code op\u00e9rationnel affichant les informations sur l&rsquo;\u00e9cran Oled<\/span><\/p>\n<pre>  \r\n  \/\/ ----------ppr d\u00e9but ------------------------\r\n  \/\/ \u00e9cran OLED affichage\r\n  \/\/ --------------------------------------------\r\n  \/\/myOLED.drawLine(0,0,127,63); \r\n  \/\/ Draw a line from the upper left \r\n  \/\/ to the lower right corner\r\n  \u00a0 myOLED.drawLine(0,20,127,20);\u00a0 \/\/ ligne horizontale \r\n\u00a0 \u00a0 myOLED.drawLine(65,0,65,40);\u00a0 \u00a0\/\/ ligne verticale\r\n  \u00a0 myOLED.setFont(MediumNumbers);  \u00a0 \u00a0 \r\n\r\n\u00a0 \u00a0 myOLED.printNumI(HG, LEFT, 0);\r\n  \u00a0 myOLED.printNumI(HD, RIGHT, 0);\r\n  \u00a0 myOLED.printNumI(BG, LEFT, 20);\r\n  \u00a0 myOLED.printNumI(BD, RIGHT, 20);\r\n\r\n  \u00a0 myOLED.setFont(BigNumbers);\r\n  \u00a0 myOLED.printNumI(consigneInclinaison, LEFT, 40);\r\n  \u00a0 myOLED.printNumI(consigneRotation, RIGHT, 40);\r\n  \u00a0 myOLED.update();\r\n  \/\/ ----------ppr fin --------------------------\r\n  \/\/<\/pre>\n<p style=\"color: yellow; background-color: blue;\">Attention: pour les besoins du test manuel de l&rsquo;\u00e9cran Oled,<br \/>\nj&rsquo;ai d\u00e9valid\u00e9 les 2 servomoteurs en les reliant \u00e0 des broches non connnect\u00e9es 8 et 9:<br \/>\n<code><strong>int brocheServoRotation = 8;     \/\/ 10 op\u00e9rationnel<br \/>\nint brocheServoInclinaison = 9;  \/\/ 11 op\u00e9rationnel<br \/>\n<\/strong><\/code><\/p>\n<p style=\"color: yellow; background-color: blue;\">Pour refaire fonctionner l&rsquo;Arduino solaire avec affichage Oled, il faut red\u00e9finir les broches des 2 servomoteurs:<br \/>\n<code><strong>int brocheServoRotation = 10;     \/\/ 10 op\u00e9rationnel, 8 test Oled<br \/>\nint brocheServoInclinaison = 11;  \/\/ 11 op\u00e9rationnel, 9 test Oled<br \/>\n<\/strong><\/code><\/p>\n<p>ce qui donne au final:<\/p>\n<p><a href=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/Kit_suivi_solaire_OLED_221210_v0.1.2_OLED_I2C.zip\">Kit_suivi_solaire_OLED_221210_v0.1.2_OLED_I2Czip<\/a><\/p>\n<p>&nbsp;<\/p>\n<pre><code>\r\n\r\n\/* V2-221118 bis: ajout OLED ppr\r\n Traceur solaire 4 capteurs de lumi\u00e8re.\r\n \r\n Le programme:\r\n - lit les 4 capteurs de lumi\u00e8re,\r\n - Les interpretes pour d\u00e9cider vers o\u00f9 s'orienter,\r\n - et fait tourner les 2 servos moteurs pour s'aligner vers la lumi\u00e8re.\r\n\r\n Cr\u00e9\u00e9 le 1 Sep 2022, par Xavier Lesot, bas\u00e9 sur : https:\/\/www.instructables.com\/DIY-Miniature-Solar-Tracker\/\r\n Modifi\u00e9 le 4 Nov 2022, par Xavier Lesot : Ajout des commentaires.\r\n Modifi\u00e9 le 18 Nov 2022, par Xavier Lesot : Am\u00e9liorations apr\u00e8s 1ers retours d'exp\u00e9riences.\r\n Modifi\u00e9 le 2 D\u00e9c 2022, pas Patrick Pastor: ajout OLED\r\n*\/\r\n\r\n\/\/ --------------------------------------------\r\n\/\/ C\u00e2blage des broches\r\n\/\/ Connecte la broche physique avec sa r\u00e9f\u00e9rence dans le programme.\r\n\/\/ --------------------------------------------\r\n\/\/ Entr\u00e9es\r\nint brocheHG = A0;\r\nint brocheHD = A1;\r\nint brocheBG = A2;\r\nint brocheBD = A3;\r\nint brocheJoyX = A4;\r\nint brocheJoyY = A5;\r\n\r\n\/\/ Sorties\r\n\/\/* ****** PPR: test OLED: on d\u00e9sactive \r\n\/\/*  les 2 servomoteurs en d\u00e9branchant\r\n\/\/*  10 --&gt; 8,  11--&gt; 9\r\n<strong>int brocheServoRotation = 8;     \/\/ 10 op\u00e9rationnel, 8 test manuel Oled\r\nint brocheServoInclinaison = 9;  \/\/ 11 op\u00e9rationnel, 9 test manuel Oled<\/strong>\r\nint brocheLed = 13;\r\n\r\n\/\/ --------------------------------------------\r\n\/\/ Cr\u00e9er des Variables\r\n\/\/ D\u00e9finit des cases dans la m\u00e9moire RAM pour y stocker des valeurs. \r\n\/\/ int = 16 bits = -32,768 to 32,767\r\n\/\/ --------------------------------------------\r\nint HG; \/\/ stockera la valeur du capteur Haut Gauche\r\nint HD; \/\/ stockera la valeur du capteur Droite\r\nint BG; \/\/ stockera la valeur du capteur Bas Gauche\r\nint BD; \/\/ stockera la valeur du capteur Bas droite\r\nint JoyX; \/\/ Option contr\u00f4le par joystick\r\nint JoyY;\r\n\r\n\/\/ R\u00e9glages param\u00e9trable:\r\nint frequenceActualisation = 25; \/\/ R\u00e9glage de la vitesse\r\nint consigneRotation = 90; \/\/ Position initiale (au d\u00e9marrage) 90\u00b0 = millieu.\r\nint consigneInclinaison = 10; \/\/ Position initiale (au d\u00e9marrage) 90\u00b0 = millieu.\r\nbool modeJoystick = false; \/\/ false: Mode capteur, true: mode joystick (optionnel).\r\n\r\n\/\/ limites logiciels\r\n\/\/ But\u00e9es logiciels pour emp\u00eacher le mecanisme d'aller l\u00e0 ou il coince.\r\n\/\/ Ces r\u00e9glages doivent \u00eatre adjust\u00e9s lorsque c'est m\u00e9caniquement impossible d'atteindre toute la plage de rotation du servomoteur.\r\nint LimiteRotationMax = 180;\r\nint LimiteRotationMin = 0;\r\nint LimiteInclinaisonMax = 180;  \/\/ 100 ppr valeur origine\r\nint LimiteInclinaisonMin = 10;\r\n\r\n\/\/ --------------------------------------------\r\n\/\/ Servo\r\n\/\/ --------------------------------------------\r\n\/\/ cr\u00e9er un objet servo pour contr\u00f4ler un servo.\r\n\/\/ douze objets servo peuvent \u00eatre cr\u00e9\u00e9s sur la plupart des cartes.\r\n#include &lt;Servo.h&gt; \/\/ La biblot\u00e8que d'instructions qui s'occupe de fabriquer le signal electrique pour piloter le servo.\r\nServo servoRotation; \/\/ cr\u00e9e un objet servo pour contr\u00f4ler un servo.\r\nServo servoInclinaison; \/\/ cr\u00e9e un objet servo pour contr\u00f4ler un servo\r\n\r\n<strong>\/\/ ----------ppr d\u00e9but ------------------------\r\n\/\/ \u00e9cran OLED\r\n\/\/ --------------------------------------------\r\n\/\/\r\n#include &lt;OLED_I2C.h&gt;\r\nOLED  myOLED(SDA, SCL, 8);\r\nextern uint8_t SmallFont[];\r\nextern uint8_t MediumNumbers[];\r\nextern uint8_t BigNumbers[];\r\n\/\/ ----------ppr fin   ------------------------\r\n\/\/<\/strong>\r\n\r\n\r\n\/\/ ============================================\r\n\/\/ Setup\r\n\/\/ ============================================\r\nvoid setup() { \/\/ mettez votre code d'installation ici, \u00e0 ex\u00e9cuter une fois.\r\n\r\n  \/\/ Servo\r\n  servoRotation.attach(brocheServoRotation); \/\/ attache le servomoteur \u00e0 l'objet servoRotation par la broche 10.\r\n  servoInclinaison.attach(brocheServoInclinaison); \/\/ attache le servomoteur \u00e0 l'objet servoInclinaison par la broche 11.\r\n\r\n  \/\/ broche \u00e0 configurer en sortie\r\n  pinMode(brocheLed, OUTPUT); \/\/ dit \u00e0 l'arduino que la broche est utilis\u00e9e en sortie (car aussi possible de l'utiliser en entr\u00e9e).\r\n\r\n  \/\/ Liaison S\u00e9rie\r\n  \/\/ D\u00e9marre la communication sur la liaison s\u00e9rie \u00e0 la vitesse 9600 bauds \r\n  \/\/ (bauds: bit per second: bps. Repr\u00e9sente le nombre de bits (0 ou 1) transmis en une seconde.)\r\n  \/\/ (9600 bauds: +-1ko\/s. Dur\u00e9e d'un bit: 1.042 ms.)\r\n  Serial.begin(115200); \/\/ D\u00e9marre la liaison s\u00e9rie\r\n  Serial.println(\"Hello World !\"); \/\/ \u00ab Hello world \u00bb sont les mots traditionnellement \u00e9crits par un programme informatique simple dont le but est de faire la d\u00e9monstration rapide de son ex\u00e9cution sans erreur.\r\n\r\n <strong> \/\/ ----------ppr d\u00e9but ------------------------\r\n  \/\/ \u00e9cran OLED d\u00e9marrage\r\n  \/\/ --------------------------------------------\r\n  \/\/\r\n  myOLED.begin();\r\n  myOLED.setFont(SmallFont);\r\n  \/\/ ----------ppr fin   ------------------------\r\n  \/\/<\/strong>\r\n  \r\n}\r\n\r\n\/\/ ============================================\r\n\/\/ Loop\r\n\/\/ ============================================\r\nvoid loop() { \/\/mettez votre code principal ici, \u00e0 ex\u00e9cuter \u00e0 plusieurs reprises.\r\n  \r\n  \/\/ --------------------------------------------\r\n  \/\/ Lecture des entr\u00e9es analogiques.\r\n  \/\/ --------------------------------------------\r\n  \/\/ Lectures des valeurs des photoresistances\r\n  HG = analogRead(brocheHG); \/\/ lit l'entr\u00e9e A0 et stock le r\u00e9sultat dans HG\r\n  HD = analogRead(brocheHD);\r\n  BG = analogRead(brocheBG);\r\n  BD = analogRead(brocheBD);\r\n\r\n  if (modeJoystick){ \/\/ si mode Joystick alors:\r\n    JoyX = analogRead(A4); \/\/ lit aussi les joysticks\r\n    JoyY = analogRead(A5);\r\n  }\r\n\r\n  \/\/ A propos des photor\u00e9sistances:\r\n  \/\/ https:\/\/fr.wikipedia.org\/wiki\/Photor%C3%A9sistance\r\n  \/\/ Expos\u00e9 \u00e0 la lumi\u00e8re affiche grands chiffres car repr\u00e9sente beaucoup d'\u00e9lectricit\u00e9e \u00e0 pouvoir la traverser.\r\n  \/\/ Cach\u00e9 de la lumi\u00e8re affiche petits chiffres car repr\u00e9sente peu d'\u00e9lectricit\u00e9e \u00e0 pouvoir la traverser.\r\n\r\n  \/\/ Affichage des r\u00e9sultats sur le moniteur s\u00e9rie:\r\n  \/\/ (L'arduino envoi sur la liaison s\u00e9rie, l'ordinateur re\u00e7oit et affiche sur le moniteur s\u00e9rie).\r\n  Serial.println(); \/\/ Commence sur une nouvelle ligne. (println: \"Print Line New\" fait Retour chariot et saut \u00e0 la ligne)\r\n\r\n  Serial.print(\"HG: \"); \/\/ envoi un texte qui d\u00e9crit ce qui va suivre\r\n  Serial.print(HG); \/\/ envoi la valeur du capteur HautGauche\r\n  Serial.print(\", \"); \/\/ envoi virgule et espace pour la mise en forme pour que ce soit mieux lisible dans le moniteur serie \r\n\r\n  Serial.print(\"HD: \");\r\n  Serial.print(HD);\r\n  Serial.print(\", \");\r\n\r\n  Serial.print(\"BG: \");\r\n  Serial.print(BG);\r\n  Serial.print(\", \");\r\n\r\n  Serial.print(\"BD: \");\r\n  Serial.print(BD);\r\n  Serial.print(\", \");\r\n\r\n  if (modeJoystick){\r\n    Serial.print(\"JoyX: \"); Serial.print(JoyX); Serial.print(\", \");\r\n    Serial.print(\"JoyY: \"); Serial.print(JoyY); Serial.print(\", \");\r\n  }\r\n  \/\/ --------------------------------------------\r\n  \/\/ Interpr\u00e9tation des capteurs:\r\n  \/\/ Selon la provenance de la lumi\u00e8re,\r\n  \/\/ change la consigne \u00e0 l'axe du servomoteur d' 1\u00b0 dans un sens ou dans l'autre.\r\n  \/\/ --------------------------------------------\r\n  Serial.print(\"| \"); \/\/ mise en forme\r\n\r\n  \/\/ Rotation\r\n  if (HG &gt; HD) { \/\/ Si +plus de lumi\u00e8re \u00e0 Gauche\r\n    consigneRotation -= 1; \/\/ incr\u00e9mente 1\u00b0 de rotation dans le sens horaire pour aller vers elle.\r\n    Serial.print(\"R- \"); \/\/ Affiche le r\u00e9sultat de l'interpr\u00e9tation: \"Rotation -1\u00b0\"\r\n  }\r\n  if (BG &gt; BD) { \/\/ Si +plus de lumi\u00e8re \u00e0 Gauche\r\n    consigneRotation -= 1; \/\/ incr\u00e9mente 1\u00b0 de rotation horaire\r\n    Serial.print(\"R- \"); \r\n  }\r\n  if (HG &lt; HD) { \/\/ Si +plus de lumi\u00e8re \u00e0 Droite\r\n    consigneRotation += 1; \/\/ incr\u00e9mente 1\u00b0 de rotation anti-horaire\r\n    Serial.print(\"R+ \");\r\n  }\r\n  if (BG &lt; BD) { \/\/ Si +plus de lumi\u00e8re \u00e0 Droite consigneRotation += 1; \/\/ incr\u00e9mente 1\u00b0 de rotation anti-horaire Serial.print(\"R+ \"); } \/\/ inclinaison if (HG &gt; BG){ \/\/ Si +plus de lumi\u00e8re en Haut\r\n    consigneInclinaison += 1; \/\/ incr\u00e9mente incline 1\u00b0 vers le Haut\r\n    Serial.print(\" Ih+:\");\r\n    Serial.print(HG-BG);\r\n  }\r\n  if (HD &gt; BD){ \/\/ Si +plus de lumi\u00e8re en Haut\r\n    consigneInclinaison += 1; \/\/ incr\u00e9mente incline 1\u00b0 vers le Haut\r\n    Serial.print(\" Ih+:\");\r\n    Serial.print(HD-BD);\r\n  }\r\n  if (HG &lt; BG){ \/\/ Si +plus de lumi\u00e8re en Bas\r\n    consigneInclinaison -= 1; \/\/ incr\u00e9mente incline 1\u00b0 vers le Bas\r\n    Serial.print(\" Ib-:\");\r\n    Serial.print(BG-HG);\r\n  }\r\n  if (HD &lt; BD){  \/\/ Si +plus de lumi\u00e8re en Bas\r\n    consigneInclinaison -= 1; \/\/ incr\u00e9mente incline 1\u00b0 vers le Bas\r\n    Serial.print(\" Ib-:\");\r\n    Serial.print(BD-HD);\r\n  }\r\n  Serial.print(\"| \"); \/\/ mise en forme\r\n  \/\/ --------------------------------------------\r\n  \/\/ interpr\u00e9tation des capteurs termin\u00e9\r\n  \/\/ --------------------------------------------\r\n\r\n  \/\/ --------------------------------------------\r\n  \/\/ Fin de course logiciel.\r\n  \/\/ Limite les consignes minimums et maximums\r\n  \/\/ la limite max des servomoteur c'est 0...180\u00b0\r\n  \/\/ (modification des r\u00e9glages des limites tout en haut du programme.)\r\n  \/\/ -------------------------------------------- \r\n  \r\n  \r\n  \/\/ Rotation Minimum\r\n  if (consigneRotation &lt; LimiteRotationMin) { \/\/ Si (Consigne plusPetiteQue minimum) alors\r\n    consigneRotation = LimiteRotationMin; \/\/ r\u00e9hausse la consigne \u00e0 la limite.\r\n  }\r\n  \/\/ Rotation Maximum\r\n  if (consigneRotation &gt; LimiteRotationMax) {\/\/ Si (Consigne plusGrandeQue maximum) alors\r\n    consigneRotation = LimiteRotationMax; \/\/ redescend la consigne \u00e0 la limite.\r\n  }\r\n  \/\/ Inclinaison Minimum\r\n  if (consigneInclinaison &lt; LimiteInclinaisonMin){\r\n    consigneInclinaison = LimiteInclinaisonMin;\r\n  }\r\n  \/\/ Inclinaison Maximum\r\n  if (consigneInclinaison &gt; LimiteInclinaisonMax){\r\n    consigneInclinaison = LimiteInclinaisonMax;\r\n  }\r\n\r\n  \/\/ --------------------------------------------\r\n    \/\/ Joystick\r\n    \/\/ Si bouton mode joystick alors branche les joysticks directement sur les consignes aux moteurs et ignore les r\u00e9sultats pr\u00e9cents.\r\n    \/\/ --------------------------------------------\r\n \r\n  if (modeJoystick){\r\n    consigneRotation = map(JoyX, 0, 1023, 0, 180);\r\n    consigneInclinaison = map(JoyY, 0, 1023, 0, 180);\r\n  }\r\n  \r\n  \/\/ --------------------------------------------\r\n    \/\/ Ecriture de la consigne vers les moteurs \r\n    \/\/ --------------------------------------------\r\n  \/\/ Affichage les consignes sur le moniteur s\u00e9rie\r\n  Serial.print(\"Rotation: \");\r\n  Serial.print(consigneRotation);\r\n  Serial.print(\", \");\r\n  Serial.print(\"Inclinaison: \");\r\n  Serial.print(consigneInclinaison);\r\n  Serial.print(\", \");\r\n\r\n<strong>\r\n  \/\/ ----------ppr d\u00e9but ------------------------\r\n  \/\/ \u00e9cran OLED affichage\r\n  \/\/ --------------------------------------------\r\n  \/\/myOLED.drawLine(0,0,127,63); \r\n  \/\/ Draw a line from the upper left \r\n  \/\/ to the lower right corner\r\n\r\n    myOLED.drawLine(0,20,127,20);  \/\/ ligne horizontale \r\n    myOLED.drawLine(65,0,65,40);   \/\/ ligne verticale\r\n    myOLED.setFont(MediumNumbers);\r\n      \r\n    myOLED.printNumI(HG, LEFT, 0);\r\n    myOLED.printNumI(HD, RIGHT, 0);\r\n    myOLED.printNumI(BG, LEFT, 20);\r\n    myOLED.printNumI(BD, RIGHT, 20);\r\n     \r\n    myOLED.setFont(BigNumbers);\r\n    myOLED.printNumI(consigneInclinaison, LEFT, 40);\r\n    myOLED.printNumI(consigneRotation, RIGHT, 40);\r\n    myOLED.update();\r\n  \/\/ ----------ppr fin --------------------------\r\n  \/\/\r\n  <\/strong>\r\n  servoRotation.write(consigneRotation); \/\/ envoi la consigne vers le moteur\r\n  servoInclinaison.write(consigneInclinaison); \/\/ envoi la consigne vers le moteur\r\n\r\n\r\n  \/\/ fait clignoter la led \u00e0 chaque actualisation\r\n  if (digitalRead(brocheLed) == LOW){\r\n    digitalWrite(brocheLed, HIGH);\r\n  }else{\r\n    digitalWrite(brocheLed, LOW);\r\n  }\r\n\r\n  \/\/ --------------------------------------------\r\n  \/\/ Fr\u00e9quence d'actualisation.\r\n  \/\/ C'est le temps avant de relire la boucle,\r\n  \/\/ C'est donc le Temps avant de refaire tourner d'1\u00b0 les moteurs,\r\n  \/\/ C'est donc la vitesse du traceur solaire.\r\n    \/\/ --------------------------------------------\r\n  delay(frequenceActualisation); \/\/ en millisecondes\r\n} \/\/ Fin.\r\n\r\n\r\n<\/code><\/pre>\n<p>&nbsp;<\/p>\n<p>documentation:<\/p>\n<p><iframe loading=\"lazy\" src=\"\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2022\/12\/OLED_I2C_Rinky-Dink.pdf\" width=\"1200\" height=\"1500px\"><\/iframe><\/p>\n<p>et<\/p>\n<p>&#8230;<br \/>\n<a href=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2020\/01\/thats-all-folks.mp4\" target=\"_blank\" rel=\"noopener noreferrer\">c&rsquo;est fini pour 2022 !<\/a><\/p>\n<div style=\"width: 854px;\" class=\"wp-video\"><!--[if lt IE 9]><script>document.createElement('video');<\/script><![endif]-->\n<video class=\"wp-video-shortcode\" id=\"video-5299-1\" width=\"854\" height=\"480\" preload=\"auto\" controls=\"controls\"><source type=\"video\/mp4\" src=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2020\/01\/thats-all-folks.mp4?_=1\" \/><a href=\"https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2020\/01\/thats-all-folks.mp4\">https:\/\/www.breizh56.fr\/crepp2024\/wp-content\/uploads\/2020\/01\/thats-all-folks.mp4<\/a><\/video><\/div>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>petit \u00e9cran Oled, type SSD1306, largeur 128c x longueur 64c, \u00a0i2c, noir et blanc permettant d&rsquo;afficher des textes, des images.. On peut utliser l&rsquo;Oled soit en mode SPI, soit en mode I2C. nous utiliserons le mode I2C et cela compl\u00e8tera la partie micropython vue en novembre 2018. 4 broches: GND VCC 3,3v \/ 5v SCL &#8211;&gt; A5 communication i2c SDA&#8211;&gt; [&#8230;]<\/p>\n","protected":false},"author":7,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5299","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/pages\/5299"}],"collection":[{"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/comments?post=5299"}],"version-history":[{"count":54,"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/pages\/5299\/revisions"}],"predecessor-version":[{"id":5395,"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/pages\/5299\/revisions\/5395"}],"wp:attachment":[{"href":"https:\/\/www.breizh56.fr\/crepp2024\/wp-json\/wp\/v2\/media?parent=5299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}