Pepan
Vytvořené odpovědi
-
AutorPříspěvky
-
PepanÚčastník
Tak odstraneni funkce snprintf(), nepomohlo.
Nepomohlo ani pridani kontroly bufferu
UCSR0A=UCSR0A |(1 << TXC0);
….
while (!(UCSR0A & (1 << TXC0)));PepanÚčastníkfajn sice nevim jak,ale zitra se na to podivam.Diky
PepanÚčastníkJedno arduino je uno jako master a jako slave je pouzito nano.Komunikace nefunguje,ani kdyz vynecham RTC a posilam jen text.Zkousel jsem to i pres softverovou seriovou linku a chova se to stejne.Jednou komunikace projde a pak uz ne.Je to tim ze na konci odesilani prepinam komunikac na prijem.Pokud to zakomentuji, nebo odpojim ridici pin z arduina tak data jsou odesilany a prijimany v poradku.
PepanÚčastníkTak 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;
-
AutorPříspěvky