Module bluetooth HC-05 inopérationnel avec arduino mega 2560

Bonjour
J'ai construit un montage sur une arduino mega 2560 que je voulais piloter par bluetooth par le biais d'un HC-05. Normalement ce dernier doit avoir sa LED rouge qui clignote lorsqu'il est connecté, or lorsque j'ai essayé de le relier à la méga en question rien ne s'est produit. J'ai pensé que je l'avais grillé mais lorsque j'ai vérifié cette hypothèse en le branchant sur une arduino uno, sa LED s'est remis à clignoter normalement. Il semblerai donc qu'il y a une manière spéciale de faire fonctionner l'arduino mega 2560 avec un HC-05 ou que les deux soient incompatibles et qu'un autre module bluetooth doit être utilisé avec une mega. Quelqu'un pourrait-il m'éclairer à ce propos ?

Cordialement

Bonjour enash

Le HC-05 clignote rapidement quand il est en attente de connexion, ensuite, une fois connecté, il clignote 2 coups de temps en temps.
A quelle vitesse est ton HC-05?
Quel câblage?
As-tu un sketch à mettre en ligne.

Cordialement
jpbbricole

Mon HC-05 ne clignote pas du tout lorsqu'il est relié à la méga. J'ai régler dans le programme l'affichage à 9600 bauds. Voici le montage avec des relais à 4 canaux:


Afin que l'image ne devienne pas trop déroutante, je n'ai représenté les branchements aux LED qu'en bas, ensuite toutes les autres LED sont branchées comme ces dernières:
image
Et voici le programme accompagné du projet MIT app inventor:

String Incoming_value;
                
void setup() 
{
  Serial.begin(9600);         
  pinMode(22, OUTPUT); 
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);
  pinMode(29, OUTPUT);
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);      
}

void loop()
{
  if(Serial.available() > 0)  
  {
    Incoming_value = Serial.read();      
    Serial.print(Incoming_value);        
    Serial.print("\n"); 
    //rouge       
    if(Incoming_value == "rouge")             
      digitalWrite(33, HIGH);  
    else if(Incoming_value == "nonRouge")       
      digitalWrite(33, LOW); 
    //jaune  
    if(Incoming_value == "jaune")             
      digitalWrite(32, HIGH);  
    else if(Incoming_value == "nonJaune")       
      digitalWrite(32, LOW);
    //bleu
    if(Incoming_value == "bleu")             
      digitalWrite(31, HIGH);  
    else if(Incoming_value == "nonBleu")       
      digitalWrite(31, LOW);
    //gris       
    if(Incoming_value == "gris")             
      digitalWrite(30, HIGH);  
    else if(Incoming_value == "nonGris")       
      digitalWrite(30, LOW);
    //violet       
    if(Incoming_value == "violet")             
      digitalWrite(29, HIGH);  
    else if(Incoming_value == "nonViolet")       
      digitalWrite(29, LOW);
    //ing1      
    if(Incoming_value == "ing1")             
      digitalWrite(28, HIGH);  
    else if(Incoming_value == "nonIng1")       
      digitalWrite(28, LOW);
    //ing2       
    if(Incoming_value == "ing2")             
      digitalWrite(27, HIGH);  
    else if(Incoming_value == "nonIng2")       
      digitalWrite(27, LOW);
    //ing3      
    if(Incoming_value == "ing3")             
      digitalWrite(26, HIGH);  
    else if(Incoming_value == "nonIng3")       
      digitalWrite(26, LOW);
    //ing4       
    if(Incoming_value == "ing4")             
      digitalWrite(25, HIGH);  
    else if(Incoming_value == "nonIng4")       
      digitalWrite(25, LOW);
    //ing5       
    if(Incoming_value == "ing5")             
      digitalWrite(24, HIGH);  
    else if(Incoming_value == "nonIng5")       
      digitalWrite(24, LOW);
    //ing6      
    if(Incoming_value == "ing6")             
      digitalWrite(23, HIGH);  
    else if(Incoming_value == "nonIng6")       
      digitalWrite(23, LOW);
    //ing7      
    if(Incoming_value == "ing7")             
      digitalWrite(22, HIGH);  
    else if(Incoming_value == "nonIng7")       
      digitalWrite(22, LOW);
  }                            
}

Relais.zip (5,0 Ko)

Cordialement

Bonjour enash

Le fait que le HC-05 clignote ou pas ne dépend pas du type d'Arduino, il clignote dès qu'il est alimenté, rapidement sans connexion et 2 coups de temps en temps quand la connexion est établie.

Alors que tu as un Mega, pourquoi utiliser Serial qui est "à cheval" sur ta connexion USB, utilises, plutôt, Serial1 (Tx 18 et Rx 19) par exemple.
Tu gagnerai en réactivité à la réception des données en définissant un timout à Serial.read()

	Serial.begin(9600);
	Serial.setTimeout(50);     // Pour fin des commandes depuis Bluetooth

Sans ça, Serial.read() attend 1 seconde sans caractère reçu pour déclarer fin de réception.

Cordialement
jpbbricole

Le problème venait effectivement d'un fil défectueux. Je n'ai pas réussi à intégrer le Serial1 (Tx 18 et Rx 19) que j'ai mis en commentaire.
Voici le nouveau programme:

String Incoming_value;
                
void setup() 
{
  Serial.begin(9600);
  Serial.setTimeout(50);     // Pour fin des commandes depuis Bluetooth
  //Serial1 (1, 0);//ligne ajoutée
        
  pinMode(22, OUTPUT); 
  pinMode(23, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(26, OUTPUT);
  pinMode(27, OUTPUT);
  pinMode(28, OUTPUT);
  pinMode(29, OUTPUT);
  pinMode(30, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(32, OUTPUT);
  pinMode(33, OUTPUT);      
}

void loop()
{
  if(Serial.available() > 0)  
  {
    Incoming_value = Serial.read();      
    Serial.print(Incoming_value);        
    Serial.print("\n"); 
    //rouge       
    if(Incoming_value == "rouge")             
      digitalWrite(33, HIGH);  
    else if(Incoming_value == "nonRouge")       
      digitalWrite(33, LOW); 
    //jaune  
    if(Incoming_value == "jaune")             
      digitalWrite(32, HIGH);  
    else if(Incoming_value == "nonJaune")       
      digitalWrite(32, LOW);
    //bleu
    if(Incoming_value == "bleu")             
      digitalWrite(31, HIGH);  
    else if(Incoming_value == "nonBleu")       
      digitalWrite(31, LOW);
    //gris       
    if(Incoming_value == "gris")             
      digitalWrite(30, HIGH);  
    else if(Incoming_value == "nonGris")       
      digitalWrite(30, LOW);
    //violet       
    if(Incoming_value == "violet")             
      digitalWrite(29, HIGH);  
    else if(Incoming_value == "nonViolet")       
      digitalWrite(29, LOW);
    //ing1      
    if(Incoming_value == "ing1")             
      digitalWrite(28, HIGH);  
    else if(Incoming_value == "nonIng1")       
      digitalWrite(28, LOW);
    //ing2       
    if(Incoming_value == "ing2")             
      digitalWrite(27, HIGH);  
    else if(Incoming_value == "nonIng2")       
      digitalWrite(27, LOW);
    //ing3      
    if(Incoming_value == "ing3")             
      digitalWrite(26, HIGH);  
    else if(Incoming_value == "nonIng3")       
      digitalWrite(26, LOW);
    //ing4       
    if(Incoming_value == "ing4")             
      digitalWrite(25, HIGH);  
    else if(Incoming_value == "nonIng4")       
      digitalWrite(25, LOW);
    //ing5       
    if(Incoming_value == "ing5")             
      digitalWrite(24, HIGH);  
    else if(Incoming_value == "nonIng5")       
      digitalWrite(24, LOW);
    //ing6      
    if(Incoming_value == "ing6")             
      digitalWrite(23, HIGH);  
    else if(Incoming_value == "nonIng6")       
      digitalWrite(23, LOW);
    //ing7      
    if(Incoming_value == "ing7")             
      digitalWrite(22, HIGH);  
    else if(Incoming_value == "nonIng7")       
      digitalWrite(22, LOW);
  }                            
}

Comment pourrait-je écrire le Serial1 (Tx et Rx) correctement, sachant que j'utilise les broche 0 et 1 pour RX et TX ?

Que signifie ce message sur MIT app inventor ?
image

Cordialement

Bonjour enash

Je t'ai intégré la réception du Bluetooth sur Serial1 Rx sur 19, a noter que j'ai remplacer

Incoming_value = Serial.read();
par
Incoming_value = Serial1.readString();

Le programme corrigé:

String Incoming_value;

void setup()
{
	Serial.begin(9600);
	
	//--------------------------------- Serial 1 Rx = 19 Tx = 18
	Serial1.begin(9600);
	Serial1.setTimeout(50);     // Pour fin des commandes depuis Bluetooth
	
	pinMode(22, OUTPUT);
	pinMode(23, OUTPUT);
	pinMode(24, OUTPUT);
	pinMode(25, OUTPUT);
	pinMode(26, OUTPUT);
	pinMode(27, OUTPUT);
	pinMode(28, OUTPUT);
	pinMode(29, OUTPUT);
	pinMode(30, OUTPUT);
	pinMode(31, OUTPUT);
	pinMode(32, OUTPUT);
	pinMode(33, OUTPUT);
}

void loop()
{
	if(Serial1.available() > 0)
	{
		Incoming_value = Serial1.readString();
		Serial.print(Incoming_value);
		Serial.print("\n");
		//rouge
		if(Incoming_value == "rouge")
		digitalWrite(33, HIGH);
		else if(Incoming_value == "nonRouge")
		digitalWrite(33, LOW);
		//jaune
		if(Incoming_value == "jaune")
		digitalWrite(32, HIGH);
		else if(Incoming_value == "nonJaune")
		digitalWrite(32, LOW);
		//bleu
		if(Incoming_value == "bleu")
		digitalWrite(31, HIGH);
		else if(Incoming_value == "nonBleu")
		digitalWrite(31, LOW);
		//gris
		if(Incoming_value == "gris")
		digitalWrite(30, HIGH);
		else if(Incoming_value == "nonGris")
		digitalWrite(30, LOW);
		//violet
		if(Incoming_value == "violet")
		digitalWrite(29, HIGH);
		else if(Incoming_value == "nonViolet")
		digitalWrite(29, LOW);
		//ing1
		if(Incoming_value == "ing1")
		digitalWrite(28, HIGH);
		else if(Incoming_value == "nonIng1")
		digitalWrite(28, LOW);
		//ing2
		if(Incoming_value == "ing2")
		digitalWrite(27, HIGH);
		else if(Incoming_value == "nonIng2")
		digitalWrite(27, LOW);
		//ing3
		if(Incoming_value == "ing3")
		digitalWrite(26, HIGH);
		else if(Incoming_value == "nonIng3")
		digitalWrite(26, LOW);
		//ing4
		if(Incoming_value == "ing4")
		digitalWrite(25, HIGH);
		else if(Incoming_value == "nonIng4")
		digitalWrite(25, LOW);
		//ing5
		if(Incoming_value == "ing5")
		digitalWrite(24, HIGH);
		else if(Incoming_value == "nonIng5")
		digitalWrite(24, LOW);
		//ing6
		if(Incoming_value == "ing6")
		digitalWrite(23, HIGH);
		else if(Incoming_value == "nonIng6")
		digitalWrite(23, LOW);
		//ing7
		if(Incoming_value == "ing7")
		digitalWrite(22, HIGH);
		else if(Incoming_value == "nonIng7")
		digitalWrite(22, LOW);
	}
}

Je n'ai traité que la partie Serial1, tu pourrais rendre l'initialisation des sorties plus aisée en utilisant des tableaux.

Cordialement
jpbbricole

Bonjour enash

Si tu regardes sur ton 2ème écran, tu as 10 erreurs
image
Cela vient du fait que, depuis cet écran, on ne « voit » pas le Bluetooth
image
Alors que depuis l’écran 1 :
image

J’ai fait des recherches et il s’avère que, dès que l’on change d’écran, on « perd » le Bluetooth.
Il te faudrait tout concentrer sur un écran, regardes cette vidéo.

Cordialement
Jpbbricole

Bonsoir enash
J'ai fait l'essai avec scrolling.


Tu pourrais, bien sûre, tout mettre sur la hauteur d'un écran en changement la hauteur des HorizontalArragemnent de
image
à
image
Je te mets mes essais en PJ
Relais_B.zip (3.9 KB)

Bonne soirée
Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.