Eisebaer:
hi,
mal im voraus: es gibt bei RS485 keinen master oder slave, außer DU legst das so FÜR DICH fest.
jeder kann senden und empfangen, und zwar jederzeit, ohne jede aufforderung eines "masters".
natürlich kann es dann dazu kommen, daß gleichzeitig zwei senden und die telegramme dadurch unlesbar werden. das zu verhindern, ist Deine aufgabe. eine möglichkeit ist, daß Du eben master und slave benennst. aber das ist nur EINE möglichkeit.
eine andere methode ist, es so zu machen, wie Du es ja schon angesprochen hast, mittels einer antwort. kommt keine antwort, muß der sender wiederholen.
es gibt etliche mechanismen, das bleibt Dir überlassen.
wenn einer senden will, setzt er SSerialTxControl auf RS485Transmit, also auf HIGH, ansonsten setzt er es auf
RS485Recive, also auf LOW, dann lauscht er.
gruß stefan
ungetestet:
//
// Marvin Master for RS485 Communication
//
#include <SoftwareSerial.h>
// arduino connect to rs485 pins
#define SSerialRX 2
#define SSerialTX 3
#define SSerialTxControl 4
#define RS485Transmit HIGH
#define RS485Recive LOW
SoftwareSerial RS485Serial (SSerialRX, SSerialTX);
unsigned char byteReceived;
void setup() {
Serial.begin(9600);
Serial.println("Marvin Rs485 commiunication system");
Serial.println("..................................");
pinMode(SSerialTxControl, OUTPUT);
digitalWrite(SSerialTxControl, RS485Recive);
RS485Serial.begin(4800);
}
void loop() {
while (Serial.available())
{
byteReceived = Serial.read();
digitalWrite (SSerialTxControl, RS485Transmit);
RS485Serial.write(byteReceived);
}
delay(20);
digitalWrite(SSerialTxControl, RS485Recive);
}
Eisebaer:
hi,
mal im voraus: es gibt bei RS485 keinen master oder slave, außer DU legst das so FÜR DICH fest.
jeder kann senden und empfangen, und zwar jederzeit, ohne jede aufforderung eines "masters".
natürlich kann es dann dazu kommen, daß gleichzeitig zwei senden und die telegramme dadurch unlesbar werden. das zu verhindern, ist Deine aufgabe. eine möglichkeit ist, daß Du eben master und slave benennst. aber das ist nur EINE möglichkeit.
eine andere methode ist, es so zu machen, wie Du es ja schon angesprochen hast, mittels einer antwort. kommt keine antwort, muß der sender wiederholen.
es gibt etliche mechanismen, das bleibt Dir überlassen.
wenn einer senden will, setzt er SSerialTxControl auf RS485Transmit, also auf HIGH, ansonsten setzt er es auf
RS485Recive, also auf LOW, dann lauscht er.
gruß stefan
ungetestet:
//
// Marvin Master for RS485 Communication
//
#include <SoftwareSerial.h>
// arduino connect to rs485 pins
#define SSerialRX 2
#define SSerialTX 3
#define SSerialTxControl 4
#define RS485Transmit HIGH
#define RS485Recive LOW
SoftwareSerial RS485Serial (SSerialRX, SSerialTX);
unsigned char byteReceived;
void setup() {
Serial.begin(9600);
Serial.println("Marvin Rs485 commiunication system");
Serial.println("..................................");
pinMode(SSerialTxControl, OUTPUT);
digitalWrite(SSerialTxControl, RS485Recive);
RS485Serial.begin(4800);
}
void loop() {
while (Serial.available())
{
byteReceived = Serial.read();
digitalWrite (SSerialTxControl, RS485Transmit);
RS485Serial.write(byteReceived);
}
delay(20);
digitalWrite(SSerialTxControl, RS485Recive);
}
Eisebaer:
hi,
mal im voraus: es gibt bei RS485 keinen master oder slave, außer DU legst das so FÜR DICH fest.
jeder kann senden und empfangen, und zwar jederzeit, ohne jede aufforderung eines "masters".
natürlich kann es dann dazu kommen, daß gleichzeitig zwei senden und die telegramme dadurch unlesbar werden. das zu verhindern, ist Deine aufgabe. eine möglichkeit ist, daß Du eben master und slave benennst. aber das ist nur EINE möglichkeit.
eine andere methode ist, es so zu machen, wie Du es ja schon angesprochen hast, mittels einer antwort. kommt keine antwort, muß der sender wiederholen.
es gibt etliche mechanismen, das bleibt Dir überlassen.
wenn einer senden will, setzt er SSerialTxControl auf RS485Transmit, also auf HIGH, ansonsten setzt er es auf
RS485Recive, also auf LOW, dann lauscht er.
gruß stefan
ungetestet:
//
// Marvin Master for RS485 Communication
//
#include <SoftwareSerial.h>
// arduino connect to rs485 pins
#define SSerialRX 2
#define SSerialTX 3
#define SSerialTxControl 4
#define RS485Transmit HIGH
#define RS485Recive LOW
SoftwareSerial RS485Serial (SSerialRX, SSerialTX);
unsigned char byteReceived;
void setup() {
Serial.begin(9600);
Serial.println("Marvin Rs485 commiunication system");
Serial.println("..................................");
pinMode(SSerialTxControl, OUTPUT);
digitalWrite(SSerialTxControl, RS485Recive);
RS485Serial.begin(4800);
}
void loop() {
while (Serial.available())
{
byteReceived = Serial.read();
digitalWrite (SSerialTxControl, RS485Transmit);
RS485Serial.write(byteReceived);
}
delay(20);
digitalWrite(SSerialTxControl, RS485Recive);
}
Hallo, ich bin gerade hier rüber gestolpert.
Stehe quasi auch am Anfang. Ich möchte einen Nano mit einem Nano 33 BLE via RS485 Treiber verbinden. Die Hardware habe ich schon da.
Finde leider kein Beispiel wie ich Senden und Empfangen kann. Ich möchte auf dem Nano verschiedene ESC Module, Servos über RS485 auf dem 33BLE Steuern. Der 33BLE Quasi der "Slave" soll Sensordaten an den Nano Master übermitteln. Batteriespannung z.B.
Ich möchte einen Tauchroboter (ROV)über RS485 realisieren.
Ich weiß gar nicht ob das überhaupt geht. DE und RE auf dem Treiber muss ich ja Brücken oder?
Ich finde leider keinen Sketch oder ein Beispiel im Internet. Bisher habe ich nur Master und Slave als Einseitige Kommunikation gefunden. Hat mir jemand einen Tipp?
Danke