Hey Freunde des Wissens,
habe ein Uno an dem ein Hc05 hängt.
Mich würde interessieren, ob es unterschiede von SoftwareSerial zu Rx Tx gibt.
Ist SoftwareSerial langsamer beim Datenaustausch als wie wenn ich direkt Rx und Tx mit dem hc05 Modul verbinde?
Was ist sinnvoller?
Beim Hochladen muss ich Rx und Tx abstecken, sonst gibts ja Probleme.
Weil ich das Problem habe, dass mein Bluetooth relativ "langsam" reagiert.
Hab eine App mit MIT2 App Inventor erstellt die Texte ans Arduino schickt. Dass wiederum schaltet damit Relais. Jedoch passiert es bei schnellerem drücken von den Buttons in der App dass Bluetooth sich aufhängt und meistens dauert es erst 2-3 Sekunden nach drücken eines Buttons dass Arduino mal was schaltet.
Dachte also daran dass SoftwareSerial eventuell langsam ist, daher das Thema.
Weiß jemand wie man diese Probleme umgehen kann?
Andere Geräte können ja auch per Bluetooth Riesen Datenmengen fast in Echtzeit versenden, dass kann der Arduino bestimmt auch oder?
Hier mal der Code
#include <SoftwareSerial.h>
#include <IRremote.h>
#define ArduinoPin 2
#define ArduinoPin 3
#define relaisPin5 4 //bw licht //BW_ON//BW_0FF
#define relaisPin6 5 //heisl licht //Haisl_ON // Haisl_OFF
#define relaisPin7 6 // Barbeleuchtung_ON
#define relaisPin8 7 //tischlicht links // Tilinks_ON // Tilinks_OFF
#define relaisPin9 8 //tischlicht rechts // Tirechts_ON // Tirechts_OFF
#define relaisPin10 9
#define relaisPin11 10 // schwarzlichter //Schwarzli_ON // Schwarzli_OFF
#define relaisPin12 11 // außenstrahler // Strahler_ON// Strahler_OFF
#define rxPin 12 // bluetooth
#define txPin 13 // bluetooth
#define relaisPin13 A0
#define relaisPin14 A1
#define relaisPin15 A2 // Sternenhimmel // Stern_ON // Stern_OFF
#define relaisPin16 A3 // betriebsminutenzähler
#define relaisPinA4 A4 // audizeichen // Audi_ON // Audi_OFF
int RECV_PIN = 9;
byte Heisl = 0;
byte BW = 0;
byte Strahler = 0;
byte Stern = 0;
byte Audi = 0;
byte Tischlicht = 0;
byte Schwarz = 0;
byte Barbeleuchtung = 0;
long previousMillis = 0;
unsigned long currentMillis = millis();
boolean restart = false;
SoftwareSerial btSerial(rxPin, txPin);
IRsend irsend;
IRrecv irrecv(RECV_PIN);
decode_results results;
String btData;
int khz = 38;
void setup() {
btSerial.begin(9600);
// btSerial.println("Bluetooth_Verbindung_stabil");
Serial.begin(9600);
Serial.print("Bluetooth_Verbindung_stabil");
irrecv.enableIRIn(); // Start the receiver
pinMode(relaisPinA4, OUTPUT);
pinMode(relaisPin5, OUTPUT);
pinMode(relaisPin6, OUTPUT);
pinMode(relaisPin7, OUTPUT);
pinMode(relaisPin8, OUTPUT);
pinMode(relaisPin9, OUTPUT);
pinMode(relaisPin10, OUTPUT);
pinMode(relaisPin11, OUTPUT);
pinMode(relaisPin12, OUTPUT);
pinMode(relaisPin13, OUTPUT);
pinMode(relaisPin14, OUTPUT);
pinMode(relaisPin15, OUTPUT);
pinMode(relaisPin16, OUTPUT);
restart = true;
}
void loop() {
if (restart == true) {
digitalWrite(relaisPin5, HIGH);
delay(250); digitalWrite(relaisPin6, HIGH);
delay(250); digitalWrite(relaisPin7, HIGH); delay(250); digitalWrite(relaisPin8, HIGH); delay(250); digitalWrite(relaisPin9, HIGH);
delay(250); digitalWrite(relaisPin10, HIGH);
delay(250); digitalWrite(relaisPin11, HIGH); delay(250); digitalWrite(relaisPin12, HIGH); delay(250); digitalWrite(relaisPin13, HIGH);
delay(250); digitalWrite(relaisPin14, HIGH);
delay(250); digitalWrite(relaisPin15, HIGH); delay(250); digitalWrite(relaisPinA4, HIGH); delay(250); restart = false;
}
RelaisTakt(60000, 1000);
// IR_Receive_Signal (); // nur zum programmieren da
if (btSerial.available()) {
btData = btSerial.readString();
//Serial.println(btData);
if (btData == "Stern_ON") {
Stern++;
if ( Stern != 0 ) {
digitalWrite(relaisPin15, LOW);
}
if ( Stern >= 2 ) {
digitalWrite(relaisPin15, HIGH);
Stern = 0;
}
}
if (btData == "Strahler_ON") {
Strahler++;
if ( Strahler != 0 ) {
digitalWrite(relaisPin12, LOW);
}
if ( Strahler >= 2 ) {
digitalWrite(relaisPin12, HIGH);
Strahler = 0;
}
}
if (btData == "BW_ON") {
BW++;
if ( BW != 0 ) {
digitalWrite(relaisPin5, LOW);
}
if ( BW >= 2 ) {
digitalWrite(relaisPin5, HIGH);
BW = 0;
}
}
if (btData == "Haisl_ON") {
Heisl++;
if ( Heisl != 0 ) {
digitalWrite(relaisPin6, LOW);
}
if ( Heisl >= 2 ) {
digitalWrite(relaisPin6, HIGH);
Heisl = 0;
}
}
if (btData == "Tilinks_ON") {
Tischlicht++;
if ( Tischlicht != 0 ) {
digitalWrite(relaisPin8, LOW);
digitalWrite(relaisPin9, LOW);
}
if ( Tischlicht >= 2 ) {
digitalWrite(relaisPin8, HIGH);
digitalWrite(relaisPin9, HIGH);
Tischlicht = 0;
}
}
if (btData == "Schwarzli_ON") {
Schwarz++;
if ( Schwarz != 0 ) {
digitalWrite(relaisPin11, LOW);
}
if ( Schwarz >= 2 ) {
digitalWrite(relaisPin11, HIGH);
Schwarz = 0;
}
}
if (btData == "Audi_ON") {
Audi++;
if ( Audi != 0 ) {
digitalWrite(relaisPinA4, LOW);
}
if ( Audi >= 2 ) {
digitalWrite(relaisPinA4, HIGH);
Audi = 0;
}
}
/*
if (btData == "Barbeleuchtung_ON") {
Barbeleuchtung++;
if ( Barbeleuchtung != 0 ) {digitalWrite(relaisPin7, LOW); }
if ( Barbeleuchtung >= 2 ) { digitalWrite(relaisPin7, HIGH); Barbeleuchtung = 0; }
}
*/
}
}
// infrarotsignal empfangen, wenn neu //
void IR_Receive_Signal () {
if (irrecv.decode(&results)) {
Serial.println(results.value, HEX);
irrecv.resume(); // Receive the next value
}
delay(100);
}
// infrarotsignal senden ///
void IR_SendSignalOn() {
for (int i = 0; i < 3; i++) {
unsigned int irSignalOn[] = {}; //Ir code eingeben in klammern
irsend.sendRaw(irSignalOn, sizeof(irSignalOn) / sizeof(irSignalOn[0]), khz);
delay(200);
}
//for (int i = 0; i < 3; i++) {
//irsend.sendSony(0xa90, 12); // hier hexa code eingeben, den Steckdose erwartet.
//delay(40);
// }
// delay(5000); //5 second delay between each signal burst
}
void IR_SendSignalOff() {
for (int i = 0; i < 3; i++) {
unsigned int irSignalOff[] = {}; //Ir code eingeben in klammern
irsend.sendRaw(irSignalOff, sizeof(irSignalOff) / sizeof(irSignalOff[0]), khz);
delay(200);
}
//for (int i = 0; i < 3; i++) {
//irsend.sendSony(0xa90, 12); // hier hexa code eingeben, den Steckdose erwartet.
//delay(40);
// }
// delay(5000); //5 second delay between each signal burst
}
// betriebsminutenzähler //
void RelaisTakt(unsigned long Intervall, unsigned long Dauer) {
static unsigned long tEin;
if (millis() - tEin > Intervall) {
digitalWrite(relaisPin16, LOW);
tEin = millis();
}
if (millis() - tEin > Dauer) {
digitalWrite(relaisPin16, HIGH);
}
// Serial.println(millis()); Serial.print(tEin); Serial.print(Intervall); Serial.print(Dauer);
}
Danke vorab schon mal für Tipps oder Hilfen
Gruss