duinozone.cz - Arduino a Raspberry fórum

Autor Téma: komunikacia medzi arduinami  (Přečteno 1243 krát)

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:komunikacia medzi arduinami
« Odpověď #15 kdy: Březen 20, 2017, 22:40:47 odpoledne »
jen takova vsuvka. nemam rad pouzivani float pro datovou komunikaci.
integer je mnohem spolehlivejsi i kdyby to mel byt 100 nasobek puvodni hodnoty. desetinna tecka je totiz otazkou pristupu. nektere prog. jazyky maji natvrdo destinnou tecku jine carku a nekde si muzes format zvolit. v kazdem pripade se muze stat ze se ti zpravy posilane arduinem dostanou do 1 fronty a ty po oriznuti zacatku zpravy dostanes necitelny format. je to vzacna vyjimka ale uz jsem se s tim setkal u starsi verze software serial kdy si cip zpracoval preruseni od twi a sw serial to nepobral.

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:komunikacia medzi arduinami
« Odpověď #16 kdy: Březen 23, 2017, 17:48:04 odpoledne »
Dakujem za rady a linky. Nedokazem to nejakym sposobom dat dokpoy  :-\
Kód: [Vybrat]
#include <SoftwareSerial.h>

SoftwareSerial skuska(2, 3); //RX, TX


void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
  Serial.println("Pripojene");

  skuska.begin(9600);

}

void loop() {
  if (skuska.available()) {
    Serial.write(skuska.read());
  }
 
  String stringOne = "t1_";
  if (stringOne.startsWith("t1_",0)) {
    t1_ = stringOne.substring(4);                     //tu mi vyhadzuje chybu
  }
}

nech to pisem akokolvek kombinujem stale je niekde chyba

vedel by niekto pomoct dopisat to tak aby to bolo funkcne?

Offline astromik

  • Pokročilý bastlíř
  • ***
  • Příspěvků: 116
Re:komunikacia medzi arduinami
« Odpověď #17 kdy: Březen 23, 2017, 19:20:43 odpoledne »
Pro začátek zruš to vysílací arduino, které máš u teploměrů, a zkus třeba tenhle přijímací kód:

Kód: [Vybrat]

String vstup = "          ";
char znak;
byte ukazatel_na_pozici = 0 ;

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




void loop(void)
  {
    if (Serial.available())          // kdyz se objevi nejaka data ve vyrovnavaci pameti pro seriovou komunikaci ...
      {
        delay(100);                  // ... chvili pockej, aby se do ty pameti dostal cely odesilany retezec
        vstup = "          ";        // vymaz promennou, do ktere se ta komunikace bude ukladat
        ukazatel_na_pozici = 0;      // ukazatel nastav na prvni znak v te promenne
        while (Serial.available())   // dokud je ve vyrovnavaci pameti neco zaznamenano ...
          {
             znak = Serial.read();              // postupne to znak po znaku ukladej do promenne 'vstup'
             vstup[ukazatel_na_pozici] = znak;
             ukazatel_na_pozici ++;             // po kazdem ulozeni zvys ukazatel na dalsi pozici
          }
   
        Serial.print("PRIJATY TEXT: ");  // kdyz uz ve vyrovnavaci pameti nic neni, zobraz to, co prislo
        Serial.println(vstup);



        // tady uz se da s tim prijatym vstupem pracovat. Napriklad:
        if (vstup[0] == 'A')                     // kdyz je prvni znak v prijatem textu 'A', znamena to treba prvni teplomer
          {
            Serial.print("Teplomer A meri: ");
            Serial.println(vstup.substring(1));  // hodnota teploty je od druheho znaku v prijatem textu
          }

        if (vstup[0] == 'B')                     // to same, ale pro pripad, ze je prvni znak 'B'
          {
            Serial.print("Teplomer B meri: ");
            Serial.println(vstup.substring(1));
          }



        Serial.println("=============================");
       
      }
 
  }




V sériovém monitoru pak zadávej různé texty do vstupního pole a sleduj, co se bude zobrazovat.

Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:komunikacia medzi arduinami
« Odpověď #18 kdy: Březen 27, 2017, 12:57:59 odpoledne »
zdravim no pohral som sa z tym kodom pekne mi to teraz vypisuje hodnoty ktore tam zadam, A alebo B. Dokonca som skusil aj prepisat to tak aby som vedel tieto hodnoty citat z toho vysielacieho arduina a funguje to. Teploty rozpisuje z textom tak ako bolo v priklade. len v odosielacom arduine som musel upravit namiesto t1_ som nahradil A, t2_ som nahradil B... a medzi jednotlivimy teplotami som musel nahadzat delay  lebo vzdy vypisovalo iba hodnotu A.

teraz vypisuje primacie arduino teploty takto:
teplota A : 24.32
teplota B : 24.32
teplota C : -127.8

moj kod teraz:
Kód: [Vybrat]
#include <SoftwareSerial.h>

SoftwareSerial skuska(2, 3); //RX, TX

String vstup = "          ";
char znak;
byte ukazatel_na_pozici = 0;

#define rele 6


void setup() {
  Serial.begin(9600);
  while (!Serial) {
    ;
  }
  Serial.println("Pripojene");

  skuska.begin(9600);

  pinMode(rele, OUTPUT);

}

void loop() {

  if (skuska.available()) {
    delay(50);
    vstup = "       ";
    ukazatel_na_pozici = 0;
    while (skuska.available()) {
      znak = skuska.read();
      vstup[ukazatel_na_pozici] = znak;
      ukazatel_na_pozici ++;
    }
    if(vstup[0] == 'A') {
      Serial.print("teplota A : ");
      Serial.println(vstup.substring(1));
    }
    if(vstup[0] == 'B') {
      Serial.print("teplota B : ");
      Serial.println(vstup.substring(1));
    }
    if(vstup[0] == 'C') {
      Serial.print("teplota C : ");
      Serial.println(vstup.substring(1));
    }
  }
}

este len prist na to ako tie hodnoty vybrat a pracovat s nimi.

Offline astromik

  • Pokročilý bastlíř
  • ***
  • Příspěvků: 116
Re:komunikacia medzi arduinami
« Odpověď #19 kdy: Březen 27, 2017, 13:26:31 odpoledne »
Myslíš jako třeba porovnávat naměřenou hodnotu s nějakým číslem?
Pak by možná pomohlo tohle - převod textu na číslo:

Kód: [Vybrat]
.
.
.
.

    if(vstup[0] == 'A') {
      Serial.print("teplota A : ");
      Serial.println(vstup.substring(1));
      float cisloA = vstup.substring(1).toFloat();
      if (cisloA > 20)
        {
          Serial.println("Teplota A je vetsi nez 20 stupnu");
        }
      else
        {
          Serial.println("Teplota A je mensi nez 20 stupnu");
        }
.
.
.
.
.

Nemám teď u sebe žádné Arduino, tak to nemůžu vyzkoušet.


Offline radoslav

  • Bastlíř začátečník
  • *
  • Příspěvků: 39
Re:komunikacia medzi arduinami
« Odpověď #20 kdy: Březen 27, 2017, 16:32:51 odpoledne »
presne toto som potreboval funguje to podla mojich predstav  8)  dakujem velmi pekne za rady.

Offline K.K

  • Bastlíř amatér
  • **
  • Příspěvků: 86
Re:komunikacia medzi arduinami
« Odpověď #21 kdy: Březen 27, 2017, 19:24:52 odpoledne »
Nebylo by lepší si o programovaní první něco přečíst, než spolehat a čekat než Ti tu někdo něco napiše?

PS: posjirka tu někde daval odkazy na par krasných přiruček v PDF.
Možna si bude pamatovat, kde jsou.
« Poslední změna: Březen 28, 2017, 06:47:21 dopoledne od K.K »

Offline posjirka

  • Zkušený bastlíř
  • ****
  • Příspěvků: 433
Re:komunikacia medzi arduinami
« Odpověď #22 kdy: Březen 27, 2017, 20:56:24 odpoledne »
nevím jaky ebook o arduinu máš. Předpokládám, že z www.arduino.cz .
je to super ebook pro přehled co je možné koupit za moduly k arduinu + základní examply.
týmu hwkitchen/arduino,cz za něj patří velký dík, že je konečně něco v češtině.
Ovšem předpokládá  nějáké základní znalosti programování.
Když jsi absolutní amatér tak ti doporučím knihu od Miro Božíka. sice je ve slovenštině ale jde do základů.
Najdeš jí zde
http://mirobozik.sk/Media/Default/ebooks/mirobozik-ako-napr-arduino.pdf
přehled základních příkazu je i zde:
http://www.hobbyrobot.cz/wp-content/uploads/ArduinoPriruckaProgramatora.pdf
jinak vše v angličtině:
https://www.ebooks-it.net/tag/arduino

případně je i včeštině pár dobrých seriálu o arduinu:
http://uart.cz/serie/arduino-zaklady/
http://robotika.vosrk.cz/guide/arduino/cs
http://phgame.cz/PHGame_serialy/serialy/zaciname-s-arduinem
http://www.arduino8.cz/category/tutorials/