Hallo
Ich habe versucht zwischen einem Mega und einem Nano Daten auszutauschen. Zweck des Ganzen soll sein, das der Mega über die an ihm angeschlossenen Sensoren Daten erfasst und anhand dieser Daten dann Relais ein oder aus schaltet oder auch 433mhz Funksignale sendet . Der nano soll Auch Relais steuern aber zwischen den Schaltungen Längere Pausen einlegen von bis zu 30 min. ich hab es zuerst mit Infrarot versucht allerdings ist mir das (in meinen Tests ) zu ungenau gewesen also möchte ich es per UART lösen.
Als Hardware habe ich an den Mega TX1 , RX1 und GND an eine Telefon unterputzdose angeschlossen die ich so Bearbeitet habe das ich 4 Leitungen habe und als kabel ein 6m (4 Adern, TX und RX sind auf einer Seite gekreuzt so das TX1 vom Mega auf Softserial RX vom Nano liegt)Telefonkabel am Nano ist die selbe Telefonanschluss Dose und genauso bearbeitet , laut Multimeter ist auch alles ok mit der Verkabelung . Nur kommen keine Daten an. Und ist es Normal das die Lampe vom Nano schwach leuchtet wenn das ganze verbunden ist ,und auf dem Mega strom ist, aber der Nano eigentlich aus sein müsste, weil weder Netzteil noch Usb eingesteckt sind?
Sind meine ersten versuchen mit dieser art von Verbindung also Verzeiht mir bitte wenn die ein oder andere "dumme" frage dabei ist .
Hier ist der Sketch vom Mega (nur das mit der Uart Verbindung der komplette Sketch passt hier nicht rein , allerdings Funktioniert der Rest auch)
int Heizung = 22;
int Abpumpen = 39 ;
int Umwaelzpumpe = 26 ;
int Wasser = 28 ;
int R400W2 = 22 ;
int R400W5 = 31 ;
int R400W6 = 30 ;
int R5750W = 32 ;
//////////////////////////////////////////////////////////////////////////////
//Serial Monitor
int incomingByte = 0;
///////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
//Schwimmerschalter
int halb = 4;// Halb voll
int dreiviertel = 3;// Dreiviertel voll
int voll = 2;
/////////////////////////////////////////////////////////////
void Schwimmer() {
if ((digitalRead(halb) == HIGH ) && (digitalRead(dreiviertel) == HIGH ))
{
digitalWrite(Heizung , HIGH);
digitalWrite(Umwaelzpumpe , HIGH);
digitalWrite(Abpumpen , HIGH); //Aus
digitalWrite(Wasser , LOW ); //Ein
//Umwälzpumpe aus
Serial1.write(01010001);
Serial.print ("Wasser ein ");
delay(60UL * 1000UL);
}
}
void setup() {
Serial.begin(9600);
Serial1.begin(9600);
/////////////////////////////////////
//Relais
digitalWrite(Heizung , HIGH);
digitalWrite( Abpumpen , HIGH) ;
digitalWrite (Umwaelzpumpe , HIGH) ;
digitalWrite (Wasser, HIGH) ;
digitalWrite (R400W2 , HIGH) ;
digitalWrite (R400W5, HIGH) ;
digitalWrite (R400W6 , HIGH) ;
digitalWrite( R5750W, LOW) ;
pinMode (Heizung , OUTPUT);
pinMode (Abpumpen , OUTPUT);
pinMode (Umwaelzpumpe , OUTPUT);
pinMode (Wasser , OUTPUT);
pinMode (R400W2 , OUTPUT) ;
pinMode (R400W5 , OUTPUT) ;
pinMode (R400W6 , OUTPUT) ;
pinMode (R5750W , OUTPUT) ;
// Schwimmer
pinMode(halb, INPUT);
pinMode(dreiviertel, INPUT);
pinMode(voll, INPUT);
}
void loop() {
Schwimmer();
/////////////////////////////////////////////////////////////////
///Serial Monitor Steuerung
{
// send data only when you receive data:
if (Serial.available() > 0) {
// read the incoming byte:
incomingByte = Serial.read(); }
if ( incomingByte == 49 ) { ///1
for (int i = 0; i < 3; i++)
Serial1.write(000101 );
}
if ( incomingByte == 50 ) { //2
Serial1.write(0101001);
}
if ( incomingByte == 51 ) { ///3
Serial1.write(0xFF30CF);
}
if ( incomingByte == 52 ) { //4
Serial1.write(0xFF18E7);
}
}
}
//////////////////////////////////////////////////////////////////
/////
Und hier der vom Nano
#include <SoftwareSerial.h> // Durch diesen Include können wir die Funktionen
// der SoftwareSerial Bibliothek nutzen.
SoftwareSerial softSerial(10, 11); // Pin D10 ist RX, Pin D11 ist TX.
// Die Funktion softSerial() kann nun wie Serial() genutzt werden.
char c_inChar; // Jedes empfangene Zeichen kommt kurzzeitig in diese Variable.
String s_input; // In diesem String speichern wir dann unseren kompletten Text.
int relay1 = 2;
int relay2 = 3;
int relay3 = 4;
int relay4 = 5;
int relay5 = 6;
float eLS = 10 ;
float zLS = 0;
float dLS = 10 ;
//pause zwischen den laufzeiten
unsigned long Pause = 1; //min
unsigned long PauseLS = 1 ;
//Relais laufzeit bei in Sekunden
float eL = 3.5 ;
float zL = 1.7;
float dL = 12 ;
float vL = 5 ;
float fL = 1 ;
byte val;
void setup()
{
Serial.begin(9600);
// Dann initialisieren wir die serielle Schnittstelle der SoftwareSerial Bibliothek.
softSerial.begin(9600);
softSerial.print("Nachrichten vom Arduino landen hier.");
pinMode(relay1, OUTPUT);
pinMode(relay2, OUTPUT);
pinMode(relay3, OUTPUT);
pinMode(relay4, OUTPUT);
pinMode(relay5, OUTPUT);
}/*--(end setup )---*/
void loop()
{
// In dieser Schleife warten wir auf einen Text von PuTTY.
if(softSerial.available() > 0){ // So lange etwas empfangen wird, durchlaufe die Schleife.
c_inChar = softSerial.read(); // Speichere das empfangene Zeichen in der Variablen c_inChar.
s_input.concat(c_inChar); // Füge das Zeichen an den String an, damit wir den kompletten Text erhalten.
if (c_inChar == '\r') { // War das letzte Zeichen ein CR (Carriage Return)?
Serial.print(s_input); // Füge in dieselbe Zeile den empfangenen Text ein
Serial.print('\n'); // und schicke noch ein NL (NewLine) für einen Zeilenumbruch hinterher.
s_input=""; // Lösche den String für die nächste Nachricht.
Serial.print(softSerial.read());
}
}
}
Ich wäre schon glücklich wenn mir einer sagen könnte wie ich die Daten lesen kann die ich verschicken möchte und über Kritik in form von Verbesserungsvorschlägen währe ich natürlich auch dankbar