Go Down

Topic: HC-05 communiceert niet helemaal lekker (Read 408 times) previous topic - next topic

jossie123

Sep 10, 2019, 11:33 pm Last Edit: Sep 10, 2019, 11:51 pm by jossie123
Goeieavond,

ik heb een probleem met een HC-05 die moet communiceren met een uno.

het probleem zit zo de data komt wel over en correct de uno reageerd daar op zoals het zou moeten maar op het moment dat de status led op de HC-05 2x langzaam knipperd (waarmee hij aangeeft verbonden te zijn) valt de communicatie weg. de HC-05 zit aangesloten met de weerstanden tussen de RX en heb echt al voor me gevoel alles geprobeerd.(blijkbaar niet want anders had het natuurlijk wel gewerkt... :P)

onderstaand de code die ik er voor wil gebruiken

Code: [Select]
#include <SoftwareSerial.h>

int VerbStatus = 9;          //status van HC-05 of er een device verbonden is
int LiOmhoog = 4;            //links omhoog sturing
int LiOmlaag = 5;            //links omlaag sturing
int ReOmhoog = 6;            //rechts omhoog sturing
int ReOmlaag = 7;            //rechts omlaag sturing
int Statusled = 8;           //status uitlezing op behuizing
char appsturing = '0';        //waarde die uitgelezen is uit HC-05 wordt opgeslagen als een ASCII

unsigned long previousMillis = 0;
const unsigned long interval = 1; //Interval in milliseconds

SoftwareSerial ble(11, 10);  //eigen seriele poort voor HC-05

void setup() {
  pinMode(LiOmhoog, OUTPUT);
 digitalWrite(LiOmhoog, HIGH);
  pinMode(LiOmlaag, OUTPUT);
 digitalWrite(LiOmlaag, HIGH);
  pinMode(ReOmhoog, OUTPUT);
 digitalWrite(ReOmhoog, HIGH);
  pinMode(ReOmlaag, OUTPUT);
 digitalWrite(ReOmlaag, HIGH);
  pinMode(Statusled, OUTPUT);
 digitalWrite(Statusled, HIGH);
  pinMode(VerbStatus, INPUT);
 Serial.begin(9600); // Seriele uitlezing
 ble.begin(9600); // HC-05 comm snelheid   
}

void loop() {
  while(digitalRead(VerbStatus) == HIGH) {
  unsigned long currentMillis = millis();
    if(currentMillis - previousMillis > interval) {
      previousMillis = currentMillis;
      uitlezenBLE();
    }
  }
  while(digitalRead(VerbStatus) == LOW) {
    digitalWrite(LiOmhoog, HIGH);
    digitalWrite(LiOmlaag, HIGH);
    digitalWrite(ReOmhoog, HIGH);
    digitalWrite(ReOmlaag, HIGH);
    appsturing = '0';
    digitalWrite(Statusled, LOW);
    delay (500);
    digitalWrite(Statusled, HIGH);
    delay (500);
   }
 }
 
void uitlezenBLE() {
  digitalWrite(Statusled, HIGH);
  while(ble.available() > 0){ // controle of er data beschikbaar is op de seriele port
    appsturing = ble.read(); // Data lezen uit de seriele port
    Serial.print("gelezen stand: ");
    Serial.println(appsturing);
  }
  if (appsturing == '0') { //UIT 0
    digitalWrite(LiOmhoog, HIGH);
    digitalWrite(LiOmlaag, HIGH);
    digitalWrite(ReOmhoog, HIGH);
    digitalWrite(ReOmlaag, HIGH);
  }
  else if (appsturing == '1') { //Links omhoog 1
    digitalWrite(LiOmhoog, LOW);
    digitalWrite(LiOmlaag, HIGH);
    digitalWrite(ReOmhoog, HIGH);
    digitalWrite(ReOmlaag, HIGH);
  }
  else if (appsturing == '2') { //Links omlaag 2
    digitalWrite(LiOmhoog, HIGH);
    digitalWrite(LiOmlaag, LOW);
    digitalWrite(ReOmhoog, HIGH);
    digitalWrite(ReOmlaag, HIGH);
  }
  else if (appsturing == '3') { //Rechts omhoog 3
    digitalWrite(LiOmhoog, HIGH);
    digitalWrite(LiOmlaag, HIGH);
    digitalWrite(ReOmhoog, LOW);
    digitalWrite(ReOmlaag, HIGH);
  }
  else if (appsturing == '4') { //Rechts omlaag 4
    digitalWrite(LiOmhoog, HIGH);
    digitalWrite(LiOmlaag, HIGH);
    digitalWrite(ReOmhoog, HIGH);
    digitalWrite(ReOmlaag, LOW);
  }
  else if (appsturing == '5') { //Beide omhoog 5
    digitalWrite(LiOmhoog, LOW);
    digitalWrite(LiOmlaag, HIGH);
    digitalWrite(ReOmhoog, LOW);
    digitalWrite(ReOmlaag, HIGH);
  }
  else if (appsturing == '6') { //Beide omlaag 6
    digitalWrite(LiOmhoog, HIGH);
    digitalWrite(LiOmlaag, LOW);
    digitalWrite(ReOmhoog, HIGH);
    digitalWrite(ReOmlaag, LOW);
  }
  else {
   digitalWrite(LiOmhoog, HIGH);
   digitalWrite(LiOmlaag, HIGH);
   digitalWrite(ReOmhoog, HIGH);
   digitalWrite(ReOmlaag, HIGH);
  }
}


wat ik bijzonder vind is dat als ik met de HC-05 in AT mode ga en ik de version op vraag ik versie 4.0-20190728 krijg over deze versie zie ik helemaal niks op internet.

kleine opsomming van wat ik al gedaan heb:
  • comm over hardware serial laten lopen
  • code zonder de state pen laten werken
  • code op verschillende manieren al aangepast

helaas allemaal hetzelfde resultaat.
iemand nog tips of tricks? mijn ideeen raken helaas op :P

shooter

Waar komt de voeding vandaan? is dat voldoende?
en ik zag dat de ble met 9600 baud werkt, standaard is echter 38400
bijgaand een programma dat lijkt te werken
  • #define ledPin 7
  • int state = 0;
  • void setup() {
  • pinMode(ledPin, OUTPUT);
  • digitalWrite(ledPin, LOW);
  • Serial.begin(38400); // Default communication rate of the Bluetooth module
  • }
  • void loop() {
  • if(Serial.available() > 0){ // Checks whether data is comming from the serial port
  • state = Serial.read(); // Reads the data from the serial port
  • }
  • if (state == '0') {
  • digitalWrite(ledPin, LOW); // Turn LED OFF
  • Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
  • state = 0;
  • }
  • else if (state == '1') {
  • digitalWrite(ledPin, HIGH);
  • Serial.println("LED: ON");;
  • state = 0;
  • }
  • }

probeer eerst eens een andere pin dus geen softwre maar een harde serial.
want die module blijft zenden natuurlijk.


paul deelen
shooter@home.nl
making controls with codesys PLC and arduino

Go Up