Odpověď na: RS 485
Úvodní stránka › Fórum › Vaše projekty › Arduino › RS 485 › Odpověď na: RS 485
27.12.2016 v 18:35
#9768
Účastník
Tak to byla druha moznost.
Moduly jsou klasika:
Modul
Potrebuji komunikovat na 30m se 3 arduiny.Proto chci pouzit RS485.Zatim to mam na stole a posilam si datum a cas.Kdyz zakomentuji nebo odpojim pin na prepinani Vysilani/prijem vse funguje.
Kod Master:
#include <Wire.h> // Nativni knihovna pro praci se sbernici I2C
#include "DS3231.h" // Rucne doinstalovana knihovna pro hodiny DS3231 z GitHubu
#define DS3231_I2C_ADDRESS 0x68
// Objekt nasich RTC hodin
DS3231 hodiny;
// Text s datem a casem ve formatu dd.mm. yyyy hh:mm:ss
char txtDatumCas[21];
// Ceske popisky dnu v tydnu (zacina se nedeli)
char dny[][7] = {"Ne", "Po", "Ut", "St", "Ct", "Pa", "So"};
DateTime cas(2016, 12, 9, 21, 33, 0, 5);
#define SSerialTxControl 2 // RS modul pin 3
// moje adresa, aby prijmac poznal od koho jsou hodnoty
// můžete zvolit jakékoliv čislo od 2 do 255
byte myAddress = 8;
// buffer pro funkci převodu čísla na text
char buff[10];
void setup()
{
Wire.begin(); // Nastartuj sbernici I2C
hodiny.begin(); // Nastartuj RTC hodiny
// Inicializujeme seriový port na klasickém pin 0 a 1 (TX a RX)
Serial.begin(9600);
pinMode(SSerialTxControl, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(3, LOW);
}
void loop() {
RTC(); //volani funkce
SendData(1, 2,txtDatumCas); // SendData(adresát, cislo promenné, data v char[])
delay(2000); // v jakém inervrvalu se data budou odesílat
}
///////////////////////////////////////////////////////
// deklarace funkce které data v určitém formátu odešle
void SendData(byte address, byte var, char data[]){
digitalWrite(13,HIGH);
digitalWrite(SSerialTxControl, 1); // mod odelsilaní
delay(100);
Serial.write(0x02); //start byte
Serial.write(address); // ardesat (komu odesíláme) - u primece neni vyuzito
Serial.write(myAddress); //moje adresa - od koho to prijmaci doslo
Serial.write(var); // ocislovaní promenné
Serial.write(data); // hodnota nebo data
Serial.write(0x03); // stop byte
digitalWrite(SSerialTxControl, 0); // konec modu odelsilaní
digitalWrite(13,LOW);
delay(100);
}
String RTC()
{
// Ziskej aktualni cas z RTC hodin
cas = hodiny.now();
// Uloz do txtDatumCas datum a cas ve formatu dd.mm. yyyy hh:mm:ss
snprintf(txtDatumCas, sizeof(txtDatumCas), "%02d.%02d.%d %02d:%02d:%02d", cas.date(), cas.month(), cas.year(), cas.hour(), cas.minute(), cas.second());
return txtDatumCas;