Hi,
Habe ein kleines Problem wo ich nicht weiterkomme.
Wenn ich mein Programm teste nutze ich den Monitor der IDE 1.8.8 um die Ausgabe der seriellen Schnittstelle zu betrachten.
Wenn ich die COM 7 (Master) bzw. Arduino 1 aufrufe funktioniert mein Code.
Wenn ich die COM 5 (Slaver) bzw. Arduino 2 aufrufe bekomme ich keine Ausgabe.
Die Kommunikation Master / Slaver stürzt ab. Abhilfe schafft nur ein Hardware-Reset.
Auszug Master COM 7
/* ***************************************************************************
* *
VER 1.0 22.03.2019
* *
* *
* Schnittstellen Kommunikation über Serial *
* Arduino <-> Arduino *
* *
* *
***************************************************************************/
/*
Diese Script implementiert ein rudimentäres „Sende-Protokoll„ bei der seriellen Kommunikation zweier Arduinos.
Arduino 1 vergibt eine Aktionsnummer a,b,c…
Hinter der Aktionsnummer wird eine eindeutige Sendenummer vergeben.
Jetzt können die zu versendenden Packet Daten (Sensorwerte, Befehle…) eingefügt werden.
Das Protokoll:
<a|SendeNr.|Wert1|Wert2|Wert3>
[<] = Start [|] = Trenner [String] = Wert [>] = Ende
Arduino 2 schickt die SendeNr. Zurück an Arduino 1 und bestätigt somit den Empfang der Daten.
Die Rollen Arduino 1 und Arduino 2 können auch vertauscht werden!
So ist es möglich das Arduino 2 Aktionen auf Arduino 1 starten kann.
Ausgabe COM 7 Master
Master zu Slaver S -> Sende-Nr. 1 Daten: -1.93 12.49 -19.27
Slaver zu Master A -> Sende-Nr. 1 Daten: -1.93 12.49 -19.27
Master zu Slaver S -> Sende-Nr. 2 Daten: -13.42 -20.70 -27.28
Slaver zu Master A -> Sende-Nr. 2 Daten: -13.42 -20.70 -27.28
Master zu Slaver S -> Sende-Nr. 3 Daten: 5.44 -1.22 29.23
Slaver zu Master A -> Sende-Nr. 3 Daten: 5.44 -1.22 29.23
Master zu Slaver S -> Sende-Nr. 4 Daten: -12.91 -25.60 -8.35
*/
/////////////////////////////////////////////////////////////////////////////////
// Einige Programmteile wurden übernommen von:
// https://www.aranacorp.com/en/communicate-with-arduino/
// http://forum.arduino.cc/index.php?topic=423602.0
// https://stackoverflow.com/questions/49625253/arduino-serial-parsing
// https://arduino.stackexchange.com/questions/28255/arduino-unoreceive-serial-data-from-multiple-sources
// http://www.forward.com.au/pfod/ESP8266/GPIOpins/ESP8266_01_pin_magic.html
// https://forum.arduino.cc/index.php?topic=457216.0
// http://www.gtkdb.de/index_18_2858.html
// https://github.com/sstaub/Ticker
// https://github.com/bakercp/CRC32/blob/master/examples/CRC32/CRC32.ino
#include <SoftwareSerial.h>
#include "Ticker.h"
SoftwareSerial ArduinoSlave(2, 3);
// COM PORT 7
// Master 2 nach Slaver 3
// Master 3 nach Slaver 2
int master_sendenummer; // laufende Nummer für Packetverwaltung Master -> Slaver
int master_sendenummer_merke; // Warte auf Antwort
int slaver_sendenummer; // laufende Nummer für Packetverwaltung Antwort <- Slaver
int temperatur_1;
int temperatur_2;
int temperatur_3;
String s_temperatur_1;
String s_temperatur_2;
String s_temperatur_3;
float f_temperatur_1;
float f_temperatur_2;
float f_temperatur_3;
char serial_temperatur_werte[300];
char* serial_switch_parameter_sensor[] = {
"a", // Sensor a
"b", // Sensor b
"c", // Sensor c
"d" // Sensor d
};
// Variablen für Serial Empfang vom Slaver
const byte numChars = 32;
char receivedChars[numChars];
char tempChars[numChars]; // Temp Array
boolean newData = false;
boolean warte_auf_Slaver_antwort = false;
//============
int ticker_counter = 0;
//Alle 500 ms prüfen ob Sendeprotokoll angekommen
Ticker timer(reset_serial, 500);
void reset_serial() {
ticker_counter++;
if (ticker_counter > 3)
{
ticker_counter = 0;
//Serial.print("reset_serial ");
if (warte_auf_Slaver_antwort == true)
{
warte_auf_Slaver_antwort = false;
slaver_sendenummer = 0;
master_sendenummer_merke = 0;
master_sendenummer = 0;
Serial.print("Reset Kommunikation ");
Serial.println(timer.counter());
}
}
}
void setup() {
Serial.begin(9600);
ArduinoSlave.begin(9600);
timer.start();
}
.... mehr im Anhang
Hm, das ist mein erstes Post offenbar ist es nicht möglich (Zeichenbegrenzung) den gesamten Quelltext einzubinden.
Danke
master.ino (703 Bytes)
slaver.ino (340 Bytes)