Code clavier matriciel double saisie

Bonjour à tous,

Voilà, j’utilise un clavier matriciel pour saisir 2 données. La première concerne un numéro d’étage et la seconde concerne un numéro de vitesse. Le problème c’est quand dans le code ci-dessous j’ai les erreurs suivantes:
Je ne comprends pas pourquoi.

clavier_matriciel.ino: In function ‘void loop()’:
clavier_matriciel:55: error: expected primary-expression before ‘}’ token
clavier_matriciel:55: error: expected ;' before '}' token clavier_matriciel:60: error: jump to case label clavier_matriciel:36: error: crosses initialization of 'char key2' clavier_matriciel:62: error: redeclaration of 'char key2' clavier_matriciel:36: error: 'char key2' previously declared here clavier_matriciel:81: error: expected primary-expression before '}' token clavier_matriciel:81: error: expected ;’ before ‘}’ token
clavier_matriciel:85: error: jump to case label
clavier_matriciel:36: error: crosses initialization of ‘char key2’
clavier_matriciel:87: error: redeclaration of ‘char key2’
clavier_matriciel:36: error: ‘char key2’ previously declared here
clavier_matriciel:106: error: expected primary-expression before ‘}’ token
clavier_matriciel:106: error: expected ;' before '}' token clavier_matriciel:110: error: jump to case label clavier_matriciel:36: error: crosses initialization of 'char key2' clavier_matriciel:112: error: redeclaration of 'char key2' clavier_matriciel:36: error: 'char key2' previously declared here clavier_matriciel:131: error: expected primary-expression before '}' token clavier_matriciel:131: error: expected ;’ before ‘}’ token
clavier_matriciel:135: error: jump to case label
clavier_matriciel:36: error: crosses initialization of ‘char key2’
clavier_matriciel:137: error: redeclaration of ‘char key2’
clavier_matriciel:36: error: ‘char key2’ previously declared here
clavier_matriciel:156: error: expected primary-expression before ‘}’ token
clavier_matriciel:156: error: expected ;' before '}' token clavier_matriciel:160: error: jump to case label clavier_matriciel:36: error: crosses initialization of 'char key2' clavier_matriciel:162: error: redeclaration of 'char key2' clavier_matriciel:36: error: 'char key2' previously declared here clavier_matriciel:181: error: expected primary-expression before '}' token clavier_matriciel:181: error: expected ;’ before ‘}’ token
clavier_matriciel:185: error: jump to case label
clavier_matriciel:36: error: crosses initialization of ‘char key2’
clavier_matriciel:187: error: expected primary-expression before ‘}’ token
clavier_matriciel:187: error: expected `;’ before ‘}’ token

#include <Keypad.h>

const byte ROWS = 4; // Four rows
const byte COLS = 3; // Three columns
// Define the Keymap
char keys[ROWS][COLS] = {
  {'1','2','3'},
  {'4','5','6'},
  {'7','8','9'},
  {'#','0','*'}
};
// Connect keypad ROW0, ROW1, ROW2 and ROW3 to these Arduino pins.
byte rowPins[ROWS] = { 9, 8, 7, 6 };
// Connect keypad COL0, COL1 and COL2 to these Arduino pins.
byte colPins[COLS] = { 12, 11, 10 }; 

// Create the Keypad
Keypad kpd = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );


void setup()
{
  Serial.begin(9600);
}

void loop()
{
  char key = kpd.getKey();
  if(key)  // Check for a valid key.
  {
    switch (key)
    {
      case '1':
        Serial.println("Vous avez choisi l'étage 1");
        char key2 = kpd.getKey();
        if(key2)  // Check for a valid key.
        {
          switch (key2)
          {
            case '1':
              Serial.println("Vous avez choisi la vitesse 1");
              break;
            case '2':
              Serial.println("Vous avez choisi la vitesse 2");
              break;
            case '3':
              Serial.println("Vous avez choisi la vitesse 3");
              break;
            case '4':
              Serial.println("Vous avez choisi la vitesse 4");
              break;              
            default:
        
          }
        }       
        break;
        
        
      case '2':
        Serial.println("Vous avez choisi l'étage 2");
        char key2 = kpd.getKey();
        if(key2)  // Check for a valid key.
        {
          switch (key2)
          {
            case '1':
              Serial.println("Vous avez choisi la vitesse 1");
              break;
            case '2':
              Serial.println("Vous avez choisi la vitesse 2");
              break;
            case '3':
              Serial.println("Vous avez choisi la vitesse 3");
              break;
            case '4':
              Serial.println("Vous avez choisi la vitesse 4");
              break;              
            default:
        
          }
        }       
        
        break;
      case '3':
        Serial.println("Vous avez choisi l'étage 3");
        char key2 = kpd.getKey();
        if(key2)  // Check for a valid key.
        {
          switch (key2)
          {
            case '1':
              Serial.println("Vous avez choisi la vitesse 1");
              break;
            case '2':
              Serial.println("Vous avez choisi la vitesse 2");
              break;
            case '3':
              Serial.println("Vous avez choisi la vitesse 3");
              break;
            case '4':
              Serial.println("Vous avez choisi la vitesse 4");
              break;              
            default:
        
          }
        }       
        
        break;
      case '4':
        Serial.println("Vous avez choisi l'étage 4");
        char key2 = kpd.getKey();
        if(key2)  // Check for a valid key.
        {
          switch (key2)
          {
            case '1':
              Serial.println("Vous avez choisi la vitesse 1");
              break;
            case '2':
              Serial.println("Vous avez choisi la vitesse 2");
              break;
            case '3':
              Serial.println("Vous avez choisi la vitesse 3");
              break;
            case '4':
              Serial.println("Vous avez choisi la vitesse 4");
              break;              
            default:
        
          }
        }       
        
        break;
      case '5':
        Serial.println("Vous avez choisi l'étage 5");
        char key2 = kpd.getKey();
        if(key2)  // Check for a valid key.
        {
          switch (key2)
          {
            case '1':
              Serial.println("Vous avez choisi la vitesse 1");
              break;
            case '2':
              Serial.println("Vous avez choisi la vitesse 2");
              break;
            case '3':
              Serial.println("Vous avez choisi la vitesse 3");
              break;
            case '4':
              Serial.println("Vous avez choisi la vitesse 4");
              break;              
            default:
        
          }
        }       
        
        break;
      case '6':
        Serial.println("Vous avez choisi l'étage 6");
        char key2 = kpd.getKey();
        if(key2)  // Check for a valid key.
        {
          switch (key2)
          {
            case '1':
              Serial.println("Vous avez choisi la vitesse 1");
              break;
            case '2':
              Serial.println("Vous avez choisi la vitesse 2");
              break;
            case '3':
              Serial.println("Vous avez choisi la vitesse 3");
              break;
            case '4':
              Serial.println("Vous avez choisi la vitesse 4");
              break;              
            default:
        
          }
        }       
        
        break;
      default:
        
    }
  }
  
  
  
  
  
}

Merci à tous.

Auguste.

Salut,

je pense qu'il te manque des lignes, car tu déclares un default dans chaque switch, mais la clause "default" se code comme un "case xx", c-a-d qu'il lui faut un break; :

case '4': Serial.println("Vous avez choisi la vitesse 4"); break; default: break; // sans ça, ça merdouille } Ou sinon, tu vires toutes les lignes avec "default", car tu ne les utilises pas.

Bonjour,

Super_Cinci a raison, il faut quelque chose dans default. Un ; suffit.

Par ailleurs, tu redéclares plusieurs fois la variable key2. Déclare la une fois seulement au début de loop.

Enfin, ces grands switch case imbriqués ne sont pas très élégants pour traiter quelques chose de très réguliers. Ça pourrait être remplacé par quelques lignes de code. Et puis il faudrait que l’utilisateur soit drôlement rapide pour appuyer sur la vitesse.