Go Down

Topic: [Partage] Code Sonde DHT11 - Bluetooth HC-06 - Android (Read 2373 times) previous topic - next topic

KoRo

Bonjour,

D'abord munissez-vous de :

-Un smartphone avec une application Terminal Bluetooth
-Un Arduino (Mega 2560 R3 pour mon cas)
-Une sonde type DHT11 (branché sur A01 pour arduino mega 2560, sinon mettez le sur A4 et changez le dans le code)
-Un module bluetooth HC06 (rxd banché sur D11 et txd branché sur D10)

Voici le code :
Code: [Select]
#include <SoftwareSerial.h>
 SoftwareSerial BT(10, 11);

#define dht_dpin A0

 byte bGlobalErr;
 byte dht_dat[4];

int count = 0;


 void setup() 
 {
   BT.begin(9600);
   
   InitDHT();
  delay(300);
  delay(700);
 }
 
 char a;
 
 void loop()

 {
   if (BT.available())
   
   {
     a=(BT.read());
     if (a=='1')
     {
       //---------------------------------
         if (count==0){
   count++;
   //suite-----------------------------------------------
     ReadDHT();
 
  switch (bGlobalErr)
  {
     case 0:
BT.println(dht_dat[2],DEC);
software_Reset();
        break;
     case 1:
        BT.println("Error 1: DHT start condition 1 not met.");
        break;
     case 2:
        BT.println("Error 2: DHT start condition 2 not met.");
        break;
     case 3:
        BT.println("Error 3: DHT checksum error.");
        break;
     default:
        BT.println("Error: Unrecognized code encountered.");
        break;   
        }
 
  delay(2000); 
   //----------------------------------------------------
  }
  else
  {
    //Ne rien faire
  }
       //----------------------------------
     }
     if (a=='2')
     {
        if (count==0){
   count++;
   //suite-----------------------------------------------
     ReadDHT();
 
  switch (bGlobalErr)
  {
     case 0:
 BT.println(dht_dat[0],DEC);
 software_Reset();
        break;
     case 1:
        BT.println("Error 1: DHT start condition 1 not met.");
        break;
     case 2:
        BT.println("Error 2: DHT start condition 2 not met.");
        break;
     case 3:
        BT.println("Error 3: DHT checksum error.");
        break;
     default:
        BT.println("Error: Unrecognized code encountered.");
        break;   
        }
 
  delay(2000); 
   //----------------------------------------------------
  }
  else
  {
    //Ne rien faire
  }
     }
   
     if (a=='?')
     {
   BT.println("Tapez '1' pour savoir la température.");
   BT.println("Tapez '2' pour savoir l'humidité.");
     }   
   
   }
 }
 
  void InitDHT()
 {
  pinMode(dht_dpin, OUTPUT);
  digitalWrite(dht_dpin, HIGH);
 }
 
 
 void ReadDHT()
 {
  bGlobalErr=0;
  byte dht_in;
  byte i;
 
  digitalWrite(dht_dpin, LOW);
  delay(18);
  delay(5);
 
  digitalWrite(dht_dpin, HIGH);
  delayMicroseconds(40);
 
  pinMode(dht_dpin, INPUT);
 
  dht_in = digitalRead(dht_dpin);
  if (dht_in)
  {
    bGlobalErr = 1;
    return;
  }
 
  delayMicroseconds(80);
 
  dht_in = digitalRead(dht_dpin);
  if(!dht_in)
  {
    bGlobalErr = 2;
    return;
  }
 
  delayMicroseconds(80);
 
  for (i=0; i<5; i++)
  {
    dht_dat[i] = read_dht_dat();
  }
 
  pinMode(dht_dpin, OUTPUT);
 
  digitalWrite(dht_dpin, HIGH);
 
  byte dht_check_sum = dht_dat[0] + dht_dat[1] + dht_dat[2] + dht_dat[3];
  if (dht_dat[4] != dht_check_sum)
  {
    bGlobalErr=3;
    return;
  }
 }
 
 
 byte read_dht_dat()
 {
  byte i = 0;
  byte result=0;
  for(i=0; i< 8; i++)
  {
    while(digitalRead(dht_dpin) == LOW);
    delayMicroseconds(30);
 
    if (digitalRead(dht_dpin) == HIGH)
    {
      result |= (1<<(7-i));
    }
 
    while (digitalRead(dht_dpin) == HIGH);
  }
  return result;
 }
 
void software_Reset()
{
  asm volatile ("  jmp 0");
}


Voila envoyez '1' avec votre smartphone android pour obtenir la température et '2' pour obtenir l'humidité.
'?' pour vous résumer les commandes.

Cordialement,
KoRo.



Go Up