Problème arduino et module bluetooth

Salut à tous !

Dans le cadre d'un projet pour mon examen de SI, je dois réaliser l'ouverture d'un servomoteur (en simulation sur proteus) grâce à un bouton poussoir, les deux connectés en bluetooth. Etant donné que c'est la première fois que je touche à ça j'ai eu pas mal de mal et il est donc fortement possible que j'ai fait des erreurs qui mériteraient une une exécution sur la place publique et je le conçois ::slight_smile:

Pour en revenir à mon problème, je n'arrive pas à faire communiquer les modules bluetooth (c'est plutôt embêtant pour la suite) ! J'ai cherché dans les premiers pas ou avec d'autres conseils externes mais rien pour résoudre ce satané blocage ! Concernant le servo j'ai compris comment ça marchait de manière à ce que je puisse faire avancer mon projet donc normalement pas de préoccupations là dessus.

Avant de mettre les images et les lignes de code concernant la simulation, je tiens à indiquer que je n'ai vraiment pas envie qu'on me donne une correction déjà faite (de ce que j'ai compris ce n'est pas le but de ce forum et ça tombe bien) ! J'ai vraiment envie de comprendre ce que j'ai fait de mal et ce que je pourrais améliorer par le biais de conseils pour que ma simulation fonctionne enfin !

D'ailleurs petite question à part, c'est normal que les modules bluetooth disparaissent quand je lance la simulation les modules Bluetooth deviennent invisibles ? Ils semblent toujours présents et fonctionnels mais j'ai du faire quelque chose de mal j'imagine :o

Concernant les programmes, voici celui rattaché avec l'arduino du haut :

#include <Servo.h>

Servo myservo;  // crée l'objet "servo" pour le contrôler
int incomingByte = 0;
int pos = 0;    // varible pour stocker la position sur servo

void setup() {
  Serial.begin(9600);
  myservo.attach(9); // attibue notre objet servo à la pin9
}

void loop() {   
  if (Serial.available() > 0){
     incomingByte = Serial.read();
    if (incomingByte == '1') {
     myservo.write(180);// ordonne au cerveau d'aller à 180°
     delay(2000); // attendre 2000ms pour que le servo atteigne sa postion  
    }
}       
  }

Et enfin voici le programme rattaché avec l'arduino du bas

int bouton = 7;


void setup() {
  Serial.begin(9600);
  pinMode(bouton, INPUT);

}

void loop() {
  if(digitalRead(bouton) == LOW){
    Serial.println(1);
    
  }
}

Merci d'avance pour ceux qui auront la foi de m'aider et bonne soirée à vous ! :smiley:
Cordialement, Glacing.

D’un côté vous envoyez la valeur numérique 1 et de l’autre vous testez si vous recevez le caractère ASCII ‘1’...

essayez avec un Serial.print(‘1’);

Attention votre loop va boucler super rapidement et donc vous allez balancer des centaines de ‘1’ en un petit appui

J-M-L:
D’un côté vous envoyez la valeur numérique 1 et de l’autre vous testez si vous recevez le caractère ASCII ‘1’...

Mhhh, il faudrait que je mette un Serial.write(1); à la place ?

J-M-L:
essayez avec un Serial.print(‘1’);

Attention votre loop va boucler super rapidement et donc vous allez balancer des centaines de ‘1’ en un petit appui

Est il justement le problème vient du fait que mon programme envoie plusieurs 1 à la suite ? ça ne m'était pas venu à l'esprit :confused:

Non, J-M-L t'explique que 1 et '1' c'est pas pareil. Le premier est une valeur numérique qui vaut 1 (le résultat de 5 - 4 par exemple) alors que le second est un caractère qui est codé par l'ordinateur comme la valeur 49, selon la norme ASCII

Donc si tu compares le premier au second et tu veux agir en cas d'égalité, tu peux attendre longtemps...

Exactement lesept

Ensuite vous allez en balancer bcp - à vous de voir si c’est un soucis ou pas

lesept:
Non, J-M-L t'explique que 1 et '1' c'est pas pareil. Le premier est une valeur numérique qui vaut 1 (le résultat de 5 - 4 par exemple) alors que le second est un caractère qui est codé par l'ordinateur comme la valeur 49, selon la norme ASCII

Donc si tu compares le premier au second et tu veux agir en cas d'égalité, tu peux attendre longtemps...

Ok je vois ! J'ai remplacé du coup le '1' par un 1 mais aucun changement en simulation

Sauf qu'il disait de remplacer le 1 par '1'...

Si vous faites un print ça envoie la version ASCII - donc il faut comparer ce qui est comparable

Soit vous faites un write de la valeur numérique 1 et vous comparez avec le chiffre 1,, soit vous fait un print de la valeur numérique 1 ou la chaîne «1» ou le caractère ‘1’ et dans ce cas il faut comparer à La valeur ASCII

Attention si vous faites un println() alors vous allez aussi envoyer d’autres caractères \r et \n

Bonjour

D'ailleurs petite question à part, c'est normal que les modules bluetooth disparaissent quand je lance la simulation les modules Bluetooth deviennent invisibles ? Ils semblent toujours présents et fonctionnels mais j'ai du faire quelque chose de mal j'imagine

Pour cette question il faudrait voir sur un forum d'utilisateurs de Proteus/VSM (peu nombreux içi parmi les aidants.....vu le coût du logiciel et sa limitation à Windows)

J-M-L:
Si vous faites un print ça envoie la version ASCII - donc il faut comparer ce qui est comparable

Soit vous faites un write de la valeur numérique 1 et vous comparez avec le chiffre 1,, soit vous fait un print de la valeur numérique 1 ou la chaîne «1» ou le caractère ‘1’ et dans ce cas il faut comparer à La valeur ASCII

Attention si vous faites un println() alors vous allez aussi envoyer d’autres caractères \r et \n

Ok j'ai remplacé dans les codes :

 Serial.print('1');
 if (incomingByte == '1') {

Pour le coup ça ne change à nouveau rien dans la simulation, ça doit donc venir de mon montage si il n'y a pas d'autres erreurs dans les programmes

al1fch:
BonjourPour cette question il faudrait voir sur un forum d'utilisateurs de Proteus/VSM (peux nombreux içi parmi les aidants.....vu le coût du logiciel et sa limitation à Windows)

Merci du conseil c'est ce que je vais faire !