Page 1 sur 1

[DEBUTANT] Couleur à la demande

Message non luPosté: Sam 3 Nov 2012 23:26
de boulou
Bonjour!

Je débute en programmation et en Arduino, et j'ai reçu un starter kit hier. J'ai fait quelques tutos jusque là, mais j'aimerais en apprendre plus sur la librairie Serial. En effet, j'aimerais programmer un montage comme celui en fichier joint.
Le but serait que, quand on rentre le nom d'une couleur (blanc, rouge, vert, bleu, cyan, magenta, jaune) dans le moniteur série, la carte Arduino allume les LEDs adéquates. Quel serait donc le bout de code qui permettrait de récupérer le nom de la couleur que l'utilisateur saisit, et s'il correspond à une des couleurs prédéfinies, alors les LEDs correspondantes s'allument!
Pour l'instant mon code ressemble à ça:
Code: Tout sélectionner
int redPin = 12;                  // La LED rouge est connectée au pin 12
int greenPin = 11;                // La LED verte est connectée au pin 11
int bluePin = 10;                 // La LED bleue est connectée au pin 10

void setup()                      // Début du sketch
{
  Serial.begin(9600);             // Initialisation de la librairie Serial à 9600 bps
  pinMode(redPin, OUTPUT);       // Indique que le pin de la LED rouge est une sortie
  pinMode(greenPin, OUTPUT);     // Indique que le pin de la LED verte est une sortie
  pinMode(bluePin, OUTPUT);      // Indique que le pin de la LED bleue est une sortie
}


void loop()                      // Initialisation de la boucle
{
  digitalWrite(redPin, HIGH);    // LED rouge activée
  digitalWrite(greenPin, LOW);   // LED verte désactivée
  digitalWrite(bluePin, LOW);    // LED bleue désactivée
  delay(1000);                   // Attente de 1000 ms
  digitalWrite(redPin, LOW);     // LED rouge désactivée
  digitalWrite(greenPin, HIGH);  // LED vertee activée 
  digitalWrite(bluePin, LOW);    // LED bleue désactivée
  delay(1000);                   // Attente de 1000 ms
  digitalWrite(redPin, LOW);     // LED rouge désactivée
  digitalWrite(greenPin, LOW);   // LED verte désactivée
  digitalWrite(bluePin, HIGH);   // LED bleue activée
  delay(1000);                   // Attente de 1000 ms
}

Re: [DEBUTANT] Couleur à la demande

Message non luPosté: Mar 6 Nov 2012 17:37
de Stéphane
Bonjour,

Pour cela, il y a généralement deux manières de faire.
Méthode 1 : Comparaison globale
L'utilisateur rentre une chaine de caractère, que vous comparez avec des chaines de caratères existantes, à l'aide de la fonction standard du langage C : strcmp
Exemple :
Utilisateur envoi "trololo".
Tests successifs avec les mots "vert", "violet", "blanc", "bleu", "rouge", etc. Si correspondance, alors déclencher les actions adéquates.

Méthode 2 : Caractère par caractère (validation en arbre)
Vous analysez le premier caractère rentré par l'utilisateur.
Si il correspond à un premier caractère valide (blanc, bleu, cyan, rouge, etc) vous comparez le second, et ainsi de suite pour déterminer le mot clé entré par l'utilisateur.
Exemple :
Utilisateur envoi "abricot".
- Premier caractère = "a" : pas de correspondance de couleur, fin de l'analyse.

Utilisateur envoi "vert".
- Premier caractère = "v" : coresspondance possible pour les mots "violet" et "vert". Test de la deuxième lettre.
Deuxième caractère = "e" : coresspondance possible pour le mot "vert" uniquement. Test du mot "vert", et actions en fonction de la validation ou pas.

Voila, bonne journée :)

Re: [DEBUTANT] Couleur à la demande

Message non luPosté: Mar 6 Nov 2012 20:15
de boulou
Merci beaucoup pour cette réponse très complète!!
J'ai beau rechercher, je ne trouve pas quel est la façon d'utiliser strcmp...

Re: [DEBUTANT] Couleur à la demande

Message non luPosté: Mar 6 Nov 2012 21:09
de telec16
Comme ça :
Code: Tout sélectionner
if(strcmp("chaine1", "chaine2") == 0)
{
  //choses à faire si les chaines corespondent
}

Re: [DEBUTANT] Couleur à la demande

Message non luPosté: Mar 6 Nov 2012 21:20
de Stéphane
Recherche google :

"language C strcmp" : lien

"arduino strcmp" : lien 1, lien 2

"arduino string" : lien 1

Voila :)

Re: [DEBUTANT] Couleur à la demande

Message non luPosté: Mer 7 Nov 2012 09:08
de boulou
Merci beaucoup! Je posterais mon code quand il sera fini!