Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // --------------------------------------------------------------------------------
- // Ecran BACK TO THE FUTURE _ Ajustement par BP v2
- // --------------------------------------------------------------------------------
- // Objectif : créer un affichage type "Retour vers le Futur"
- // https://media.giphy.com/media/dgEIhYAo3lZiE/giphy.gif
- // avec possibilité d'ajuster la date avec des boutons poussoirs
- // A ma disposition :
- // https://www.elecfreaks.com/learn-en/microbitOctopus/sensor/octopus_ef04056.html
- // Quatre boutons poussoirs DFR0075W
- // https://wiki.dfrobot.com/DFRobot_Digital_Push_Button_SKU_DFR0029#Sample_Code
- // Un bouton poussoir "classique"
- // https://www.gotronic.fr/art-assortiment-de-15-bp-ronds-ad1009-19588.htm
- // sur Arduino Uno
- // Librairie Wire
- // https://www.arduino.cc/en/reference/wire
- // https://www.locoduino.org/spip.php?article77
- // Librairies TM1637Display
- // Téléchargement : https://github.com/avishorp/TM1637
- // Références : https://sminghub.github.io/Sming/api/classTM1637Display.html
- // ---------------------------------------------------------------------------------
- // ---------------------------------------------------------------------------------
- // Instructions de montage ---------------------------------------------------------
- // ---------------------------------------------------------------------------------
- // Afficheur 7 digits 4 segments OCTOPUS EF04056
- // ---------------------------------------------------------------------------------
- // D9 (CLK)
- // D8 (DIO)
- // 5V
- // GND
- // ---------------------------------------------------------------------------------
- // ---------------------------------------------------------------------------------
- // Boutons poussoirs DFR0075 -------------------------------------------------------
- // ---------------------------------------------------------------------------------
- // D7, D6, D5, D4
- // 5V
- // Gnd
- // ---------------------------------------------------------------------------------
- // ---------------------------------------------------------------------------------
- // Bouton poussoir classique
- // ---------------------------------------------------------------------------------
- // D3
- // 5V
- // GND
- // ---------------------------------------------------------------------------------
- // Chargement des librairies nécessaires -------------------------------------------
- #include <Wire.h> // Librairie de câblage simplifié (??)
- #include <TM1637Display.h> // Librairie d'affichage pour afficheur LCD OCTOPUS EF04056
- // ---------------------------------------------------------------------------------
- // Afficheur LCD Octopus EF04056
- // ---------------------------------------------------------------------------------
- // on définit le pin de connexion sur lequel est CLK
- #define CLK 9
- // on définit le pin de connexion sur lequel est DIO
- #define DIO 8
- int annee = 1974;
- uint8_t positionPoint ;
- // on crée le tableau contenant les positions su point
- const uint8_t posPoint[4] = {0b10000000 , 0b01000000, 0b00100000, 0b00010000};
- // Complément :
- // 0b10000000 – 0.000
- // 0b01000000 – 00.00
- // 0b00100000 – 000.0
- // 0b00010000 – 0000.
- // 0b11110000 – 0.0.0.0.
- // 0x40 - 00:00 <= pour les afficheurs avec ":" au centre
- int curseur = 0;
- // on initialise l'afficheur
- TM1637Display display(CLK, DIO);
- // --------------------------------------------------------------------------------------------------------
- // boutons
- // --------------------------------------------------------------------------------------------------------
- int boutonPlus = 7;
- int boutonMoins = 4;
- int boutonDroite = 5;
- int boutonGauche = 6;
- int boutonSelect = 3;
- bool etatBoutPlus = 0;
- bool etatBoutMoins = 0;
- bool etatBoutDroite = 0;
- bool etatBoutGauche = 0;
- bool etatBoutSelect = 0;
- int cle = 0;
- bool select = 0;
- void setup() {
- Serial.begin(9600); // on initialise et synchronise la communication entre le PC et Arduino
- for (int i = 3 ; i <= 7 ; i++) {
- pinMode (i, INPUT); // on définit les pin 3 à 7 comme des entrées
- }
- // on vide l'écran
- display.clear();
- // on met la luminosité au max
- display.setBrightness(3);
- // on affiche la date par défaut (variable annee)
- display.showNumberDecEx(annee, false, false, 4, 0);
- }
- void loop() {
- // on lance la fonction de reset pour l'affichage
- ajustAffichage ();
- }
- // --------------------------------------------------------------------------------------------------------
- // - Fonctions -------------------------------------------------------------------------------- Fonctions -
- // --------------------------------------------------------------------------------------------------------
- void ajustAffichage() {
- // on affiche dans le moniteur série
- Serial.println ("------------");
- // on lit l'état du bouton Select
- etatBoutSelect = digitalRead (boutonSelect);
- // on affiche dans le moniteur série
- Serial.print ("Select :");
- Serial.println (etatBoutSelect);
- // on lit l'état du bouton Plus
- etatBoutPlus = digitalRead (boutonPlus);
- // on affiche dans le moniteur série
- Serial.print ("Plus :");
- Serial.println (etatBoutPlus);
- // on lit l'état du bouton Moins
- etatBoutMoins = digitalRead (boutonMoins);
- // on affiche dans le moniteur série
- Serial.print ("Moins :");
- Serial.println (etatBoutMoins);
- // on lit l'état du bouton Droite
- etatBoutDroite = digitalRead (boutonDroite);
- // on affiche dans le moniteur série
- Serial.print ("Droite :");
- Serial.println (etatBoutDroite);
- // on lit l'état du bouton Gauche
- etatBoutGauche = digitalRead (boutonGauche);
- // on affiche dans le moniteur série
- Serial.print ("Gauche :");
- Serial.println (etatBoutGauche);
- // si pas de bouton actif (tous relachés)(cle = 0)
- if (cle == 0) {
- // si le boutons Select est enfoncé (actif)
- if (etatBoutSelect == 1) {
- cle = 1;
- // ou si le boutons Plus est enfoncé (actif)
- } else if (etatBoutPlus == 1) {
- cle = 2;
- // si le boutons Moins est enfoncé (actif)
- } else if (etatBoutMoins == 1) {
- cle = 3;
- // si le boutons Droite est enfoncé (actif)
- } else if (etatBoutDroite == 1) {
- cle = 4;
- // si le boutons Gauche est enfoncé (actif)
- } else if (etatBoutGauche == 1) {
- cle = 5;
- }
- // on affiche dans le moniteur série
- Serial.println ();
- Serial.print ("Clé :");
- Serial.println (cle);
- Serial.println ("------------");
- //cle = 0;
- delay (100);
- //delay (2000); // à utiliser pour que l'affichage sue le moniteur série soit lisible
- // ATTENTION faut appuyer 4 secondes sur les bouton pour que ca marche
- // avec 2000
- // si un bouton etait actif (enfoncé)(cle != 0)
- } else {
- switch (cle) {
- // si on vient de cliquer sur Select
- case 1:
- // on affiche dans le moniteur série
- Serial.println("Bouton Select !!");
- // si on est pas en mode Select
- if (select == 0) {
- // on affiche l'année avec le point en premier caractère
- afficheAnnee();
- // on passe en mode Select
- select = 1;
- // sinon si on est pas en mode Select
- } else {
- // on vide l'écran
- afficheDate ();
- // on sort du mode Select
- select = 0;
- }
- //on passe à la fin du "switch"
- break;
- // si on vient de cliquer sur Plus
- case 2:
- // on affiche dans le moniteur série
- Serial.println("Bouton Plus");
- // si on est en mode Select (seulement)
- if (select == 1) {
- // on fait + 1 sur le chiffre sélectionné (celui qui a le point)
- plusUn();
- }
- //on passe à la fin du "switch"
- break;
- // si on vient de cliquer sur Moins
- case 3:
- // on affiche dans le moniteur série
- Serial.println("Bouton Moins");
- // si on est en mode Select (seulement)
- if (select == 1) {
- // on fait - 1 sur le chiffre sélectionné (celui qui a le point)
- moinsUn ();
- }
- //on passe à la fin du "switch"
- break;
- // si on vient de cliquer sur Droite
- case 4:
- // on affiche dans le moniteur série
- Serial.println("Bouton Droite !!");
- // si on est en mode Select (seulement)
- if (select == 1) {
- // on décale le point vers la droite (chiffre sélectionné)
- aDroite();
- }
- //on passe à la fin du "switch"
- break;
- // si on vient de cliquer sur Gauche
- case 5:
- // on affiche dans le moniteur série
- Serial.println("Bouton Gauche !!");
- // si on est en mode Select (seulement)
- if (select == 1) {
- // on décale le point vers la gauche (chiffre sélectionné)
- aGauche ();
- }
- //on passe à la fin du "switch"
- break;
- }
- // on désactive tous les boutons
- cle = 0;
- // petite pause café
- delay (100);
- // delay (2000); // à utiliser pour que l'affichage sur le Moniteur série soit lisible
- // ATTENTION faut appuyer 4 secondes sur les bouton pour que ca marche
- // avec 2000
- }
- }
- void afficheAnnee () {
- // on prépare l'écran
- initEcran ();
- // on détermine la position du curseur en marquant le point
- positionPoint = posPoint[0];
- //on indique que le point est en 0 (point sur le premier chiffre)
- curseur = 0;
- // on affiche
- display.showNumberDecEx(annee, positionPoint, false, 4, 0);
- }
- void aDroite () {
- // on prépare l'écran
- initEcran ();
- // on détermine la position du curseur en marquant le point
- // si le curseur n'est pas sur le quatrième chiffre
- if (curseur < 3) {
- // on décale la position d'un chiffre sur la droite
- curseur += 1;
- // si le curseur est sur le quatrième chiffre
- } else {
- // on remet le point sur le premier chiffre
- curseur = 0;
- }
- // on indique la nouvelle position du point
- positionPoint = posPoint[curseur];
- // on affiche
- display.showNumberDecEx(annee, positionPoint, false, 4, 0);
- }
- void aGauche () {
- // on prépare l'écran
- initEcran ();
- // on détermine la position du curseur en marquant le point
- if (curseur > 0) {
- curseur -= 1;
- } else {
- curseur = 3;
- }
- positionPoint = posPoint[curseur];
- // on affiche
- display.showNumberDecEx(annee, positionPoint, false, 4, 0);
- }
- void plusUn () {
- // on prépare l'écran
- initEcran ();
- // Attention cette méthode est un peu barbare, on peut faire mieux.
- // on détermine la position du curseur en marquant le point
- // si le point se trouve sur le quatrième caractère
- if (curseur == 3) {
- // on fait +1 à la date
- annee += 1;
- // sinon si le point se trouve sur le troisième caractère
- } else if (curseur == 2) {
- // on fait +10 à la date
- annee += 10;
- } else if (curseur == 1) {
- // on fait +100 à la date
- annee += 100;
- // si le point est sur le premier chiffre
- } else if (curseur == 0) {
- //si le premier chiffe n'est pas un 9
- if (annee <= 9000) {
- // on fait +1000 à la date
- annee += 1000;
- // si le premier chiffre est un 9
- } else {
- // on fait -9000 à la date
- annee -= 9000;
- }
- }
- // on indique la nouvelle position du point
- positionPoint = posPoint[curseur];
- // on affiche
- display.showNumberDecEx(annee, positionPoint, false, 4, 0);
- }
- void moinsUn () {
- // prépare l'écran
- initEcran();
- // on détermine la position du curseur en marquant le point
- if (curseur == 3) {
- annee -= 1;
- } else if (curseur == 2) {
- annee -= 10;
- } else if (curseur == 1) {
- annee -= 100;
- } else if (curseur == 0) {
- if (annee >= 1000) {
- annee -= 1000;
- } else {
- annee += 9000;
- }
- }
- positionPoint = posPoint[curseur];
- // on affiche
- display.showNumberDecEx(annee, positionPoint, false, 4, 0);
- }
- // Affichage sans mode Select
- void afficheDate () {
- // on vide l'écran
- display.clear();
- // on met la luminosité au max
- display.setBrightness(3);
- // on affiche la date par défaut (variable annee)
- display.showNumberDecEx(annee, false, false, 4, 0);
- }
- void initEcran () {
- // on efface les donnée à afficher
- display.clear();
- // on règle la luminosité à la moitié
- display.setBrightness(1);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement