Close

alan

Vytvořené odpovědi

Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (celkem z 5)
  • Autor
    Příspěvky
  • odpověď na: Bezdrátová komunikace #6617
    alan
    Účastník

    Zkoušel jsem také přidat další funkci níže v programu poslat. Dal jsem tam pauzu 20 vteřin než se pošle „end“. Ale mám s tím podoboný problém, Tentokrát jsem schopen odeslat čísla najednou ale celý program čeká 20s. Místo toho aby mi to nejdříve odeslalo čísla 123 a pak po 20s end, tak mi to odešle end a až pak čísla a pak znovu po 20 vteřinách end. Což nechápu, protože nedjříve volám void loop a az pak void poslat.
    end
    123

    end

    
    void setup (){
      Serial.begin(9600);
      Serial.flush();
      digitalWrite (13, HIGH);      //turn on debugging LED
    }
    
    void loop (){
    
      int i=0;
      char commandbuffer[100];
    
      if(Serial.available()){
         delay(100);
         while( Serial.available() && i< 99) {
            commandbuffer[i++] = Serial.read();
         }
         commandbuffer[i++]='\0';
      }
    
      if(i>0)
         Serial.println((char*)commandbuffer);
         
    poslat();
    }
    
    void poslat(){
      
      delay(20000);
      Serial.println("end");
    
      
    }
    
    
    odpověď na: Bezdrátová komunikace #6602
    alan
    Účastník

    Nevím proč, ale když nechám v arduinu jen `byte byteRead;

    void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);

    }

    void loop() {
    // put your main code here, to run repeatedly:

    if(Serial.available( )){
    byteRead = Serial.read();
    Serial.write(byteRead);`
    Přečte a odešle mi to jednotlivá čísla dohromady. Tudíž, když zadám třeba i posloupnost dlouhoo(123456789), zobrazí se to i ve stejném pořadí. Když jsem zkoušel upravit kod v arduinu podle vašich rad, tak už v sériovém monitoru mi to ukazovalo ty prázdné znaky postupně „1 2 3 4“. Takže i kdyby se mi to povedlo úspěšně načíst v matlabu, tak by to odeslalo dřív další posloupnost než je potřeba. Myslím si, že je problém jen v arduinu, tam prostě potřebuji přijat ty čísla dohromady, pak je i dohromady odeslat. Počkat chvíli a odeslat nějaký indikátor, který budu schopný v matlabu načíst, když ho načtu, tak azdám další posloupnost čísel z klávesnice.
    Dám sem ještě originální kód, který používám v matlabu, ještě bez toho kroku kde má porovnat string nebo netisknutelný znak.

    
    clear all;
    clc;
    
    b=Bluetooth('HC-05', 1); %vytvoreni bluetooth objektu
    
    i = input('Zadej posloupnost: ','s'); % Zadávání číselné posloupnosti z klávesnice
    fopen(b); %otevreni komunikace
    
    fwrite(b,i); %zapis ciselne posloupnosti
    
    d = fscanf(b, '%s');   % oskenovani prijatych dat
           
       
       disp('Zadana posloupnost: '); %vypise na monitor
        disp(d);
    
        fclose(b);
        
    odpověď na: Bezdrátová komunikace #6596
    alan
    Účastník

    Abych byl upřímný, tak úplně nevím co máte namysli nebo jak to mám zakomponovat do programu. Měl bych tedy na začátku programu vytvořit, ty proměnné

    char start = char(1);
    char stop = char(2);
    

    A poté upravit to přijímání a odesílání?

    
     if(Serial.available( )){
      byteRead = Serial.read();
      Serial.write(start);
      Serial.write(byteRead);
     Serial.write(stop);
      delay(20000);
      Serial.write("e");
    
    
    odpověď na: Bezdrátová komunikace #6593
    alan
    Účastník

    Jde o to, že ta posloupnost čísel bude vždy jiná. Takže nemůžu nastavit natvrdo o bude začátek a co konec komunikace. Jinak nevím co jste tím myslel.

    odpověď na: Bezdrátová komunikace #6591
    alan
    Účastník

    Ještě pro vysvětlení by to mělo být takhle

    1. nejdříve odeslat 123 z amtlabu do arduina a ihned zpátky do maltabu
    2. spoté poslat string „e“ z arduina do matlabu
    3. tento string porovnám v matlabu a odešlu další čísla do arduina

Aktuálně je na stránce zobrazeno 5 příspěvků - 1. až 5. (celkem z 5)