Pages: [1]   Go Down
Author Topic: Envoyer une chaine de caractères sur le port serie  (Read 1221 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 4
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Belgium
Offline Offline
Jr. Member
**
Karma: 1
Posts: 80
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

tu peux utiliser la librairie "serial"

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

regarde les exemples pour chaque fonction

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

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

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)
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 39
Posts: 3599
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged


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

WOW!

Géniale cette doc! Merci B@tto!
Logged

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

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);
      }
}
Logged

Pages: [1]   Go Up
Jump to: