Close

Odpověď na: RS 485

Úvodní stránka Fórum Vaše projekty Arduino RS 485 Odpověď na: RS 485

#9768
Pepan
Úč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;