Le forum a migré vers l'adresse suivante:

Forum

Masquer ce message

Simple-Duino Index du Forum



[Résolu] Serial.read() pour ajuster les delays


 
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions
Sujet précédent :: Sujet suivant  
Auteur Message
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Ven 3 Jan - 11:04 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

PublicitéSupprimer les publicités ?
Salut tout le monde !!
Allez, à mon tour de poser une question :
Utilisant rarement les Serial.read(), je n'arrive pas à ajuster le temps d'un delay par Serial.read.
Je m'explique:
L'utilisateur entre 100 dans le Serial monitor, le i de delay(i) passe à 100 et ainsi de suite
En fait je doit réussir à régler la durée du delay par un Serial.read.
Le problème c'est que le clavier est encodé et que je ne sais pas le décoder ( exemple : 0 = 69 ) De plus, si je rentre 10 alors je me retrouve avec 69 68    Je comprend vraiment pas ça


Pour tout vous dire, c'est pour contrôler des bobines pour un moteur linéaire.
Merci à tous pour ce que vous faites pour ce forum, continuez comme ça pour 2014, on vous réserve des surprises !!


N'oubliez pas de suivre @ArduinoLeforum et @TutoArduino pour être au courant des dernières actus relatives au groupe TutoArduino !!
____________________________
http://simple-duino.com


Dernière édition par Admin le Mar 7 Jan - 12:01 (2014); édité 1 fois
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Lun 6 Jan - 12:45 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

Salutations,

Pouvons-nous voir la portion de code?
Ne serait-ce pas plutôt 49 pour '1' et 48 pour '0' ?
Je n'ai jamais été confronté à ce cas, mais as-tu essayé la fonction int()?

Que te donne le résultat de ceci?
Code:

 int(CodeCarac); //Dans ton cas, CodeCarac = 69 ou 68.

Un problème de cast vraisemblablement, je teste cela dès que possible (probablement pas avant demain soir).
Par curiosité, comment vois-tu que cela te retourne 69 ou 68, tu affiches l'octet sur un port?

Bonne journée.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Lun 6 Jan - 16:03 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

Oui j'affiche l'octet sur un port et oui les valeurs sont de 48 et 49, j'ai fais ça de mémoire et... J'aurais pas dû !!


en faite mon code est assez simple:


void setup(){
      Serial.begin(9600);
}
void loop(){
     if(Serial.available()){
             int val = Serial.read();
             Serial.println(val);
             Serial.flush();
     }
}


Bien entendu, je n'ai ici que le script me permettant de lire l'octet reçu mais j'aimerais passer cet octet ( codé en je ne sais quel format ) en du "compréhensible humain" 0=48 c'est pas clair quand même ...


J'avais trouvé ça :
Convertir byte en int:  int valeur_int = valeur_byte-'0';
Vus ici: http://forum.arduino.cc/index.php?topic=44055.0


Mais je n'ai pas encore eu le temps d'essayer et dans tout les cas je recevrais d'abord un 1 puis un 0 pour faire un 10 or moi je veux 10 quand je tape 10 !!
____________________________
http://simple-duino.com
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Lun 6 Jan - 17:00 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

Ok. Le code en question s'appelle du code ASCII, une manière de coder des caractères.
Tu peux taper ASCII dans ton moteur de recherche préféré pour voir à quoi cela correspond.

Si j'ai bien saisi ton souci, tu envoies caractère par caractère et tu souhaite envoyer la ligne en une fois.
Je n'ai jamais utilisé read(), mais selon la doc, ceci ne permet de lire qu'un seul caractère, et pas une chaîne.

Plusieurs options :
1 : Soit tu utilises readBytes, soit readByteUntil. je te laisse voir la doc à ce sujet.
2 : Soit tu boucles en stockant les caractères entrants dans une liste, jusqu'à ce que tu reçoivent le caractère Entrée ('\n') ou null ('\0').

Bien sur, tout cela ne résout pas ton problème de codage, là encore, 2 possibilités :
1 : Tu t'attends à ne recevoir que des chiffres : tu enlève 48 à ton caractère obtenu.
2 : Tu castes la valeur pour transformer ton caractère en entier avec la fonction int().

Pour info, je ne te donne que des pistes, je n'ai jamais eu l'occasion de tester ces cas de figures, n'étant pas encore été confrontés à ces cas.
Je teste plus tard dans la semaine, si tu as la patience, je te communiquerai mes résultats.

Bonne journée.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Lun 6 Jan - 18:02 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

 
Citation:
 ASCII
En plus je connais l'ASCII...
____________________________
http://simple-duino.com
Revenir en haut
CD74HC74
Débutant

Hors ligne

Inscrit le: 03 Jan 2014
Messages: 23
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mar 7 Jan - 00:56 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

Bonsoir,

J'ai réalisé quelques tests à ce sujet. Pour voir le caractère que tu as envoyé au la platine, il faut que tu déclare ta variable, non pas en tant qu' int, mais en tant que char :
Code:

char val = Serial.read(); 
Le souci, avec cette méthode, est que si tu souhaite l'insérer dans une fonction delay(, tu auras quelque chose de fantaisiste.
 
 La solution que je te propose consiste en ceci :
 Tant que la ligne émet :
  1. On stocke la valeur reçue diminuée de 48 dans un tableau, non pas l'entier ASCII, mais l'entier correspondant au caractère.
  2. On régènere l'entier à partir de la chaine envoyée.
 
Le code fonctionne, mais il y a quelques limites : ne pas envoyer plus de 4 caractères (parce que j'ai imposé 4 dans mon exemple) et ces caractères doivent obligatoirement être numériques, au risque de retrouver des valeurs fantaisistes. Pour plus de sûreté, je te laisse le soin d’implémenter les limitations qui conviennent.
Pour le moment, cela devrait t'aider.
 

 
Code:
void loop()
{
  int index = 0; //RESET
  int tabReceive[4] = {0,0,0,0}; //RESET
  int result = 0; //RESET
 
  while(Serial.available())
  {
    int val = Serial.read();
    tabReceive[index] = val-48;
    Serial.println(val-48);
    
    result = (result*10)+tabReceive[index];
    index +=1;
    Serial.println(result);
    Serial.flush();
  }



Bonne nuit.
____________________________
Le fleuron de l'électronique : La Bascule D Flip-Flop Edge-Triggered
Revenir en haut
Admin
Fondateur

Hors ligne

Inscrit le: 12 Avr 2012
Messages: 860
Masculin
Niveau d'éléctronique: Pro

MessagePosté le: Mar 7 Jan - 12:01 (2014)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays Répondre en citant

Ok merci !!
C'est en testant se propre communauté qu'on se rend conte du pouvoir du forum Wink
____________________________
http://simple-duino.com
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 20:20 (2017)    Sujet du message: [Résolu] Serial.read() pour ajuster les delays

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Simple-Duino Index du Forum -> Arduino & Électronique -> Questions Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB
Propulsé par Simple-Duino