Go Down

Topic: Envoyer une chaine de caractères sur le port serie (Read 1 time) previous topic - next topic

Ddall

Bonjour,

Je cherche a écrire un petit programme pour contrôler la couleur d'une LED RGB.
L'idée est d'envoyer la couleur souhaitée sous la forme d'un code hexadecimal (genre 'FB9A49'), et de la stocker dans une variable pour l'utiliser ensuite.

Je ne sait vraiment pas comment m'y prendre pour résoudre ce problème. Quelqu'un saurait m'expliquer comment je dois m'y prendre?

Merci

Gozaki

tu peux utiliser la librairie "serial"

http://arduino.cc/en/Reference/Serial

regarde les exemples pour chaque fonction

Gozaki
----------------------------
www.laboelectronique.be

Ddall

Oui, pour le moment j'utilise serial de la facon suivante:

if( Serial.available())
{
  int incomingByte = Serial.read();
  Serial.println(incomingByte, BYTE);
}

Ça fonctionne très bien quand il s'agit d'envoyer un seul caractère à l'arduino. Par contre, je ne voit pas comment faire pour en envoyer 6 à la fois, et les stocker dans une seule variable. (je débute en C)

B@tto

J'ai pas mal galéré au début aussi avec ce genre de chose ^^

Tu trouveras ton bonheur ici je pense (en anglais par contre mais le code est facilement compréhensible) :

http://www.earthshineelectronics.com/files/ASKManualRev4.pdf

Pour résumé il faut utiliser des chaines de caractère que tu remplis à l'aide d'une boucle.
Blog électronique : http://battomicro.wordpress.com/
Photographie : www.interactive-celebration.fr

Ddall


Ddall

Voici le code qui marche:

Il suffit d'envoyer les valeurs rgb sous cette forme: r255 g152 b56 (l'ordre n'est pas important) et la couleur de la led est mise a jour.

// Project 10 - Serial controlled RGB Lamp

char buffer[18];
int red, green, blue;
int RedPin = 11;
int GreenPin = 10;
int BluePin = 9;

void setup()
{
     Serial.begin(9600);
     Serial.flush();
     pinMode(RedPin, OUTPUT);
     pinMode(GreenPin, OUTPUT);
     pinMode(BluePin, OUTPUT);
}

void loop()
{
     if (Serial.available() > 0)
     {
           int index=0;
           delay(100); // let the buffer fill up
           int numChar = Serial.available();
           if (numChar>15)
           {
                 numChar=15;
           }
           while (numChar--)
           {
                 buffer[index++] = Serial.read();
           }
           splitString(buffer);
     }
}

void splitString(char* data)
{
     Serial.print("Data entered: ");
     Serial.println(data);
     char* parameter;
     parameter = strtok (data, " ,");
     while (parameter != NULL)
     {
           setLED(parameter);
           parameter = strtok (NULL, " ,");
     }
     // Clear the text and serial buffers
     for (int x=0; x<16; x++)
     {
           buffer
  • ='\0';
         }
         Serial.flush();
    }

    void setLED(char* data)
    {
         if ((data[0] == 'r') || (data[0] == 'R'))
         {
               int Ans = strtol(data+1, NULL, 10);
               Ans = constrain(Ans,0,255);
               analogWrite(RedPin, Ans);
               Serial.print("Red is set to: ");
               Serial.println(Ans);
         }
         
         if ((data[0] == 'g') || (data[0] == 'G'))
         {
               int Ans = strtol(data+1, NULL, 10);
               Ans = constrain(Ans,0,255);
               analogWrite(GreenPin, Ans);
               Serial.print("Green is set to: ");
               Serial.println(Ans);
         }
         
         if ((data[0] == 'b') || (data[0] == 'B'))
         {
               int Ans = strtol(data+1, NULL, 10);
               Ans = constrain(Ans,0,255);
               analogWrite(BluePin, Ans);
               Serial.print("Blue is set to: ");
               Serial.println(Ans);
         }
    }

Go Up