IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Comment faire pour introduire dans la mémoire RTC DC1307 une date/heure obtenue "manuellement"?


Sujet :

Arduino

  1. #1
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut Comment faire pour introduire dans la mémoire RTC DC1307 une date/heure obtenue "manuellement"?
    Bonsoir à tous

    Même si j'ai acquis une première expérience, surtout avec l'aide du présent forum, je reste encore très fragile et des questions probablement élémentaires me troublent encore.

    Ça commence ici:

    https://www.developpez.net/forums/d2.../#post11697133

    où mon système fonctionne, et, l'hiver pointant le bout de son nez, je suis amené à commencer les programmations. L'équipement tourne depuis plusieurs mois, et comme attendu, l'horloge se décale et avait hier plus d'un quart d'heure d'avance avec une RTC DS1307.

    Après recherches pour savoir comment je mettais à l'heure, j'ai retrouvé ce sketch, qui ne fait que ça (la remise à l'heure), avec une date/heure écrite en hard dans le listing.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    /*  ------------------------------------------------------------------
      // MettreALheure.ino devrait finir avec toutes les fonctions  17 juin 2021
      // provient de la version 02 globale
      // je veux ajouter de quoi mettre à l'heure et la date
      // pour exploiter le DS1307 en horloge et en RAM
    // Pour mise à l'heure, changer (actualiser) ligne 52 et lancer
      // Test_01_1307.ino 2 mai 2021 Lecture date/heure sur SD1307
      --------------------------------------------------------------------- */
    #include<Wire.h>
    #include <RTClib.h>  // les guillemets pour placer la .lib dans le dossier .ino
     
    // variables globales
    int Annee ;
    int Mois ;
    int Jour ;
    int Heure ;
    int Minute ;
    int Seconde ;
     
    char octetLu ;
     
    RTC_DS1307 RTC ;
    // void printDateTime ( DateTime dateTime ) ;  // affichage incertain et faux
     
    void setup ()
    {
      // put your setup code here, to run once:
      Serial.begin ( 115200 ) ;
      Wire.begin () ;
      RTC.begin () ;
    }
     
    void loop ()
    {
      // put your main code here, to run repeatedly:
      if ( Serial.available () > 0 )
      {
        int instruct = Serial.read () ;
        switch (instruct)
        {
          case'D':
            {
              DateTime now = RTC.now () ;
              printDateTime(now);
              break;
            }
          case'S':
            {
             // RTC.set ( RTC_MONTH , 6 ) ;  // juin  // refuse le .set
             // RTC.set ( RTC_HOUR , 9 ) ;  // 9 heures
     
             RTC.adjust ( DateTime ( 2021 , 10, 17 , 10 , 46 , 0 ) ) ; //  chaîne de mise à l'heure
     
              // affiche le résultat
              DateTime now = RTC.now () ;
              printDateTime(now);
     
              break;
            }
        }
      }
      delay ( 5000 ) ;
    }
    Voulant rendre le sketch un peu plus pratique, et envisager d'introduire la fonction dans mon programme principal, j'ai essayé de compléter ce sketch par les fonctions d'affichage de mon programme principal pour les ajouter, et là, rien à faire. J'ai des séries d'erreurs incompréhensibles.

    Pour garantir que mes fonctions d'affichage seront bien reconnues, je me suis lancé dans l'opération inverse: partir du programme principal et n'y porter que les quelques fonctions, pour l'instant soumises à réponse à une frappe de clavier (le S), mais là non plus la compilation se passe mal, et je ne parviens pas à aboutir.

    Dans ce nouveau monde, les fonctions/variables utilisant les termes RTC set DateTime now ... sont refusés comme non utilisables. Leur suppression totale finit par déclarer le programme incompatible UNO. :-(

    Or moi, ce que je voudrais, c'est partant de la date/heure présente, créer des termes annee, jour, mois, heure, minute ajustés en mémoire, et, sur validation par un poussoir, envoyer la séquence avec ces termes à un équivalent de la fonction RTC.adjust.

    Avez-vous une idée de ce que je fais mal?


    Édit: comme j'ai modifié mon programme principal jusqu'à supprimer tous défauts, mais sans relever les messages d'erreurs.

    J'ai refait un premier jus et voici les erreurs:



    C:\Users\Guy\Desktop\Mem_Arduino\Outils_de_gestion\Pour_MiseALheure\MettreALheure\MiseALheureInterne_V3\MiseALheureInterne_V3.ino: In function 'void loop()':
    MiseALheureInterne_V3:221:26: error: 'RTC' was not declared in this scope
    DateTime now = RTC.now () ;
    ^~~
    MiseALheureInterne_V3:222:11: error: 'printDateTime' was not declared in this scope
    printDateTime(now);
    ^~~~~~~~~~~~~
    C:\Users\Guy\Desktop\Mem_Arduino\Outils_de_gestion\Pour_MiseALheure\MettreALheure\MiseALheureInterne_V3\MiseALheureInterne_V3.ino:222:11: note: suggested alternative: 'DateTime'
    printDateTime(now);
    ^~~~~~~~~~~~~
    DateTime
    MiseALheureInterne_V3:230:10: error: 'RTC' was not declared in this scope
    RTC.adjust ( DateTime ( 2021 , 10, 17 , 10 , 46 , 0 ) ) ; // chaîne de mise à l'heure
    ^~~
    MiseALheureInterne_V3:234:11: error: 'printDateTime' was not declared in this scope
    printDateTime(now);
    ^~~~~~~~~~~~~
    C:\Users\Guy\Desktop\Mem_Arduino\Outils_de_gestion\Pour_MiseALheure\MettreALheure\MiseALheureInterne_V3\MiseALheureInterne_V3.ino:234:11: note: suggested alternative: 'DateTime'
    printDateTime(now);
    ^~~~~~~~~~~~~
    DateTime
    exit status 1
    'RTC' was not declared in this scope

  2. #2
    Membre régulier
    Homme Profil pro
    Retraité de l'électronique analogique
    Inscrit en
    Avril 2021
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 77
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité de l'électronique analogique

    Informations forums :
    Inscription : Avril 2021
    Messages : 43
    Points : 98
    Points
    98
    Par défaut
    Bonjour,

    Il faut faire deux programmes :
    Un qui ne sert qu'à la mise à l'heure et qui n'est à exécuter qu'une seule fois.
    L'autre dans lequel tu suprimes la ligne qui met à l'heure et où tu ne fais qu'exploiter l'heure de la RTC.

    En effet dans le premier programme l'heure qui est gravée dans le fichier compilé est celle qui était valable au moment de la compilation et du tranfert dans le microcontroleur.
    Si tu continues avec ce premier programme la RTC sera intempestivement remise à l'heure de cette compilation à chaque démarage du programme.

    Si tu as des dérives (cas fréquent avec la DS1307 -> une DS3231 est préférable) il faudra recompiler le premier programme avant de le verser dans le microcontroleur pour obtenir une heure juste.

  3. #3
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Merci pour cette première réponse.

    C'est ce que je fais encore.

    Pourtant, je ne comprends pas pourquoi dans un certain environnement, les instructions d'écriture passent (bien) et dans l'autre, ne passent pas et déclenchent des erreurs.

    Bien entendu, mon projet n'est pas d'envoyer à chaque boucle, une séquence de remise à l'heure.

    Cette séquence sera préparée (les arguments à lui passer) en mémoire et ne sera envoyée qu'une fois, sur une action manuelle.

    Ensuite, le programme reprendra son cours habituel actuel.

    Je reste

  4. #4
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut Hourrah! C'est gagné ...
    Bonjour à tous

    Quelques jours de silence pour remettre l'ouvrage sur le métier, et repartir de zéro.

    D'abord pour débusquer le "piège" caché (je dirais tapis ) qui empêchait la compilation.

    Dans la déclaration de l'horloge

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RTC_DS1307 rtc ;  // horloge RAM DS1307
    il a été choisi le symbole rtc minuscule alors qu'à l'usage dans une des fonctions, il était en majuscules.

    Bien entendu, le compilateur n'a pas laissé passer.

    Ensuite, j'ai pu développer une version simplifiée d'un affichage réduit présentant l'heure de l'horloge telle qu'utilisée dans mon application finale, ainsi qu'une ligne de préparation de l'ensemble des variables à fournir à la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rtc.adjust ( DateTime ( newYear , newMonth, newDay , newHour , newMinut , newSecond ) ) ; //  chaîne de mise à l'heure
    qui j'espère, modifiera mon affichage existant, puis continuera à se dérouler.

    C'est cela qui fonctionne à la perfection.

    Le clavier est aussi celui de l'application, cinq touches qui sont + et - pour modifier les valeurs, gauche droite pour changer de valeur à modifier, et la touche de validation.

    Voilà le sketche ino:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Qui semble bloquer
     
    Le croquis utilise 7844 octets (24%) de l'espace de stockage de programmes. Le maximum est de 32256 octets.
    Les variables globales utilisent 542 octets (26%) de mémoire dynamique, ce qui laisse 1506 octets pour les variables locales. Le maximum est de 2048 octets.
     
    Aurait-il une taille excédentaire ou est-ce un message qui "déborde"?
    J'ai le secret espoir de l'ajouter dans mon application, ce sera peut-être l'objet d'une future question.

    Là, c'est compliqué parce que il me faudrait un "statut" nouveau que je ne peux obtenir qu'au moyen d'une entrée supplémentaire, dont je ne dispose pas. Toutes les bornes d'entée/sortie sont utilisées, et ce serait ballot de devoir passer à mega au lieu de nano pour ce seul motif.

    Peut-être qu'en cherchant bien ou plus simplement en n'utilisant plus le signal nuit de EDF qui m'arrive bien, mais que les trois décennies d'usage n'ont, au final, pas prouvé leur véritable intérêt.

    Avant de "couper ce cordon", je préfère chercher une solution autre.

    Merci encore pour vos aides qui m'ont fait passer en une année, de l'état zéro en matière d'arduino à une application vraiment utile.

  5. #5
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Mon sketch ne passe pas

    Forbidden

    You don't have permission to access this resource.
    Apache/2.4.38 (Debian) Server at www.developpez.net Port 443
    Est-ce la taille du fichier ino qui coince?

  6. #6
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Bonjour à tous

    Citation Envoyé par gienas Voir le message
    Mon sketch ne passe pas ...
    J'ai fait une tentative de le présenter en txt et en pièce jointe.

    Je suppose qu'il suffit de l'enregister, puis de modifier son extension en .ino

    Ensuite, le déplacer dans un dossier portant le non de MAH_de_zero_06_Forum pour qu'il puisse s'ouvrir au moyen de Arduino IDE.

    Ayant détecté une "particularité" dans le fonctionnement de ma fonction clavier, je ne désespère pas de rajouter cette fonction de mise à l'heure dans mon programme principal, sans avoir besoin de l'ordinateur, ni de changer temporairement le programme.

    A suivre donc.
    Fichiers attachés Fichiers attachés

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Le clavier est aussi celui de l'application, cinq touches qui sont + et - pour modifier les valeurs, gauche droite pour changer de valeur à modifier, et la touche de validation.
    vous pouvez nous en dire plus sur ce "clavier"?
    dans le code vous avez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
      pinMode ( 9 , OUTPUT ) ; // les 4 sorties pour les relais
      pinMode ( 2 , OUTPUT ) ;
      pinMode ( 3 , OUTPUT ) ;
      pinMode ( 4 , OUTPUT ) ;
      pinMode ( 5 , INPUT ) ;
      pinMode ( 6 , INPUT ) ;
      pinMode ( 7 , INPUT ) ; // les 3 entrees clavier
      pinMode ( A0 , INPUT ) ; // les entrees bouton b0 2 seuls utilisés
      pinMode ( A1 , INPUT ) ;
    quel est le câblage?

  8. #8
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Citation Envoyé par Jay M Voir le message
    vous pouvez nous en dire plus sur ce "clavier"? ... quel est le câblage?
    Je vois que le cogitateur qui sommeille en toi remonte sur le pont.

    Mon clavier est composé en tout et pour tout de cinq touches, en réalité cinq interrupteurs.

    Ils ont tous un côté au +5V.

    Comme ils doivent générer trois bits ils sont "isolés" par des diodes vers la résistance de pull down placée sur chacune des trois entrées.

    Comme trois bits permettent de compter jusqu'à 7, alors que cinq valeurs sont utiles (chaque touche a une fonction unique), je m'aperçois, en affichant l'état du clavier (la variable KB), que deux valeurs "extra" inutilisées sont présentes et ne servent à rien, puisque les seules valeurs "décodées" utilisées vont de 1 à 5, le 0 étant le signe de pas de clavier.

    Les touches gauche et droite (5 et 2) donnent un 7 sur KB, qui est ignoré. Gauche + validation donnent 5 +1 = 6, mais il est "dangereux" d'utiliser la touche de validation qui sera utilisée elle seule dans ma boucle de mise à l'heure pour valider (enregistrer l'heure préparée) mais surtout sortir de cette boucle particulière et revenir au programme normal, dans lequel aucune des touches n'est utilisée.

    Associé au clavier, il y a un bouton inverseur à quatre positions qui sont

    1- fonctionnement normal: le programme agit sur les sortie relais et l'afficheur montre le contexte;

    2- programmation manuelle pour mettre en chauffe n'importe quel relais pour une durée réglable. Là, le clavier sert à programmer et valider;

    3- programmation proprement dite qui, permet une à une, d'ajouter une séquence hebdomadaire horodatée, sur chaque sortie relais;

    4- vérification de la programmation. Çà marche en pratique mais c'est très fastidieux.

    Comme en mode 1 le clavier ne sert à rien, je vais lancer une procédure parallèle, avec un affichage totalement autre, celui de ma mise à l'heure, dont je ne sortirai que par la touche 1 (validation) qui ramènera à la boucle traditionnelle.

    En décrivant, je découvre que je peux utiliser n'importe quelle touche clavier pour le faire, excepté la 1 qui elle doit fonctionner exclusivement dans ma boucle de mise à l'heure, faute de quoi j'inscrirais dans la RTC une date/heure erronnée, puisque uniquement celle du setup.

  9. #9
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Salut

    je n'ai pas compris , un schéma et une photo du truc seraient bien plus parlant. (5 interrupteurs, 3 pull down, ...)

    En pensant tout haut, si vous avez besoin de 5 fonctions '+' , '-', '→', '←' et 'validation' et que vous avez 5 boutons, pourquoi ne pas donner à chacun sa fonction?

  10. #10
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Bonjour à tous

    Citation Envoyé par Jay M Voir le message
    ... je n'ai pas compris , un schéma et une photo du truc seraient bien plus parlant ...
    Tu as raison, je suis pareil. Je lies mieux les schémas. Comme il n'existait pas (encore), je viens de griffonner ça:

    Nom : ClavieBoutonArduino.png
Affichages : 1027
Taille : 473,7 Ko

    Citation Envoyé par Jay M Voir le message
    ... vous avez 5 boutons, pourquoi ne pas donner à chacun sa fonction?
    Économie économie!

    Cinq boutons, cela fait cinq bits. Une fois codé (BCD), trois suffisent.

    Même "punition pour le bouton (des fonctions). J'ai quatre fonctions, donc quatre positions, qui tiennent sur deux bits.


    Question hors sujet, mais qui est celle de l'instant présent.

    Je pensais être plus riche en composants hard, et disposer de trois cartes UNO. L'une est sur l'application et une sur la maquette totalement équipée mais sur plaque breadboard, que je préfère ne pas déshabiller de suite pour pouvoir maniper s'il s'avère qu'il faille remettre le tapis sur le métier.

    Je n'ai que deux carte MEGA et un afficheur, que je voudrais préparer pour une future application non encore définie.

    Par paresse, je voulais réutiliser tout le sketch, pour ne pas avoir à redévelopper des routines déjà codées.

    Je téléverse mon sketch dans le MEGA, où je n'ai que deux fils à brancher sur l'afficheur (le I2C)

    L'opération ne "fonctionne pas": l'afficheur reste éteint alors que si je l'essaye sur la maquette, il fonctionne bien.

    Y a-t-il quelque chose à annoncer/programmer pour que mes routines UNO fonctionnent sur MEGA?

    Je déclare bien dans les croquis et les outils, que j'ai affaire à MEGA, cela semble se télécharger, mais sans affichage.

    J'utilise bien les bornes SDA/SCL de MEGA au lieu des A4/A5 de UNO.

  11. #11
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    je ne vois pas trop l'économie...

    Vous avez plein de broches sur votre Arduino Uno ou MEGA, je suppose qu'elles ne sont pas toutes utilisées et en plus ça vous fait utiliser des diodes et des résistances... Perso je serais plus parti sur des interrupteurs reliés à GND d'un côté et aux broches en INPUT_PULLUP de l'autre. Pas de résistances, pas de diode, lecture directe dans le code sans faire des exercices sur les conditions conjointes...
    Nom : inputpullup.png
Affichages : 995
Taille : 27,4 Ko

    a priori si vous n'avez pas inversé les deux broches I2C et que vous n'utilisez pas les ports pour lire les pins ça devrait aller... (postez le code si vous voulez qu'on jette un oeil)

  12. #12
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Bonsoir à tous

    Citation Envoyé par Jay M Voir le message
    je ne vois pas trop l'économie...

    Vous avez plein de broches sur votre Arduino Uno ou MEGA, je suppose qu'elles ne sont pas toutes utilisées ...
    Quand je parle d'économie, c'est d'économies de bornes E/S. Sur ma maquette, elles sont toutes utilisées, et c'est ce qui m'a amené à devoir chercher les économies pour en nécessiter un peu moins.

    Je n'exclus cependant pas de faire l'essai, ultérieurement, en faisant une croix sur certaines sorties de tests, qui me permettent de visualiser certaines actions au moyen d'allumage de LED, non utiles dans la version définitive.

    Puisque j'ai abouti à la question de la discussion, je la considère résolue.

  13. #13
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 711
    Points : 5 390
    Points
    5 390
    Par défaut
    Citation Envoyé par gienas Voir le message
    Quand je parle d'économie, c'est d'économies de bornes E/S.
    Ah OK - effectivement alors c'est une bonne raison d'agréger les entrées

  14. #14
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Pour 9 interrupteurs, il faut faire un vrai clavier matriciel 3x3 utilisable avec 6 I/O.
    Sans diode, il y a discrimination d'appuis multiple dans une bonne partie des cas. Avec un petit traitement additionnel il est possible de savoir quand il y a raté de lecture (trop de switch pressés).
    Avec diode en série sur les interrupteurs, c'est possible d'avoir une discrimination totale des switch pressés en simultanés.

    Et pas besoin de résistance externe, les pull-up interne de l'Arduino sont bien suffisantes.

    Delias

  15. #15
    Membre du Club
    Homme Profil pro
    retraité
    Inscrit en
    Décembre 2019
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Décembre 2019
    Messages : 122
    Points : 60
    Points
    60
    Par défaut
    Bonjour à tous

    Citation Envoyé par Delias Voir le message
    Pour 9 interrupteurs, il faut faire un vrai clavier matriciel 3x3 utilisable avec 6 I/O.
    Sans diode, il y a discrimination d'appuis multiple dans une bonne partie des cas ...
    La réalité, c'est qu'il n'y a pas 9 interrupteurs (formant clavier), mais deux entités distinctes:

    1- le "clavier" proprement dit comportant cinq touches, chacune ayant une fonction. Depuis la dernière modification apportée, une des combinaisons de deux touches est utilisée (et détectée) pour entrer dans la boucle de remise à l'heure;

    2- quatre entrées logiques provenant d'un inverseur rotatif à quatre positions, qui informe l'automatisme sur la fonction sélectionnée. Pour chacune de ces fonctions (donc position), le clavier cinq touches est actif et utilisé, mais, bien entendu, les actions commandées agissent sur des variables différentes.

    Le clavier fait + ou - (montée ou descente), gauche et droite (visible sur l'afficheur) et validation.

    L'inverseur rotatif choisit la marche normale (position de repos ou par défaut), le réglage manuel, la programmation des séquences, le contrôle des séquences enregistrées.

    Il est donc impossible de confier l'ensemble de ces entrées à un clavier unique.

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/10/2011, 10h21
  2. Comment faire pour supprimer dans une chaîne de caractere
    Par Thierry69CH dans le forum VBA Access
    Réponses: 2
    Dernier message: 08/07/2010, 20h23
  3. [MySQL] Php, je ne comprends pas comment faire pour introduire des données dans une table
    Par Liondd dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 14/12/2006, 12h53
  4. [VBA-E]Comment faire pour écrire dans une page excel existante ?
    Par pauletta22 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/05/2006, 13h54
  5. Comment faire pour aligner dans un formulaire?
    Par Ludo75 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 06/03/2006, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo