Close

Pepan

Vytvořené odpovědi

Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Autor
    Příspěvky
  • odpověď na: RS 485 #9804
    Pepan
    Účastník

    Tak odstraneni funkce snprintf(), nepomohlo.
    Nepomohlo ani pridani kontroly bufferu
    UCSR0A=UCSR0A |(1 << TXC0);
    ….
    while (!(UCSR0A & (1 << TXC0)));

    odpověď na: RS 485 #9789
    Pepan
    Účastník

    fajn sice nevim jak,ale zitra se na to podivam.Diky

    odpověď na: RS 485 #9772
    Pepan
    Účastník

    Jedno 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.

    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;
    
Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)