2X Arduino + TX/RX + prenos cisel

Odpovědět
Viktor_EX
Příspěvky: 40
Registrován: 19 črc 2021, 11:18
Reputation: 0

2X Arduino + TX/RX + prenos cisel

Příspěvek od Viktor_EX » 09 úno 2022, 14:55

Ahojte, nikde jsem to tu nenasel, takze posledni zachrana ... nekomu zvednout tlak, jestli to tu nekde je, prosim link, at se neprobira 10x

PROSIM, jednim A-Mega merim 16 hodnot na vsech A0-A15. Funguje, mam 16 cisel, trimistnych.

Potreboval bych to v nekolikasekundovem taktu presypat pres TX/RX do centralniho A-Mega.

Nasel jsem na inetu nekolik prikladu, at uz s pouzitim I2C nebo Tx/Rx (toto by s ohledem na obsazene piny vyhovovalo vic), ale pokud mi poradite komunikaci pres I2C klidne (tam na centrale visi voltmetr), ale jestli tomu spravne rozumim, ciste teoreticky by to vadit nemelo, ... jenze ja uz vim, ze teorie je jedna vec, praxe druha.
Jenze vsechny priklady prenaseji 1 nebo 2 , nebo jen pismenko H a L. Priklady mi funguji, ale dam s tim pohnout neumim. Poradi nekdo? diky predem

KamilV
Příspěvky: 479
Registrován: 03 dub 2018, 15:27
Reputation: 0
Bydliště: Olomouc

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od KamilV » 09 úno 2022, 15:06

Naměřené hodnoty si ukládej do pole.

Kód: Vybrat vše

byte buff[16];
EDIT: tedy pokud se ta trojmístná čísla vejdou do rozsahu byte. Jinak si ty inty rozlož na byty a přepočítej velikost buff.

Pak je pošli po serialu:
https://www.arduino.cc/reference/en/lan ... ial/write/

Kód: Vybrat vše

Serial.write(buff, 16);
Na druhém načti:
https://www.arduino.cc/reference/en/lan ... readbytes/

Viktor_EX
Příspěvky: 40
Registrován: 19 črc 2021, 11:18
Reputation: 0

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od Viktor_EX » 09 úno 2022, 15:13

prosim te jsem lama.
tohle mi dal nepomuze. az kdyz mam prikladek, tusim co se deje, dokazu upravit dal.

tvoje linky potrebuji opet poradnou porci dalsich znalosti, ktere nemam. bohuzel.
z techhle prikladku se snazim odpichnout. posle to 1 nebo 2, a na druhym konci zhasne nebo rozne ledka.
jak poslu cislo 330 nevim.


mam vysilac - priklad:

Kód: Vybrat vše

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

}

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

//-------------------------------Check Serial Port---------------------------------------
 
 while (Serial1.available()){
  delay(1);
  if(Serial1.available()>0){
  char c = Serial1.read();
    Serial.print(c);
   if (isControl(c)){
  break;
  }
   
  }
 
 }
 
 
 
 
 
 while (Serial.available()) {
     delay(1);
    if (Serial.available() >0) {
      char c = Serial.read();  //gets one byte from serial buffer
    if (isControl(c)) {
      //'Serial.println("it's a control character");
      break;
    }
      readString += c; //makes the string readString    
    }
 }   

 Q = readString;
//--------Checking Serial Read----------
      if(Q=="on"){         
        Serial1.print("1");
        Serial.println("Sent:On");               
      }
      if(Q=="off"){         
        Serial1.print("2");  
        Serial.println("Sent:Off");                          
      }



}

prikad prijimac:


Kód: Vybrat vše

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

}

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


 
//-------------------------------Check Serial Port---------------------------------------
 while (Serial.available()) {
      delay(1);
    if (Serial.available() >0) {
      char c = Serial.read();  //gets one byte from serial buffer
    if (isControl(c)) {
      //'Serial.println("it's a control character");
      break;
    }
      readString += c; //makes the string readString    
    }
 }   

 Q = readString;
//--------Checking Serial Read----------
      if(Q=="1"){         
        digitalWrite(13,HIGH);               
      }
      if(Q=="2"){         
        digitalWrite(13,LOW);             
      }



}

Viktor_EX
Příspěvky: 40
Registrován: 19 črc 2021, 11:18
Reputation: 0

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od Viktor_EX » 09 úno 2022, 15:37

snazim se pochopit, cos napsal ... hele jsem mimo.
snad jen to s tim byte... koukal jsem, ze byte je cislo 0-255

tj moje hodnoty nabyvaji 250-360 (= 2,50V - 3,60V)
takze kdyz by se od nich odecetlo 150, pak hodnoty byly 100-210 ... pak by to s tim byte bylo pruchozi, a na druhy strane zas 150 prictu.
a jo, nacpat to do indexovane promenne cislo[16], to zvladnu

ale s tema funkcema fakt nehnu

Viktor_EX
Příspěvky: 40
Registrován: 19 črc 2021, 11:18
Reputation: 0

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od Viktor_EX » 09 úno 2022, 15:45

dobre tak jinak:

je tu nekdo, kdo za prachy posle 2x 20 radku programu, kde prenesu
16x cislo od 250-360 z jednoho do druhyho arduina po Tx/Rx ??

diky moc, dal asi pres PM (nebo info@quadprofi.cz)

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od kiRRow » 09 úno 2022, 15:52

pro vysílač

Kód: Vybrat vše

byte buff[16]; // buffer pro data, vytvoř ho ještě před setupem
//pak ho ve vysílači musíš nakrmit daty
//buff[0] = dataCidlo1;
//..
//buff[15] = dataCidlo16;
//a pak všechny tyhle data můžeš jednoduše poslat linkou ven
Serial.write(buff, 16); // zapíše do seriové linky všechno z bufferu a omezí na 16byte
pro přjímač

Kód: Vybrat vše

byte buff[16]; // buffer pro data, vytvoř ho ještě před setupem
//pak ho musíš nakrmit daty
Serial.readBytes(buff, 16); // čti seriovou linku po 16bytech a nasyp ji do bufferu - bacha na timeout, jak nedorazí všech 16 za sekundu to zahodí 
// a tim dostanes zpatky to co vysílač vyslal
//buff[0] = dataCidlo1;
//..
//buff[15] = dataCidlo16;
PS: kód vkládej pomocí tagu code ... takova ikonka </>

Viktor_EX
Příspěvky: 40
Registrován: 19 črc 2021, 11:18
Reputation: 0

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od Viktor_EX » 09 úno 2022, 16:09

diky moc, zkusim to, sice zatim tusim

PS: tomu PS nerozumim vubec. pisu kod arduino IDE, ne html kod.

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od kiRRow » 09 úno 2022, 16:46

code.png
code.png (4.5 KiB) Zobrazeno 3049 x

Viktor_EX
Příspěvky: 40
Registrován: 19 črc 2021, 11:18
Reputation: 0

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od Viktor_EX » 09 úno 2022, 16:52

mel bych k danemu tematu otazku:

v prikladu vysilace je nahore:

Kód: Vybrat vše

Serial.begin(9600);  ... tomu rozumím, že to spusteni komunikace do usb konektoru pro monitor
Serial[b]1[/b].begin(9600); ... tomu rozumim, že to je komunikace po TX[b]1[/b]/RX[b]1[/b]
v prikladu prijimace je nahore:

Kód: Vybrat vše

  pinMode(13,OUTPUT); 
  Serial.begin(9600); ... tohle by tedy melo aktivovat usb port, tak jaktoze to do pr**le funguje po tx/rx ??
prijata data bych chtel vypsat pres usb na monitoru prijimace (v tomto pripade A-Uno), coz se mi nedari
A když nahoru do programu pripisu
Serial1.begin(9600); tak to pri kompilaci hazi chybu, a pise to : 'Serial1' was not declared in this scope

jaktoze tam vysilac muze mit Serial i Serial1, a na strane prijimace to nejde?

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: 2X Arduino + TX/RX + prenos cisel

Příspěvek od kiRRow » 09 úno 2022, 17:24

https://www.arduino.cc/reference/en/lan ... on/serial/
Některé čipy mají více sériových linek, je tam tabulka. Nemám tucha jak u ostatních desek ale u uno, nano, mega jsou piny 0 a 1 přivedeny na RS232 USB převodník. Pokud chceš logovat data z USB a zároveň komunikovat mezi deskama, tak logování nech na Serial a komunikaci zapoj na Serial1.

U UNA budeš potřebovat knihovnu softwareSerial ... funguje jen na některých pinech ... ta ti udělá druhou seriovou linku.
Nebo zkus zapojit jen pin z Mega Tx to UNO Rx ... To by pak mělo umět komunikovat svým Tx pinem směr PC ...

Odpovědět

Kdo je online

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