Bonjour, je suis actuellement en classe prépa scientifique, c'est bientôt les oraux dont l'épreuve de TIPE mais je bute toujours sur mon expérience qui consiste à transmettre des données par émission lumineuse. J'utilise pour ça deux cartes Arduino, l'une pour l'émission qui code le signal (une chaine de caractère) et le réparti sur 8 bits représentés par 8 LEDs, l'autre pour la réception reliée aux 8 photodiodes qui me servent de récepteurs et qui doit donc me retransformer cette suite de 0 ou 1 en ma chaine de caractère.
J'ai surtout un problème au niveau de la conversion de mon texte en base 2 en passant par la table ASCII, j'ai essayé de créer une liste, de passer par un String... mais en fouillant un peu je suis tombé sur quelque chose d'intéressant en utilisant la fonction bitRead.
Je met ici mon code et les 2-3 problèmes (en gras) que j'ai, je précise que je débute en programmation et encore plus en Arduino, et même si j'ai pas mal appris ces derniers temps je ne suis pas du tout familier avec le langage Arduino :
/*Ce programmme permet de transmettre un message */
char Texte[151] = "Hello world"; // Le message à transmettre.
int led[9] = {2,3,4,5,6,7,8,9,10}; // Les différentes LED.
void setup() {
Serial.begin(9600);
pinMode(led[0], OUTPUT); // On met les différentes LED en sortie de la carte Arduino
pinMode(led[1], OUTPUT);
pinMode(led[2], OUTPUT);
pinMode(led[3], OUTPUT);
pinMode(led[4], OUTPUT);
pinMode(led[5], OUTPUT);
pinMode(led[6], OUTPUT);
pinMode(led[7], OUTPUT);
pinMode(led[8], OUTPUT); // Led de contrôle ---> signale le début d'émission
delay(3000);}
void loop() {
digitalWrite(10, HIGH); // LED de contrôle allumée, début de la transmission
for (int l=0; l <= 151; l++)
{[b]int lettrel = Texte[l]+0;
byte let = byte(lettrel);[/b]
for (int k=0; k <= 7; k++)
{if (bitRead(let,k)== 1) // bitRead lit la valeur du bit de rang k pour la valeur décimale de lettrei
{digitalWrite(2+k, HIGH);} // Bit à 1, LED allumée.
else
{digitalWrite(2+k, LOW);}} // Bit à 0, LED éteinte.
}
[b]delay(10);}[/b]// Temps d'émission d'une lettre, pour 150, 1,5secondes.
Voilà le code, mon premier problème c'est la conversion d'un char (ici c'est Texte[l]) en un int, j'ai trouvé cette astuce de mettre int nombre = texte[7]+0 pour obtenir un int, mais donc que va faire concrètement cette commande ? Par exemple pour Texte[4], lettrel sera-t-il le code ASCII décimal de o soit 111 ?
Si c'est le cas, et si byte let = byte(lettrel) permet bien de créer un byte qui pourra se lire par la suite avec bitRead, que va lire bitRead si il n'y a pas de 0 ou 1 pour le rang k ? Concrétement, si j'ai la valeur 63 en décimal, elle sera codée en binaire par 111111 et non pas 0111111, faussant ainsi mon code qui consiste à tout répartir sur 8 LEDs.
Enfin le delay représente-t-il bien ici la répartition d'une lettre de la chaine de caractère sur les 8 LEDs, confirmant ainsi le fait qu'il me faille 151*delay pour émettre tout mon texte ?
Voilà pour mes problèmes, en espérant que quelqu'un puisse m'éclairer. Veuillez m'excuser pour la présentation un peu foireuse du code, je ne sais pas encore comment attacher un bout de code à un texte de manière propre.
EDIT : Désolé, c'est corrigé ![]()