Ovládání výstupů - sériová linka

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovládání výstupů - sériová linka

Příspěvek od AstroMiK » 07 led 2018, 16:43

V té sekvenci "1.1.1.1.1.1.1.1.1." je i nějaká ukončovací značka, nebo se tohle jen sype v pravidelných intervalech každých 100ms?

Možná bude problém se synchronizací příjmu a vysílání.

V programu se mi hned na první pohled nelíbí ta pauza delay(100).
Jestli vysílač posílá data taky každých 100ms tak je přijímací program o něco pomalejší (o to vyhodnocování) a bude se mu zahlcovat přijímací buffer.

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovládání výstupů - sériová linka

Příspěvek od AstroMiK » 07 led 2018, 17:26

... Tak oprava.
Nevšimnul jsem si, že delay(100) se vykoná až když je celý buffer vyprázdněný.

Takže v tom chyba nebude.

sup666
Příspěvky: 5
Registrován: 07 led 2018, 01:15
Reputation: 0

Re: Ovládání výstupů - sériová linka

Příspěvek od sup666 » 07 led 2018, 18:26

okončovaní tam není žádné , a ta pauza tam zustala po nějaké verzi pokusu , i když tam neni, tak to nefungluje. Jěště me dneska napadlo jestli nahodou ta tečka která není int jestli nahodou to nevezme jak 1,1 char 1,1 char... a proto se to nenaplní a neblbne to. V noci zkusim místo tecek tam dát projistotu písmena jako oddělovač. Ale jinak by to mělo být funkční ne?? A nebo nesetkal se něko stím že by byl špatnej bluetooth modul špatnej a posílá blbosti???

AstroMiK
Příspěvky: 592
Registrován: 08 pro 2017, 19:05
Reputation: 0

Re: Ovládání výstupů - sériová linka

Příspěvek od AstroMiK » 07 led 2018, 18:42

Zkusil jsem napsat program pro Arduino. Pracuje s řetězcem, který popisuješ.
Mám tu jen Arduino Nano, takže jsem to osekal jen na 4 LED.

Pro testování tam pomocí Visual Basicu odesílám po sériové komunikaci ty řetězce a zaškrávacími políčky měním hodnotu na 4 pozicích.

Video je tady:
https://youtu.be/zu1gJim5QoY


A program pro Arduino tady:

Kód: Vybrat vše

char prijato[20];  // pole, do ktereho se bude ukladat prijaty retezec
byte ukazatel;     // ukazatel do toho pole

void setup()
  {
    Serial.begin(9600);

  // mam jen Arduino NANO, tak jsem to osekal na 4 piny.
  pinMode(5, OUTPUT);    //nahoru
  pinMode(6, OUTPUT);    //dolu
  pinMode(7, OUTPUT);    //magnet
  pinMode(8, OUTPUT);    //svetla
    
  }


void loop(void)
  {
    byte cekani = 0;
    while (Serial.available() == false)  // mereni doby, po kterou neprobiha komunikace
      {

        if (cekani ==  255) cekani = 254;  // pri hodne dlouhe pauze nedovolit preteceni do 0
        cekani ++;
        delay(1);  
      }    

      
    if (cekani > 50) // kdyz byla v komunikaci dostatecne dlouha pauza, znamena to, ze zacaly prichazet prvni data
      {
        delay(20);  // tahle pauza by mela stacit na to, aby se pres komunikaci prijalo vsech 18 znaku

        ukazatel = 0;
        while (Serial.available())                // vsech 18 znaku z bufferu by se melo ulozit do pole
          {
            prijato[ukazatel] = Serial.read();
            ukazatel ++;
          }

        // ----------------------------------------------------------
        // a tady se jednotlive polozky z toho pole vyhodnoti (liché indexy jsou ty tecky)
        // mam jen Arduino NANO, tak jsem to osekal na 4 piny.

          if (prijato[0] == '1') digitalWrite (5, HIGH); else digitalWrite (5, LOW);
          if (prijato[2] == '1') digitalWrite (6, HIGH); else digitalWrite (6, LOW);
          if (prijato[4] == '1') digitalWrite (7, HIGH); else digitalWrite (7, LOW);
          if (prijato[6] == '1') digitalWrite (8, HIGH); else digitalWrite (8, LOW);

        // ----------------------------------------------------------
      }
    else    // pauza pred komunikaci byla moc kratka, takze se prijimac trefil nekam doprostred prenosu
      {
        delay(20);
        while (Serial.available())                // cely buffer se vysype
          {
            char ignorovat = Serial.read();
          }
      }      


  }
 

sup666
Příspěvky: 5
Registrován: 07 led 2018, 01:15
Reputation: 0

Re: Ovládání výstupů - sériová linka

Příspěvek od sup666 » 07 led 2018, 20:19

Super to vypadá velmi zajímavě tohle řešení. jdu to odzkoušet jestli to bude reagovat na tu aplikaci co mam v mobilu. Prozatím moc děkuji

sup666
Příspěvky: 5
Registrován: 07 led 2018, 01:15
Reputation: 0

Re: Ovládání výstupů - sériová linka

Příspěvek od sup666 » 07 led 2018, 21:50

Čau mooc děkuji - komunikace je funkční , ted mame nějaké problemy s aplikací která řídí jen půlku toho co má ale alespon to spolu už komunikuje. Až to bude celé tak sem dam odkaz na video.

Axamith
Příspěvky: 530
Registrován: 09 srp 2017, 08:17
Reputation: 0
Kontaktovat uživatele:

Re: Ovládání výstupů - sériová linka

Příspěvek od Axamith » 08 led 2018, 05:59

Nepitval jsem uváděné kódy, jen drobná poznámka z praxe (původní dotaz tohoto téma). Vysílací a přijímací část jsem odlaďoval samostatně, Když mi vysílací část dávala na ser. monitor to, co jsem očekával, ladil jsem přijímací část také samostatně, přes ser. monitor jsem ji krmil tím, co mi dává odladěná vysílací část. Dost mi to pomohlo.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 13 hostů