Agir en fonction du moniteur série

Bonjour,

Je voulais juste savoir s'il est possible de interagir le moniteur série et la carte arduino. Je m'explique, je souhaiterais faire avancer un moteur par exemple que s'il est écrit sur le moniteur série "go" par exemple.

Merci !

Bonsoir,

Zaminus: Bonjour, Je voulais juste savoir s'il est possible de interagir le moniteur série et la carte arduino. Je m'explique, je souhaiterais faire avancer un moteur par exemple que s'il est écrit sur le moniteur série "go" par exemple. Merci !

Oui, regarde un peu l'utilisation du port série

ok merci !

Par contre je ne vois pas exactement comment lire constamment le port série et trier les informations de façon à ce que si on écrit go dans le moniteur série le moteur avance puis stop, s'arrête par exemple. Je voudrais utiliser le moniteur série pour communiquer avec un serveur TCP mais également pour recevoir les informations de celui-ci. Et donc j'ai peur que informations arrivent en vrac et que le tout ne soit plus supporté. Sais-tu comment y palier ?

Le port série possède un buffer, donc tu peux être "occupé à autre chose" que les informations ne seront pas perdues. Il faut néanmoins vérifier s'il y a des infos à récupérer assez régulièrement puisque ce buffer a une taille donc au bout d'un moment il est plein !

Il suffit de tester régulièrement :

if (Serial.available()) {

int i=0;
char Buffer[50] = {NULL};

while (Serial.available()) Buffer[i++]=Serial.read();

// à partir de la Buffer contient tous les caractères reçus 

}

Je viens de tester et ça ne marche pas :/

j'arrive à contrôler une led avec le moniteur seul, tout va bien. Mais lorsque que j'essaye de faire de même avce le serveur TCP, cela ne marche plus. Lorsque le serveur envoie la lettre H (correspondant à la led allumée), "HH" s'écrit sur le moniteur série et rien ne se passe.

Penses-tu qu'il faut plutôt que j'allume ma led si je reçois "HH" plutôt que H ? et au passage comment faire dans ce cas, j'ai pas très bien compris les tutos. Et autre chose que je trouve bizarre: quand je contrôle la led directement avec le moniteur série (sans le serveur), si j'écrit H dans le moniteur, la lettre ne s'affichera pas à l'écran tandis qu'avec le serveur si.

Merci pour ton aide !

Disons qu'il nous faudrait ton code la pour répondre

Zaminus: Penses-tu qu'il faut plutôt que j'allume ma led si je reçois "HH" plutôt que H ?

Teste simplement si le 1er caractère est "H". Ça marchera dans les 2 cas.

micol : Ok, dans ce cas mon code ne marche pas.

B@tto : alors j’utilise le shield wify de seeestudio (http://www.seeedstudio.com/wiki/Wifi_Shield_V1.1) avec une carte arduino uno. la bibliothèque du shield : GitHub - Seeed-Studio/WiFi_Shield: WiFi library using WiFly

Dans ce code je commence déjà par initialiser le shield et à établir une connexion avec un serveur TCP. Suite au téléversement, si j’utilise la fonction Wifly.writeToSocket, je peux envoyer des infos au serveur (en passant pas le moniteur car l’info s’écrit sur le moniteur puis et reçue par le serveur). Et moi je souhaiterais contrôler une led pour commencer en fonction d’une consigne envoyée par le serveur.

#include "Wifly.h"
#include <SoftwareSerial.h>
WiflyClass Wifly(2,3);

int led = 13;
int incomingByte;      
void setup() 
{
  // initialize serial communication:
  Serial.begin(9600);

  pinMode(led, OUTPUT);
  
  Wifly.init();//Initialize the wifishield
  Wifly.setConfig("SSID","PASSWORD");//here to set the ssid and password of the Router
  Wifly.join("SSID");
  Wifly.checkAssociated();
  while(!Wifly.connect("192.168.1.23","8080"));//connect the remote service
  Wifly.writeToSocket("Connected!");
}

void loop() 
{
  
  if(Wifly.canReadFromSocket())
  {
    Serial.print(Wifly.readFromSocket());
    char c = Serial.read();
    Serial.println("Valeur arduino:");
    Serial.println(c);
    
    if(c == H)
    {
      digitalWrite (led, HIGH);
    }
    else
    {
      digitalWrite(led, LOW);
    }
  
  if(Serial.available())
  {
    Wifly.println((char)Serial.read());
  }
  
  
}

Bah tu traites une réception série alors que tu veux des ordres via TCP. Enfin en tout cas tout est mélangé la, je comprends plus rien. Au début tu nous dis que tu veux commander une led via série, maintenant tu nous parles de TCP ... Bref pas clair du tout ton histoire ... En attendant, ça ça allumera une led via série :

void loop() 
{
  
  if(Serial.available())
  {
 char c = Serial.read();
    Serial.println("Valeur arduino:");
    Serial.println(c);
    
    if(c == 'H')
    {
      digitalWrite (led, HIGH);
    }
    else
    {
      digitalWrite(led, LOW);
    }
    
  }
  
  
}

Je me suis mal exprimé désolé...

En fait, je cherche à contrôler la led via le serveur tcp, seul problème je comprends rien à rien à la documentation de mon shield. Je ne vois donc pas concrètement comment utiliser les informations que je reçois par le bais du serveur. Cependant, j'ai quand même effectué quelques tests et je me suis rendu compte que lorsque mon serveur envoie une info, celle-ci apparaît sur le moniteur série (en double visiblement) Donc je voulais essayer de contrôler ma led en fonction de l'info envoyée par le serveur et affichée sur le moniteur série.

Ok donc essais :

#include "Wifly.h"
#include <SoftwareSerial.h>
WiflyClass Wifly(2,3);

int led = 13;

void setup() 
{
  // initialize serial communication:
  Serial.begin(9600);

  pinMode(led, OUTPUT);
  
  Wifly.init();//Initialize the wifishield
  Wifly.setConfig("SSID","PASSWORD");//here to set the ssid and password of the Router
  Wifly.join("SSID");
  Wifly.checkAssociated();
  while(!Wifly.connect("192.168.1.23","8080"));//connect the remote service
  Wifly.writeToSocket("Connected!");
}

void loop() 
{
  
  if(Wifly.canReadFromSocket())
  {
     char Buffer[50]={NULL};
   int i =0;
  while(Wifly.canReadFromSocket()) {
     Buffer[i]=Wifly.readFromSocket()
      Serial.print(Buffer[i++]);
  }
    
    if(Buffer[0] == 'H')
    {
      digitalWrite (led, HIGH);
    }
    else
    {
      digitalWrite(led, LOW);
    }
  
  if(Serial.available())
  {
delay(20);
while(Serial.available())  Wifly.println(Serial.read());
  }
  }

MERCI !!!

Donne moi ton adresse que je t'envoie des fleurs !! Franchement je ne saurais jamais assez te remercier !! Merci infiniment, ça marche du tonnerre j'ai juste eu à rajouter un petit délai et hop !

Encore merci ! :D