Clavier piano Arduino Uno

Bonjour,

Je suis nouveau sur ce forum et un grand débutant dans l'arduino.
Je viens vers vous, afin de trouver des pistes de solutions à mon problème.
Je travaille sur un projet scolaire et le but de ce projet est de faire communiquer le clavier d'ordinateur avec l'arduino et un haut-parleur. Ce que j'aimerai faire, c'est taper sur les touches du clavier et que l'arduino reçoive les caractères du clavier et les transforment pour que le haut-parleur créé des sons.

Pour communiquer entre le clavier et l'arduino, j'utilise "Putty". L'arduino reçoit bien les caractères envoyés par le clavier.
Mais je n'arrive pas à interpréter ces caractères.

Avez-vous des pistes ?

Merci d'avance.

Quentin27:
Avez-vous des pistes ?

Bonjour,

Oui, il suffit de comparer le caractère reçu au caractère que tu as prévu pour jouer telle ou telle note.

Merci pour ta réponse. J'ai essayé plusieurs choses et j'en suis arrivé à celà, mais j'ai toujours des erreurs !

int caract[] = {31, 33, 37, 41, 44, 49, 55, 62, 65, 73, 82, 87, 98, 110, 123, 131, 147, 165,
175, 196, 220, 247, 262, 294, 330, 349, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1047, 1175,
1319, 1397, 1568, 1760, 1976, 2093, 2349, 2637, 2794, 3136, 3520, 3951, 4186, 4699, 4978}; // caract[caractèretapé-97] => note

int caracteretape[] = {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, 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};

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

void loop()
{

Serial.write("note à ecrire"); // Taper une note

caracteretape=Serial.read(); //Récupère la touche tapé sur le clavier

int NOTES=caract[caracteretape-97]; // NOTES prend la note qui correspond à la touche du clavier

tone(3, NOTES, 3000); // envoi sur le port 3, la note de 3000ms

}

LES ERREURS

programme_son_clavier.ino: In function 'void loop()':
programme_son_clavier.ino:22:24: error: incompatible types in assignment of 'int' to 'int [52]'
programme_son_clavier.ino:24:44: error: invalid types 'int [52][int*]' for array subscript
Erreur lors de la compilation

Bonjour,

Mets ton code entre balises

caracteretape est un tableau; Utilise une autre variable avec un autre nom pour mémorisé le caractère reçu.

Si j'ai bien compris ton programme:
Comme la table caract[] contient la hauteur des notes je suggère de l'appeler notes[]
Comme la table caracteretape ne contient pas le caractère tapé, mais les caractères possibles je suggere de l'appeler caract[]

Ensuite il faut que tu compares le caractère tapé à ta table de caractères possibles et tu en déduit l'index dans la table notes
Ce qui donne un programme de ce genre

int notes[] = {31, 33, 37, 41, 44, 49, 55, 62, 65, 73, 82, 87, 98, 110, 123, 131, 147, 165,
               175, 196, 220, 247, 262, 294, 330, 349, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1047, 1175,
               1319, 1397, 1568, 1760, 1976, 2093, 2349, 2637, 2794, 3136, 3520, 3951, 4186, 4699, 4978
              }; //  note



int caract[] = {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, 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
                      };

const int NBCAR=sizeof caract/sizeof caract[0];   // nombre de caractère

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

void loop()
{
  Serial.write("note à ecrire"); // Taper une note

  int caracteretape = Serial.read(); //Récupère la touche tapé sur le clavier

  int i;
  for (i=0; i<NBCAR; i++)
  {
    if (caracteretape==caract[i])
      break;
  }
  if (i<NBCAR)
  {
    // on a trouvé le caractère
    int note = notes[i]; // NOTES prend la note qui correspond à la touche du clavier
  
    tone(3, note, 3000); // envoi sur le port 3, la note de 3000ms
  }

}