
programmation serial
#1
Posté 29 décembre 2011 - 12:07
j'ai un problème de code j'aimerai que quand j’écris quelque chose dans la moniteur arduino fasse une action bien précise mais je ne trouve pas de commande .
par exemple si j’écris avant dans le moniteur mes moteur tourne jusqu’à que j’écrive stop dans le moniteur.
que faire ? quelle est la fonction?
merci d'avance
#2
Posté 29 décembre 2011 - 02:11
Page Facebook : https://www.facebook...appartelier2.0/
Page Twitter : https://twitter.com/2Appartelier (bateau seulement)
Boutique Robot-Maker : https://www.robot-ma...er-20/produits/
Besoin d'une impression 3D grand format ? Contactez moi !
#3
Posté 29 décembre 2011 - 09:41
Malédiction du Créatif :
Plus vous avez d’idées et moins vous arrivez à les structurer.
#4
Posté 29 décembre 2011 - 10:38
Il faut lire le port série :
http://arduino.cc/en/Serial/Read
j'ai déjà essayer mais je n'ai pas réussi
je ne sais pas comment l'utiliser et même en regardant les exemple je ne comprend pas comment lire .
j'ai déjà fait ça mais je n’arrive pas a mettre plusieurs lettres a la fois pour faire un mot
(celons la lettre écrite il allume plus ou moins longtemps un LED)
nt ledPin = 9; // j'initialise une led void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } if (Serial.available() > 0) { //si il y a une valeur dans le serial char valeur = Serial.read(); // je lit les donne envoyer ( celle que jenvoie a arduino par le pc) switch(valeur) { //je defini les condition case 'a': // si il lit un a analogWrite(ledPin, HIGH); //j'allume la led delay(1000);//j'attend 1sec analogWrite(ledPin, LOW); //j'etain case 'c': //pareile analogWrite(ledPin, HIGH); delay(500); analogWrite(ledPin, LOW); case 'd': analogWrite(ledPin, HIGH); delay(100); analogWrite(ledPin, LOW); } }
#5
Posté 31 décembre 2011 - 07:01

#6
Posté 04 janvier 2012 - 01:16
Je découvre "un peu" votre post, avez vous trouvé une solution ?
Comment réagit votre programme, votre led reste continuellement allumée ou éteinte ?
Je ne suis pas un habitué de l'instruction switch, mais il semble que l'instruction "break" soit à la fin de chaque "case".

#7
Posté 04 janvier 2012 - 01:30
L'instruction break est utilisée pour sortir d'une boucle do, for ou while, en passant outre le déroulement normal de la boucle. Cette instruction est également utilisée pour sortir d'une instruction switch.
Sinon je tes trouvais un tuto ( un sujet ) que j'ai trouvais sur le net sa pourrai t’être utile je pense Mon lien
#8
Posté 05 janvier 2012 - 12:41
Bon Voila je me suis permis de corrigé ton code.
Moi je ne savais même pas que c'été possible de contrôlé des LED ou AUTRE avec le
serial monitor du logiciel Arduino.
J'ai trouvais que pour moi ça été a c'est facile de contrôlé une LED , je me suis
même amusé a contrôlé mon robot sa été marrant.
Bref , comme je m'ennuyer je me suis permis de faire ton code de plus tu avais fait
pas mal d'erreur.
Donc voici le code que je tes fait et cela marche très bien puisque je les testé avec
une de mais LED.
int ledPin = 9; // j'initialise une led void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } void loop(){ if (Serial.available() > 0) { //si il y a une valeur dans le serial char valeur = Serial.read(); // je lit les donne envoyer ( celle que jenvoie a arduino par le pc) switch(valeur) { //je defini les condition case 'a': // si il lit un a digitalWrite(ledPin, HIGH); //j'allume la led delay(1000); digitalWrite(ledPin, LOW); break; case 'c': //pareile digitalWrite(ledPin, HIGH); delay(500); digitalWrite(ledPin, LOW); break; case 'd': digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); } } }
Voici ton code a toi avec les erreurs.
nt ledPin = 9; // j'initialise une led void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } if (Serial.available() > 0) { //si il y a une valeur dans le serial char valeur = Serial.read(); // je lit les donne envoyer ( celle que jenvoie a arduino par le pc) switch(valeur) { //je defini les condition case 'a': // si il lit un a analogWrite(ledPin, HIGH); //j'allume la led delay(1000);//j'attend 1sec analogWrite(ledPin, LOW); //j'etain case 'c': //pareile analogWrite(ledPin, HIGH); delay(500); analogWrite(ledPin, LOW); case 'd': analogWrite(ledPin, HIGH); delay(100); analogWrite(ledPin, LOW); } }
Donc d'une part tu as mal déclaré ta LED
nt ledPin = 9; // j'initialise une led
Tu as oublier le i de int bon c'est rien c'est une erreur de frappe on vas dire.
après tu mais des:
analogWrite(ledPin, LOW);
la j'ai pas compris tu aurais du mètre des:
digitalWrite(ledPin, LOW);
Et sur chaque cas il faut rajouté un break; sa te permet de sortie de la boucle.
Voila axelou19
#9
Posté 05 janvier 2012 - 04:37
j'ai esayer sa
j'ai defini octet
if(octet == 'bonjour'(ce ne macrhe pas
puis j'ai essayer ca
if(octet == 'b' && octet == 'o'...(mais aucun des deux ne marche comment faire ?
#10
Posté 05 janvier 2012 - 05:51
Désolé si je te réponds que maintenant je viens tout juste de rentrée du taf.
Bon je tes faits un morceau de code qui ma pris 15 minutes il et a c'est simple .
A toi de combiné le morceau de code que je te passe avec se que tu veux faire.
tien moi au courant.
int ledPin = 9; // j'initialise une led //Déclaration de la variable contenant la valeur de la touche saisi au clavier int octetRecu; void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } void loop(){ if (Serial.available() > 0) { //si il y a une valeur dans le serial // Lecture de l'octet présent dans la mémoire tampon (buffer) octetRecu = Serial.read(); if (octetRecu == 'A' || octetRecu == 'a') //Si l'octet recuz est égal à A ou a { digitalWrite(ledPin, HIGH); //Allume la LED A Serial.println("allume"); //Affiche "allume" la LED série } if (octetRecu == 'E' || octetRecu == 'e') //Si l'octet recu est égal à E ou e { //Eteindre la LED connectées digitalWrite(ledPin, LOW); Serial.println("eteinte");//Affiche " eteinte" dans le moniteur série } } }
#11
Posté 05 janvier 2012 - 08:12
merci mais tu ne prend que le a moi j'aimerai controle en ecrivant un mot entier et pas juste une seul lettre
int ledPin = 9; // j'initialise une led //Déclaration de la variable contenant la valeur de la touche saisi au clavier int octetRecu; void setup() // inisialisation des interface { Serial.begin(9600); // je commence le serial a 9600 bit par seconde pinMode(ledPin, OUTPUT); //je define la led en sortie } void loop(){ if (Serial.available() > 0) { //si il y a une valeur dans le serial // Lecture de l'octet présent dans la mémoire tampon (buffer) octetRecu = Serial.read(); if (octetRecu == 'A' || octetRecu == 'a') //Si l'octet recuz est égal à A ou a { digitalWrite(ledPin, HIGH); //Allume la LED A Serial.println("allume"); //Affiche "allume" la LED série } if (octetRecu == 'E' || octetRecu == 'e') //Si l'octet recu est égal à E ou e { //Eteindre la LED connectées digitalWrite(ledPin, LOW); Serial.println("eteinte");//Affiche " eteinte" dans le moniteur série } } }
#12
Posté 05 janvier 2012 - 09:47
#14
Posté 03 février 2012 - 03:41
Tu as un protocole déjà developpé par la communauté Arduino qui t'aide à faire ce que tu cherches. Ca s'appelle FIRMATA: voici le lien de la page officielle: http://firmata.org/wiki/Main_Page
Si la langue de Shakespeare te dérange, voici un tuto en français: http://www.mon-club-...ibrairieFirmata
Si tu cherches à refaire un protocole, il est possible de lire un mot entier par l'Arduino mais cela n'a que peu d'intérêt et va te "bouffer du code" inutilement. Par contre, rien ne t'empeche d'écrire le mot entier dans ton moniteur et de ne lire sur Arduino que la première ou les 2,3 premières si certaines commandes commencent de la même façon.
Hope this helps

Roboteer
3 utilisateur(s) li(sen)t ce sujet
0 members, 3 guests, 0 anonymous users