Go Down

Topic: "filtrer" une reception RS232 ? (Read 434 times) previous topic - next topic

windaube21

bonjour a tous

j'ai une arduino mega et avec une interface RS232 > arduino composer d'un transitor et 2 resitances

le tout fonctionne bien quant j'envoi quelle que chose via RS232 l'arduino recoi et me l'affiche sur le serial en usb 

le problème est que j'aimerai filtrer les informations que la carte recoi en RS232

l'appareil en question envoi une phrase et fait un saut a la ligne une foi sa phrase fini etc ...

mon appareille envoi une commade genre " + 1001 A2 test echec"
et le but j'aimerai que l'arduino ne traite que un bout de la commade

pour l'exemple j'aimerai fair basculer une sortie selon si elle recoi "1001" ou "1002" dans la commande

mais l'arduino semble "lire" le premier caractère, regarder ce qu'elle peut fair, puis lire le seconde caractère

dans mon exemple je veut que si elle recoi 1001 elle allume la led et 1002 elle éteint la led

mais si j'envoi 1001 elle allume deux fois la led
si j'envoi "1" elle allume la led
si j'envoi 000000001 elle allume la led

voila en gros je cherche a fair un filtre pour un mot entier bien précis

mon code

Code: [Select]
#include <SoftwareSerial.h>

SoftwareSerial portOne(10, 11);

int led = 13;
char rxChar= 0;
void setup() {
 
 
  pinMode(led, OUTPUT);

  Serial.begin(9600);
  while (!Serial) {
    ;
  }


  // Start each software serial port
  portOne.begin(9600);
 
}

void loop() {
 
  portOne.listen();

  if (portOne.available() > 0) {
 rxChar = portOne.read();
 
  delay(10);
 
  switch (rxChar) {
   
    case '1001':                       
if (digitalRead(led) == LOW){     
          digitalWrite(led,HIGH);     
          Serial.println("LED turned On");
}
        else Serial.println("LED already On!");
        break;

    case '1002':
                           
if (digitalRead(led) == HIGH){     
          digitalWrite(led,LOW);       
          Serial.println("LED turned Off");
}
        else Serial.println("LED already Off!");
        break;
 
 
 
  }



}
   Serial.flush();
}



merci a vous

vohu

#1
Sep 11, 2015, 08:31 am Last Edit: Sep 11, 2015, 08:32 am by vohu
T'as plein de solutions pour faire ce que tu veux :

Soit tu découpes ta chaine à chaque [espace], et si tu as toujours le même nombre d'espace dans ta chaine, tu peux ensuite tester celle qui t'intéresse. (cherche sur internet comment reproduire une fonction split)

Soit, tu recherches directement dans ta chaine les valeurs qui t'intéresse.

Voici quelques fonctions qui pourraient t'intéresser : En C :
- scanf
- strcspn
- strstr
- strrchr
- strtok

En C++ :
- la fonction find de string


Go Up