IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Remplacer un HC-06 par un HC-08


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Le code est correct avec serial3.
    Oui je l'ai vérifié en le rentrant dans la MEGA normale et il fonctionne bien: les commandes émises par mon Smartphone sont reçus par la MEGA qui les affiche sur le Moniteur série, caractère après caractère.

    Les pins sont bien celles que vous mentionnez, il faut croiser Tx et Rx et bien sûr relier les GND en plus.
    j'ai relié ainsi et sur la MEGA normale ça fonctionne bien, alors que ça ne fonctionne toujours pas sur la Pro Mini....


    L’alimentation des deux modules doit aussi être au même voltage je pense pour que les niveaux logiques correspondent
    L'alimentation des cartes se fait par le câble USB venant du PC, y compris dans le cas de la MEGA mini où j'ai supprimé ma propre alim pour éviter tout problème qui pourrait lui être imputable.

    Ensuite je prends les sorties 5V et GND des cartes pour alimenter le HC08, lequel dispose d'un pont diviseur (1K et 2.2K) pour protéger RX.

    Cet après-midi je vais revérifier qu'il n'y a pas d'erreur de câblage au niveau du pont du HC08, en le refaisant de A à Z sur une plaque d'essai, car hier je devenais nerveux et dans ces cas là on ne voit plus des choses évidentes.


    J'ai aussi sorti une nouvelle carte MEGA Pro Mini au cas où celle que j'ai utilisée jusqu'à présent soit défectueuse: on ne sait jamais, c'est rare mais ça m'est arrivé le mois dernier avec une Nano qui était foireuse.
    Je vais la câbler sans la souder sur mon circuit imprimé (même si je sais qu'il est bon puisque j'en ai déjà utilisé pour d'autres projets) avec des câbles Dupont.

    C'est une histoire de fou ce truc, un point basique à côté de ce que j'ai déjà fait, mais qui me bloque tout alors que ça fonctionne sur une MEGA normale...

    Je reviens vers toi après avoir essayé cet après-midi

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    On y est presque !

    Je viens de tester avec une nouvelle carte MEGA Pro Mini, et cette fois la carte reçoit les infos du HC08, mais ce n'est pas encore parfait pour autant.

    Visiblement la MEGA Pro Mini que j'utilisais était foireuse ! (j'avais déjà eu le cas avec une Nano il y a quelques mois)

    Parfois au lieu d'afficher "Reading from Bluetooth", elle affiche "Re⸮eing ⸮y⸮61luetooth":
    Nom : car biz_s.jpg
Affichages : 117
Taille : 227,5 Ko

    et beaucoup plus grave parce que ça empêcherait le traitement correct commandes, parfois les caractères reçus du Smartphone semblent corrompus:
    Nom : car biz2_s.jpg
Affichages : 134
Taille : 312,6 Ko
    sauf si c'est la transmission de la carte au Moniteur qui déconne et pas la réception ??

    Est-ce que ça pourrait être dû à une vitesse insuffisante ? elle est définie à 9600 pour Serial3 dans le programme, mais peut-être que le HC08 a une vitesse par défaut qui est supérieure à 9600 ?? (mais il me semble que par défaut le HC08 communique à 9600, donc je n'y crois pas trop...).

    Ou peut-être des câbles Dupont de mauvaise qualité ?

    Vous en pensez quoi ?

    Edit de 17h23:
    J'ai ENFIN trouvé : il fallait juste augmenter la vitesse du Moniteur Série à 115.200 pour que l'affichage se fasse correctement, et laisser la vitesse du HC08 à 9600: je suppose que la MEGA prenait trop de temps à afficher sur le Moniteur série avant que le caractère suivant du HC08 arrive, ou quelque chose du genre.
    Bref maintenant c'est OK, il faut donc que je reprenne mon programme complet qui récupère la String complète du HC08 et non pas caractère par caractère !

    Je passerai en résolu quand la substitution HC->HC08 sera réellement réussie !!

    Que de temps perdu !

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Voilà, j'ai donc adapté le même principe à mon gros programme, et désormais ça fonctionne parfaitement !

    Le liste des emmerdes que j'ai eues sur ce coup là est impressionnante, mais ça pourra en aider d'autres:
    -carte défectueuse à changer
    -utiliser un des 3 Serial de la Mega (Serial1, 2 ou 3)
    -vitesse du Moniteur série à augmenter
    -câble USB défectueux à remplacer

    Mais avec de la ténacité on arrive au bout !

    Je passe en résolu et merci à tous ceux qui m'ont aidé !

  4. #4
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Bravo - ne pas baisser les bras ça paye!!

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Par défaut
    Bonjour, j'ai suivi cette discussion avec un grand intérêt et curieux d'en connaître la finalité.
    J'avais eu le même souci lorsque j'ai joué avec le bluetooth mais je ne me souvenais plus du pourquoi;, il y a un tampon de 64 octets et si on ne récupère pas les octets à temps, ça devient n'importe quoi. C'est la raison pour laquelle, il est préférable de mettre des balises et d'acquitter la réception des données si elles sont très importantes avant nouvel envoi.

    Merci pour le retour et bravo.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 107
    Par défaut
    Dans mon cas l'émission des données est assez lente (max 17 caractères lorsqu'on appuie sur un bouton, donc très peu), mais lorsque la vitesse du Moniteur série était réglée sur une valeur trop basse (9600 p.ex), je pense que le temps pour transmettre les infos au Moniteur série était trop long, et donc peut-être que la récupération des données Bluetooth était perturbée (?)... Le passage à 115.200 bauds a réglé tous les ennuis.

    Mais en plus de cela il y avait quend même une carte MEGA Pro Mini défectueuse et un câble USB qui est allé la rejoindre à la poubelle !

    J'ai maintenant tout ressoudé sur un circuit imprimé et je testerai demain.

    C'est la raison pour laquelle, il est préférable de mettre des balises et d'acquitter la réception des données si elles sont très importantes avant nouvel envoi.
    Et tu les places comment ces balises ? car ça je n'ai toujours pas compris !

  7. #7
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 922
    Par défaut
    Pour les balises je pense qu’il veut dire un marqueur de début et de fin de message - des caractères en plus qui permettent de délimiter une communication ce qui permet de mieux gérer la nature asynchrone de cette communication.
    L’acquittement permet lui de dire à l’émetteur que l’on a bien reçu le message.

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Par défaut
    Bonjour,

    Jay M l'a bien expliqué, c'est cela.

    Je vous ai fait un exemple pour vous donnez une idée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
     
    // gestion bluetooth avec balises et acquittement (envoyé mais non géré car il doit être codé aussi
    // du coté de l'application qui envoie les données)
    // format de la chaine à envoyer
     
    // J'ai pris le format d'une app android Bluetooth electronics
    // en choisissant un pad et en définissant un caractère de début et de fin, cela donne:
    // < sera le caractère de début de la chaine et > sera le caractère de fin de la chaine
    // <X111,Y222>  13 caractères mais 15 permis soit 4 chiffres possibles par variable
    // mais attention le signe moins '-' est autorisé et dans ce cas, cela donne:
    // 9999 à -999 sont donc les valeurs max possibles pour les variables sans dépasser la longueur de la chaine autorisé
     
    // vous pouvez modifier la variable maxCaracteres pour augmenter ou diminuer la longueur de la chaine
    // en prenant les valeurs max que vous souhaitez sans omettre le signe '-' le cas échéant.
    // la virgule sépare les données
     
     
    int x = 0, y = 0; // variables pour le traitement de la chaine avec les valeurs par défaut
     
    int compteur;
    byte start = 0;
    char valeur = ' ';
    const int maxCaracteres = 15;
    char receptionBluetooth[maxCaracteres + 1]; // +1 pour le caractère de fin de chaine
    unsigned long myTime = 0;
     
     
    void setup() {
      Serial1.begin(9600);  // port de com avec le module bluetooth
                            // à modifier selon votre carte arduino
     
      Serial.begin(9600);   // port USB relier au PC (c'est celui par défaut)
                            // vous n'aurez normalement pas à le modifier
      while (!Serial) {
        // wait
      }
      Serial.println("Prêt à recevoir");
    }
     
    void loop() {
      char * recherche;
     
      if (Serial1.available()) {
        valeur = Serial1.read();
     
        //Serial.println(valeur);
     
        if (valeur == '<') {
          compteur = 0;
          start = 1;
          memset(&receptionBluetooth, 0, maxCaracteres + 1);
          receptionBluetooth[compteur] = valeur;
        }
     
        if (start) {
          compteur++;
          if (compteur <= maxCaracteres) {
            receptionBluetooth[compteur] = valeur;
          } else {
            start = 0;
            valeur = ' ';
            Serial.println("Echec, Prêt à recevoir de nouveau");
          }
        }
     
        if (valeur == '>') {
          start = 0;
          valeur = ' ';
     
          recherche = strchr(&receptionBluetooth[0], 'x');
          if (recherche != NULL) {
            x = atoi(recherche + 1); //<X111,Y222>
            // recherche pointe sur x
            // on ajoute + 1 pour qu'il pointe sur la premier chiffre
            // soit le 1 ici dans cet exemple
            // la fonction atoi va convertir tous les caractères correspondant à des chiffre en une valeur numérique
            // il s'arrêtera au premier caractère ne correspondant pas à un chiffre
          }
     
          recherche = strchr(&receptionBluetooth[0], 'y');
          if (recherche != NULL) {
            y = atoi(recherche + 1); //<X111,Y-222>
            // recherche pointe sur y
            // on ajoute + 1 pour qu'il pointe sur la premier chiffre
            // soit le 1 ici dans cet exemple
            // la fonction atoi va convertir tous les caractères correspondant à des chiffre en une valeur numérique
            // il s'arrêtera au premier caractère ne correspondant pas à un chiffre
          }
     
          Serial.println("-------------");
          //Serial.print(recherche);
          //Serial.println(*recherche);
          Serial.print("x:");
          Serial.println(x);
          Serial.print("y:");
          Serial.println(y);
          Serial.println("-------------");
     
          x = 0; y = 0; // les variables sont remis à leurs valeurs par défaut
          Serial.println("Prêt à recevoir");
        }
     
      }
    }

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. DB2 Peut-on remplacer le FETCH FIRST par plus performant?
    Par souellet dans le forum Langage SQL
    Réponses: 4
    Dernier message: 26/09/2005, 17h07
  2. remplacement d'une valeur par une autre
    Par hugoos dans le forum Langage
    Réponses: 9
    Dernier message: 20/09/2005, 21h43
  3. [XSLT ]remplacement d un caractere par son code
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/09/2005, 16h26
  4. Souci pour remplacer les Retours chariot par <BR>
    Par ahage4x4 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/06/2005, 11h24
  5. remplacement caracteres de ponctuation par "_"
    Par LineLe dans le forum ASP
    Réponses: 5
    Dernier message: 22/10/2003, 08h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo