Pages: [1]   Go Down
Author Topic: Question sur La communication via l'usb  (Read 748 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 29
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour, je suis nouveau sur l'utilisation de l'arduino et je suis confronté au problème suivant. Je passe via un plugins les "mots" suivant via l'usb de mon mac vers l'arduino : "Speedbrake Arm" ou "Speedbrake Full".

Ensuite l'arduino doir afficher sur l'ecran lcd 20*2 soit Speedbrake Arm ou Speedbrake Full.

Cela fonctionne mais pas de la manière que je souhaite.

En effet je dois activer le serial monitor de l'arduino, ensuite envoyer l'info Speedbrake Arm -> le lcd affiche bien Arm. Mais ensuite pour afficher Full je dois fermer le serial monitor et le relancer puis lorsque j'envoie Speedbrake Full alors full s'affiche correctement.

savez vous pourquoi ? comment faire pour que je puisse envoyer soit arm ou full afin d'afficher les bonne info sur l'afficheur ???? chaque fois que je le souhaite.

Voici le code si jamais qqu'un peu m'aider.

Merci

Ounet

#include <stdio.h>
#include <string.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int ledPin = 13;
char indata[30];
int count = 0;

void setup ()
{
  pinMode(ledPin,OUTPUT);
  Serial.begin(115200);
  lcd.begin(20, 2);
  lcd.setCursor(0, 0);
  lcd.print("Speed Brake Value");
}

void loop()
{20
  digitalWrite(ledPin,LOW);
  while (Serial.available() > 0)
  {
    char incomingByte = Serial.read ();
    if(count < 29)
    {
       indata[count] = incomingByte;
       count ++;
      indata[count] = '\0';  
    }
  }
  if ( strcmp (indata,"Speedbrake Full") ==  0)
  {
    //Serial.println("full");
    lcd.setCursor(0, 1);
    lcd.print("Speedbrake Full");
    digitalWrite(ledPin,HIGH);
    delay(2000);
    digitalWrite(ledPin,LOW);
    count =0;
    indata[count] = '\0';
  }
  if ( strcmp (indata,"Speedbrake Arm") ==  0)
  {
    //Serial.println("arm");
    lcd.setCursor(0, 1);
    lcd.print("Speedbrake Arm");
    digitalWrite(ledPin,HIGH);
    delay(1000);
    digitalWrite(ledPin,LOW);
    delay(1000);
    digitalWrite(ledPin,HIGH);
    count =0;
    indata[count] = '\0';
  }
  indata[count] = '\0';
}
Logged

France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3031
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

En première analyse le code semble bon. A une exception près, si pour une raison ou pour une autre indata atteint 29 caractères, tu ne fais plus rien.

N'y aurait-il pas un problème avec le serial monitor sur MAC?
Peux-tu essayer avec un autre programme d'émulation de terminal sur mac ou sur une autre machine?

Autre possibilité, tu te fais avoir par le retour chariot qui est envoyé à la fin de la première chaine. Il reste dans indata et tu envois la nouvelle chaine derrière. Donc le programme se bloque puisque le strcmp ne renvoie jamais 0. Et lorsque tu relances serial monitor tu reinitialises ta carte Arduino.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 29
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci beaucoup pour votre aide.

Voila le resultat



jean-marc
Logged

Pages: [1]   Go Up
Jump to: