Bonjour,
Je suis sur un projet de commande de servo via la reception de valeur depuis le port serie.
Pour résumer, j’ai un logiciel de décodage de radiosonde météo qui m’affiche l’azimut et l’élevation de la sonde. Il renvoie ces informations part un port serie.
Voici la trame envoyé:
AZ180 EL020
W180 020
Je veux récupérer les valeurs 180 et 020
J’ai commencé par voir la trame serie envoyé par le logiciel utilisé sur le “Monitor Serie” du programme Arduino.
Mon logiciel communique parfaitement avec le terminal et je peux voir les trames arriver.
Ensuite, j’ai essayé d’envoyer manuelement une trame depuis le “monitor serie” vers l’Arduino, et là encore, pas de soucis. Je peux l’afficher sur un LCD et même recupérer les valeurs souhaité.
Le soucis arrive quand j’essaye d’envoyer les trames depuis mon logiciel vers l’arduino. Il ne se passe rien. Quoique la LED RX s’allume de temps en temps. (Reception de trames, je pense) Mais pas d’affichage des valeurs sur le LCD.
Je suis en connection par USB.
Peut être cela vien du taux de transfert (ici=115200) mais j’ai déjà essayé plusieurs valeurs et ça ne change rien.
J’ai aussi pensé au retour chariot, je me’explique, la trame arrive sur deux ligne. mais quand je l’envoye depuis le monitor serie, je l’envoye que sur une ligne. Mais si c’est ça, je ne sais pas comment faire.
Carte utilisé: Arduino UNO
voici le petit code test:
// test reception serie depuis C34
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); //pin LCD
void setup() {
// initialize serial:
Serial.begin(115200);
// initialize LCD
lcd.begin(16,2);
lcd.print("AZ EL soft");
}
void loop() {
// if there's any serial available, read it:
while (Serial.available() > 0) {
int index=Serial.read(); // lire un premier caractère
// controle éventuel : décommenter pour voir ce qui arrive
Serial.print("index : "); Serial.println(index);
// filtrer : il doit etre une lettre minuscule ou majuscule
if(index >= 'A' && index <= 'z'){
int valeur = Serial.parseInt();
// controle eventuel de la valeur
//Serial.print("valeur : "); Serial.println(valeur);
// traitement
switch(index){
case 'A': // renvoie la valeur AZ
// allume la led si le chiffre est superieur a 0
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("AZ");
lcd.setCursor(4, 0);
lcd.print(valeur);
break;
case 'E': // renvoie la valeur EL.
lcd.setCursor(1, 1);
lcd.print("EL");
lcd.setCursor(4, 1);
lcd.print(valeur);
break;
}
}
}
delay(10);
}
Meilleurs salutation et bonne soirée…