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 :

Vérification de code


Sujet :

Arduino

  1. #1
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut Vérification de code
    Bonjour à tous !
    Je suis actuellement en train de réaliser mon projet de fin de terminale en sciences de l'ingénieur, et je m'occupe de la partie programmation... Sur Arduino.

    Je tiens à préciser que je suis très mauvais en Arduino, et que malgré les cours Arduino je ne pige pas grand chose à ce qui se passe à l'écran (alors que d'autres langages de programmation comme le C# ou le Python ne me posent aucun problème)

    Je dois, pour ce projet, permettre à une carte arduino de comparer un code entré avec un code placé en mémoire, et le moins qu'on puisse dire, c'est que ça marche pas des masses !

    Voici mon horreur mon code:

    Code c++ : 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
    64
    65
    66
    67
    68
    69
    70
    71
     
    #include <Keypad.h>
     
    const byte LINS = 4; // 4 lignes
    const byte COLS = 3; // Trois colonnes
    // On définit la matrice représentant le clavier
    char touches[LINS][COLS] = {
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'#','0','*'}
    };
    // Connecter le clavier LIN0, LIN1, LIN2 et LIN3 aux broches correspondantes sur la carte.
    byte linPins[LINS] = { 4, 3, 2, 1 };
    // Connecter le clavier COL0, COL1 et COL2 aux broches correspondantes sur la carte.
    byte colPins[COLS] = { 7, 6, 5 }; 
     
    // Create the Keypad
    Keypad clavier = Keypad( makeKeymap(touches), linPins, colPins, LINS, COLS );
     
    int code[5]={0,8,8,8,8};
    int codeentre[5];
    char codeentreserial[5]; // Version du code entré utilisée pour afficher le code sur entré sur le moniteur série
    int compteur = 1;
     
    #define ledpin 13
     
    void setup()
    {
      Serial.begin(9600);
    }
     
    void loop()
    {
      char key = clavier.getKey();
      if(key)  // Check for a valid key.
      {
          Serial.println(key);
          if (compteur<5)
          {
            compteur=compteur;
            codeentre[compteur]=key;
            codeentreserial[compteur]=key;
            compteur=compteur+1;
            Serial.println(compteur);;
          } // FIN ENTREE
          delay(250);
          if (compteur==5)
          {
            Serial.println("");
            Serial.println("Code entre:");
            Serial.println(codeentreserial[1]);
            Serial.println(codeentreserial[2]);
            Serial.println(codeentreserial[3]);
            Serial.println(codeentreserial[4]);
            Serial.println("");
            Serial.println("Code en memoire:");
            Serial.println(code[1]);
            Serial.println(code[2]);
            Serial.println(code[3]);
            Serial.println(code[4]);
            Serial.println("");
            Serial.println(compteur);
            int touche1=int(codeentreserial[1]);
            if (codeentreserial[1]==code[1] && codeentreserial[2]==code[2] && codeentreserial[3]==code[3] && codeentreserial[4]==code[4] && compteur==5)
            {
              Serial.println("code bon");
            }      
          } // FIN ANALYSE
        }
      } // FIN VOID LOOP

    Le soucis, c'est le suivant: Ca marche pas.
    Le code entré est bien entré, et détecté.
    Le code en mémoire est bien enregistré par la carte, et c'est bien celui que je lui ai donné...
    Les deux codes sont reconnus, les deux codes coïncident, et pourtant, ça fonctionne pas:

    Le moniteur série est sensé me renvoyer "Code bon" si les deux codes sont les mêmes (ce qui est systématiquement le cas), pourtant il reste aussi apathique qu'un légume croisé avec un paresseux sous morphine.
    Je ne comprends pas, je me sens bête, un petit coup de main ne serait pas de refus !

    Merci à tous !

    Saad

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 164
    Billets dans le blog
    47
    Par défaut
    Salut,

    à priori, tu compares des char avec des int. L'entier 8 n'est pas égal au caractère '8'.

    Code c++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    char c = '8'; // c est le caractere '8'
    int num = c - '0'; // num est un entier et vaut 8

  3. #3
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut Re !
    Oooookay !
    Donc, gros edit, j'ai réussi à contourner le problème.

    L'astuce que tu m'as donné ne fonctionnait pas, il se trouve que ça me convertissait le caractère en son code ascii, et non pas en le chiffre qu'il représentait.

    Du coup, j'ai trouvé un moyen de retrouver le chiffre à partir du code Ascii, en enlevant 46 à chaque fois, puisque la plupart du temps:
    ASCII = Chiffre + 46
    Donc:
    Chiffre = ASCII - 46

    Et à ma grande surprise, ça fonctionne !
    Le code est super lourd, mais hey, ça fonctionne, et c'est l'essentiel !

    Je vais tâcher de continuer sur ma lancée ^^ Merci pour le coup de main !

  4. #4
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Ooookay !

    Saad est de retour, avec des erreurs plein la console !

    Tout allait bien dans le meilleur des mondes avec mon code qui fonctionnait à merveille, quand Saad décida, chose somme toute basique, de rajouter une sous-fonction qui servirait à redéfinir le mot de passe à qui trouverait le légendaire "Mastercode" (la légende dit que c'est "####". Les dieux en avaient ras le bol de l'originalité, ce jour là).
    C'est alors, dans ce fourbi incroyable, que Saad se retrouva avec des erreurs de dingues, qu'il ne comprenait pas et ne pouvait résoudre.

    Aiderez-vous Saad dans sa quête du code parfait ?

    Code c++ : 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
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
     
    #include <Keypad.h>
     
    const byte LINS = 4; // 4 lignes
    const byte COLS = 3; // Trois colonnes
    // On définit la matrice représentant le clavier
    char touches[LINS][COLS] = {
      {'1','2','3'},
      {'4','5','6'},
      {'7','8','9'},
      {'#','0','*'}
    };
    // Connecter le clavier LIN0, LIN1, LIN2 et LIN3 aux broches correspondantes sur la carte.
    byte linPins[LINS] = { 4, 3, 2, 1 };
    // Connecter le clavier COL0, COL1 et COL2 aux broches correspondantes sur la carte.
    byte colPins[COLS] = { 7, 6, 5 }; 
     
    // Create the Keypad
    Keypad clavier = Keypad( makeKeymap(touches), linPins, colPins, LINS, COLS );
     
    int code[5]={0,5,3,8,7};
    int mastercode[5]={0,35,35,35,35}
    int codeentre[5];
    char codeentreserial[5]; // Version du code entré utilisée pour afficher le code sur entré sur le moniteur série
    int compteur = 1;
    int codeentre1 = 0;
    int codeentre2 = 0;
    int codeentre3 = 0;
    int codeentre4 = 0;
     
    #define ledpin 13
     
    void setup()
    {
      Serial.begin(9600);
    }
     
    void reprogrammation()
      {
      char codeserial[5];
      char key = clavier.getKey();
      if(key)  // Check for a valid key.
      {
          Serial.println(key);
          if (compteur<5)
          {
            compteur=compteur;
            codeserial[compteur]=key;
            compteur=compteur+1;
            Serial.println(compteur);
          }
      }
      delay(250);
          if (compteur==5)
          {
            Serial.println("Code entre:");
            Serial.println(codeentreserial[1]);
            Serial.println(codeentreserial[2]);
            Serial.println(codeentreserial[3]);
            Serial.println(codeentreserial[4]);
            Serial.println("Code en memoire:");
            Serial.println(code[1]);
            Serial.println(code[2]);
            Serial.println(code[3]);
            Serial.println(code[4]);
            codeentre1 = codeserial[1]-0;
            if (codeentre1==35) // "#"
            {
              codeentre1 = codeserial[1]-0;
            }
            else
            {
              if (codeentre1==42) //"*"
              {
                codeentre1 = codeserial[1]-0;
              }
                else
                {
                  codeentre1 = codeserial[1]-48;
                }
              }
     
     
            codeentre2 = codeserial[2]-0;
            if (codeentre2==35) // "#"
            {
              codeentre2 = codeserial[2]-0;
            }
            else
            {
              if (codeentre2==42) //"*"
              {
                codeentre2 = codeserial[2]-0;
              }
                else
                {
                  codeentre2 = codeserial[2]-48;
                }
              }
     
     
     
            codeentre3 = codeserial[3]-0;
            if (codeentre3==35) // "#"
            {    
              codeentre3 = codeserial[3]-0;
            }
            else
            {
              if (codeentre3==42) //"*"
              {
                  codeentre3 = codeserial[3]-0;
              }
                else
                {
                  codeentre3 = codeserial[3]-48;
                }
              }
     
     
            if (codeentre4==35) // "#"
            {
              codeentre4 = codeserial[4]-0;
            }
            else
            {
              if (codeentre4==42) //"*"
              {
                codeentre4 = codeserial[4]-0;
              }
                else
                {
                  codeentre4 = codeeserial[4]-48;
                }
            }
     
            Serial.println("code:");
            Serial.println(codeentre1);
            Serial.println(codeentre2);
            Serial.println(codeentre3);
            Serial.println(codeentre4);
     
            code[1]=codeentre1;
            code[2]=codeentre2;
            code[3]=codeentre3;
            code[4]=codeentre4;
          }
          }
     
    void loop()
    {
      char key = clavier.getKey();
      if(key)  // Check for a valid key.
      {
          Serial.println(key);
          if (compteur<5)
          {
            compteur=compteur;
            codeentreserial[compteur]=key;
            compteur=compteur+1;
            Serial.println(compteur);
          }
          delay(250);
          if (compteur==5)
          {
            Serial.println("Code entre:");
            Serial.println(codeentreserial[1]);
            Serial.println(codeentreserial[2]);
            Serial.println(codeentreserial[3]);
            Serial.println(codeentreserial[4]);
            Serial.println("Code en memoire:");
            Serial.println(code[1]);
            Serial.println(code[2]);
            Serial.println(code[3]);
            Serial.println(code[4]);
            codeentre1 = codeentreserial[1]-0;
            if (codeentre1==35) // "#"
            {
              codeentre1 = codeentreserial[1]-0;
            }
            else
            {
              if (codeentre1==42) //"*"
              {
                codeentre1 = codeentreserial[1]-0;
              }
                else
                {
                  codeentre1 = codeentreserial[1]-48;
                }
              }
     
     
            codeentre2 = codeentreserial[2]-0;
            if (codeentre2==35) // "#"
            {
              codeentre2 = codeentreserial[2]-0;
            }
            else
            {
              if (codeentre2==42) //"*"
              {
                codeentre2 = codeentreserial[2]-0;
              }
                else
                {
                  codeentre2 = codeentreserial[2]-48;
                }
              }
     
     
     
            codeentre3 = codeentreserial[3]-0;
            if (codeentre3==35) // "#"
            {    
              codeentre3 = codeentreserial[3]-0;
            }
            else
            {
              if (codeentre3==42) //"*"
              {
                  codeentre3 = codeentreserial[3]-0;
              }
                else
                {
                  codeentre3 = codeentreserial[3]-48;
                }
              }
     
     
            if (codeentre4==35) // "#"
            {
              codeentre4 = codeentreserial[4]-0;
            }
            else
            {
              if (codeentre4==42) //"*"
              {
                codeentre4 = codeentreserial[4]-0;
              }
                else
                {
                  codeentre4 = codeentreserial[4]-48;
                }
            }
     
            Serial.println("code:");
            Serial.println(codeentre1);
            Serial.println(codeentre2);
            Serial.println(codeentre3);
            Serial.println(codeentre4);
          }
          if (codeentre1==code[1] && codeentre2==code[2] && codeentre3==code[3] && codeentre4==code[4] && compteur==5)
          {
            Serial.println("code bon");
            codeentreserial[5]; // Version du code entré utilisée pour afficher le code sur entré sur le moniteur série
            compteur = 1;
            codeentre1 = 0;
            codeentre2 = 0;
            codeentre3 = 0;
            codeentre4 = 0;
     
          }
          else
          {
            if (codeentre1==mastercode[1] && codeentre2==mastercode[2] && codeentre3==mastercode[3] && codeentre4==mastercode[4])
            {
              Serial.println("mastercode entré. Entrez le nouveau code.");
              reprogrammation();
     
            }
           }
        }
      }

    Voici les erreurs ! :

    Clavier2_EN_COURS.ino:22:1: error: expected ',' or ';' before 'int'
    Clavier2_EN_COURS.ino: In function 'void setup()':
    Clavier2_EN_COURS.ino:32:6: error: redefinition of 'void setup()'
    sketch_mar18a.ino:1:6: error: 'void setup()' previously defined here
    Clavier2_EN_COURS.ino: In function 'void reprogrammation()':
    Clavier2_EN_COURS.ino:132:28: error: 'codeeserial' was not declared in this scope
    Clavier2_EN_COURS.ino: In function 'void loop()':
    Clavier2_EN_COURS.ino:149:6: error: redefinition of 'void loop()'
    sketch_mar18a.ino:6:6: error: 'void loop()' previously defined here
    Erreur lors de la compilation.
    Le pire c'est que les lignes sont même pas données, et que bien sûr elles sont pas numérotées sur l'IDE... 'Fin bref.

    Merci d'avance, les gars

  5. #5
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par e.Saad Voir le message
    Le pire c'est que les lignes sont même pas données, et que bien sûr elles sont pas numérotées sur l'IDE...
    Pour la numérotation des lignes : menu Fichier > Préférences > Paramètres > Afficher le numéro des lignes

    Pour identifier la ligne à partir du message d'erreur :
    Clavier2_EN_COURS.ino:22:1: error: expected ',' or ';' before 'int'
    Le chiffre qui suit (ici 1) correspond au Nième caractère sur cette même ligne (donc ici le premier caractère)

    Avec ces nouvelles informations, tu devrais déjà pouvoir en corriger une ou deux…

  6. #6
    Membre averti
    Homme Profil pro
    Lycéen
    Inscrit en
    Mars 2016
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Mars 2016
    Messages : 18
    Par défaut
    Merci énormément pour votre aide !!

    Problèmes réglés, le code fonctionne parfaitement, merci les gars

    Et merci aussi pour les cours et tutoriels pour apprendre Arduino

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Vérification de code
    Par BenoitM dans le forum Débuter
    Réponses: 5
    Dernier message: 14/07/2011, 08h17
  2. [FB3] Plugin de vérification de code
    Par Maskime dans le forum Flex
    Réponses: 1
    Dernier message: 22/10/2010, 16h45
  3. Besoin de vérification de code VBA
    Par cedill23 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/07/2009, 17h25
  4. Vérification du Code SQL
    Par halim-aman dans le forum Persistance des données
    Réponses: 2
    Dernier message: 21/04/2008, 00h08
  5. [C#] Vérification de code.
    Par Pilloutou dans le forum C#
    Réponses: 4
    Dernier message: 30/10/2006, 23h09

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