Go Down

Topic: liaison arduino --> pc (Read 604 times) previous topic - next topic

minkaze


i need help !

En utilisant le "moniteur série" de l'environnement de développement Aduino (ou un autre émulateur de terminal), Vous établirez une communication entre le PC et la carte qui sera programmée pour respecter le cahier des charges suivants :

  -  Si le PC envoie la chaine de caractères "<ESC>AN0", Arduino retourne la valeur de la voie analogique AN0 sur 1, 2, 3 ou 4 chiffres codés en ASCII (de "0" à "1023"), suivis du caractère <ETB>
   
- Idem pour la voie AN1

quelqu'un peut il m'expliquer comment faire le programme svp :)

Grag38

En gros :

Quand tu as créer ton soft et que tu l'a uploader dans l'arduino, celui s'execute.

Avec le même soft qui t'a servi à réaliser ton programme et l'uploader, tu peux aussi ouvrir une fenetre qui va permettre de 'communiquer' avec l'arduino par le biais du port série de l'arduino. Cette comunication se fait grace au chipset fttdi et passe par l'usb.

Pour ouvrir cette fenetre, il faut cliquer en haut à droite de l'ide sur l'icone qui représente une loupe.

Le reste c'est à toi de le faire. Lis les tutos de l'arduino.

guix

#2
Nov 22, 2012, 11:22 am Last Edit: Nov 22, 2012, 11:44 am by guix Reason: 1
Quelque chose comme ça..

Code: [Select]

void setup()
{
 Serial.begin(9600);
}

void loop()
{
 delay(100);
 
 char input[8];
 uint8_t i = 0;
 
 while ( Serial.available() > 0 && i < 7 )
   input[i++] = Serial.read();
 
 input[i] = '\0';
 
 char c;
 uint8_t d;
 
 if ( sscanf( input, "%cAN%d", &c, &d ) == 2 )
 {
   if ( c == 0x1B && d >= 0 && d <= 15 )
   {
     char output[8];
     sprintf( output, "%d%c", analogRead( d ), 0x17 );
     Serial.println( output );
   }
 }
}


En plus ça lis n'importe quelle entrée analogique de 0 à 15, pas seulement 0 ou 1 :)

Je n'ai pas mis de commentaires exprès, comme ça tu dois chercher un peu pour comprendre le code :)


guix

De rien, je ne suis pas sûr pour le "<ESC>", est-ce le caractère ESC ou vraiment la chaine de caractère "<ESC>", auquel cas tu dois changer ces parties du code comme suit:
Code: [Select]

  char input[12];
  ...
  while ( Serial.available() > 0 && i < 11 )
  ...
  char c; // supprime cette variable inutile
  ...
  if ( sscanf( input, "<ESC>AN%d", &d ) == 1 )
  {
    if ( d >= 0 && d <= 15 )
    {


Voilà bonne chance :)

Go Up