Stránka 3 z 3

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

Napsal: 07 led 2018, 16:43
od AstroMiK
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.

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

Napsal: 07 led 2018, 17:26
od AstroMiK
... 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.

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

Napsal: 07 led 2018, 18:26
od sup666
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???

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

Napsal: 07 led 2018, 18:42
od AstroMiK
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();
          }
      }      


  }
 

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

Napsal: 07 led 2018, 20:19
od sup666
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

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

Napsal: 07 led 2018, 21:50
od sup666
Č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.

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

Napsal: 08 led 2018, 05:59
od Axamith
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.