probleme clavier

bonjour à tous!

afin de prendre en main et de m’amuser un petit peu avec mon module sans fil 433Mhz, j’ai voulu établir une connexion entre deux arduino.

le premier (arduino uno), s’occupe de l’émission!
j’y ai branché un clavier (4*4) afin de taper ce que l’on veut, une fois notre nombre tapé, il ne reste plus qu’a appuyer sur # pour l’envoyer.
Jusqu’ici pas de problèmes, mais lorsque j’affiche dans la liaison série(pour tester mon code) je remarque que le premier chiffre de mon nombre, c’est # !
je ne comprend pas… bon plutôt que de vous parler deux heures, voici mon code:

#include <Keypad.h>
#include <VirtualWire.h>

const int envoi = 12;
const int led=10;
const int ligne1=2;
const int ligne2=3;
const int ligne3=4;
const int ligne4=5;
const int colonne1=6;
const int colonne2=7;
const int colonne3=8;
const int colonne4=9;
const byte ligne=4;      //on indique combien il y a de ligne/colonne
const byte colonne=4;

char touches[ligne][colonne]= {
  {'1','2','3','A'},
  {'4','5','6','B'},    //on créé un tableau 2D qui contient nos touches
  {'7','8','9','C'},
  {'*','0','#','D'}
  };
  
  byte brocheligne[ligne] = {ligne1,ligne2,ligne3,ligne4}; //connexions utilisées pour les broches de lignes du clavier
  byte brochecolonne[colonne] = {colonne1,colonne2,colonne3,colonne4};
  char touche;    // variable de stockage valeur touche appuyée
  char mot[]={};
  int i=0;
Keypad clavier=Keypad(makeKeymap(touches),brocheligne,brochecolonne,ligne,colonne);


void setup()
{
   
    vw_set_tx_pin(envoi);
    vw_set_ptt_inverted(true);  //Configure la position de la broche d'envoi 
    vw_setup(1000);       // Bits per sec
    Serial.begin(9600);
    pinMode(led,OUTPUT);
    digitalWrite(led,HIGH);
    
}

void loop()
{
  touche=clavier.getKey();
  
  if(touche!=NO_KEY)
  {
   
    if (touche=='#')
    {
      Serial.println(mot);
      Serial.println(i);
     digitalWrite(led,LOW);
     vw_send((uint8_t *)mot,i); //Cette fonction transmet le message contenu dans le tableau message, ainsi que sa taille ainsi le récepteur peut controler que le message reçu est de la même taille que celui envoyé.
     vw_wait_tx(); //Attends que le message soit completement transmis.
     delay(100);
     digitalWrite(led,HIGH);
       for (i;i!=0;i--)
       {
       mot[i]=0;
       }
     i=0; 
     mot[i]=0;
    }
    else
     {
       mot[i]=touche;
       i+=1;
     }
 
  }  
}

et voici ce que ça donne:

alors j’ai taper le nombre 11, et ça m’affiche #1 ! :frowning:
le nombre 2 sert à m’informer sur le nombre d’appui sur mon clavier.

HELP SVP :slight_smile:
merci bonne journée :slight_smile:

Il faut de tu définisses une taille à ton tableau mot.

bonjour, merci de ta réponse, le problème si je fais ça , c'est que j'impose une taille à mon nombre :/ mais bon j'ai quand même essayé et voici le résultat: (j'ai mis un tableau à 3 cases)

|500x397

ça fonctionne quand j’écris des nombres en dessous de 3 caractères, en revanche quand j'en écrit 3, il y a encore le # qui appparait :(

Normal, dans la taille de la chaine de caractères il faut prendre en compte le caractère de terminaison. Pour stocker 3 caractères dans un tableau il faut en réserver 4. Le 4ème c'est le \0 qui indique la fin de chaine.

alex3600: le problème si je fais ça , c'est que j'impose une taille à mon nombre :/

Tu n'imposes pas la taille du nombre, tu imposes la taille maximale du nombre ce qui n'est pas tout à fait pareil. Maintenant si cela te poses problème, tu peux très bien renvoyer les caractères au fur et à mesure que tu les reçois. A condition évidemment que les caractères arrivent moins vite qu'ils ne sont réémis. Dans ce cas la taille de ton tableau sera fixe.

ah d'accord, je ne connaissais par ce caractère de terminaison :£ je vous remercie de votre aide, passez une bonne soirée :)

Un peu de lecture string - char array