2 arduino közötti kommunikáció

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Gyuresz
Újonc
Újonc
Hozzászólások: 13
Csatlakozott: 2013. július 13. szombat, 18:34
Tartózkodási hely: Budapest

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: Gyuresz » 2013. október 24. csütörtök, 18:38

Robi kösz a segítséget ez így nagyon jól működik!
Kis ez-meg az miatt elhanyagoltam az arduinomat, 4 napja vettem elő, és eszen a méreg ismét...
A problémám a következő:
Kiküldött adatok kimennek, egy vessző választja el őket egymástól, a küldés forráskódja amit te adtál meg korábban.
Ugyanezt kellene értelmeznem , úgy hogy a vesszők után léptessen , a vesszők közt levő karaktereket egy tömbnek olvasva...

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: Robert » 2013. október 24. csütörtök, 19:51

A Bascom-AVRben a kulcsszó: split

Kód: Egész kijelölése

Dim S As String * 80
Dim Ar(5) As String * 10
Dim Bcount As Byte
Bcount = Split( "this is a test" , Ar(1) , " ")


Bcount = 4 mert ennyi elemű lesz a tömb
a(1)="this"
a(2)="is"
a(3)="a"
a(4)="test"
" " az elváalsztójel. nálad ez a "," lesz


Arduino alatt:

Kód: Egész kijelölése

/*
 * SplitSplit sketch
 * split a comma-separated string
 */

String  text = "Peter,Paul,Mary";  // an example string
String  message = text; // holds text not yet split
int     commaPosition;  // the position of the next comma in the string

void setup()
{
  Serial.begin(9600);
 
  Serial.println(message);          // show the source string
  do
  {
      commaPosition = message.indexOf(',');
      if(commaPosition != -1)
      {
          Serial.println( message.substring(0,commaPosition));
          message = message.substring(commaPosition+1, message.length());
      }
      else
      {  // here after the last comma is found
         if(message.length() > 0)
           Serial.println(message);  // if there is text after the last comma,
                                     // print it
      }
   }
   while(commaPosition >=0);
}

void loop()
{
}


Eredmény:

Kód: Egész kijelölése

Peter,Paul,Mary
Peter
Paul
Mary

Forrás: https://www.inkling.com/read/arduino-co ... recipe-2-7

Avatar
SzLacus
Tranzisztorgyógyász
Hozzászólások: 175
Csatlakozott: 2012. május 20. vasárnap, 6:00
Tartózkodási hely: Budapest

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: SzLacus » 2013. október 25. péntek, 14:38

Megoldás lehet, hogy a vett karaktereket mondjuk swith/case válogatod. A tömbödre alkalmazol egy írás mutatót, a vett karaktert pedig az írásmutatónak megfelelő helyre tolod a a tömbödben. Amikor meg elválasztó karakter jön, akkor az írásmutatódat növeled. Vagyis csak két case lesz, az egyik az elválasztó karakter, a másik meg a tömbbe írja a vett karaktert. Ez akár a default is lehet, ha nem probléma hogy olvashatatlan karaktert is tudsz kapni a kommunikáció során. Ha csak értelmezhető tartományba eső karakterek kerülhetnek a tömbbe, akkor még egy kicsit szelektálni kell a vett karaktert.

kukuri
Bitmanipulátor
Hozzászólások: 131
Csatlakozott: 2014. január 20. hétfő, 12:50

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: kukuri » 2015. június 24. szerda, 23:44

Üdvözlet!

Két arduinot akarok rábírni hogy egymásnak adatot adjanak át. Az átadni kívánt adat string sor.
Mivel a két vezérlő elfér egymás mellett gondoltam elég az RX-TX lábakat összekötni. Végül sikerült egyfajta működésre bírni, de van amit nem értek benne.
A kódok.
Master:

Kód: Egész kijelölése

int EN = 2;

void setup() /****** SETUP: RUNS ONCE ******/
{
  pinMode(EN, OUTPUT );
  pinMode(9, OUTPUT );
  Serial.begin (9600);
}//--(end setup )---

void loop()    /****** LOOP: RUNS CONSTANTLY ******/
{
  // Send Data
  digitalWrite(EN, HIGH ); // enable send
  Serial.println( "A_kapcsolo");
  digitalWrite (9, HIGH );
  delay(1000);
  digitalWrite (9, LOW );
  Serial.println( 'B' );
  delay (3000);
}//--(end main loop )---


Slave:

Kód: Egész kijelölése

int ledPin=9;
int EN = 2;
int Val;
String adat="";

void setup()/****** SETUP: RUNS ONCE ******/
{
  pinMode(ledPin, OUTPUT );
  pinMode(EN, OUTPUT );
  Serial.begin (9600);
}//--(end setup )---

void loop()  /****** LOOP: RUNS CONSTANTLY ******/
{
  // receive Data
  digitalWrite (EN, LOW ); // enable receive
  if (Serial.available())
  {
      char c=Serial.read();
      adat=adat+c;
      Serial.println(adat);
    if ( String(adat) == "A_kapcsolo")
    {
      digitalWrite (ledPin, HIGH );
      delay (1000);
      digitalWrite (ledPin, LOW );
      delay (1000);
    }
  }
  else
  {
   Serial.println("");
  adat="";
  }

}//--(end main loop )---


A kód RS485 re készült, de ha nem kell nem tenném be őket. Ha jól gondolom ez akkor kell ha távolabb vannak egymástól az eszközök.
Amit nem értek az a Slave utolsó soraiban a semminek a kiíratása. Ha nem íratom ki a semmit akkor csak karakterenként hajlandó kezelni a kapott adatot. Ha kiíratom a semmit akkor már összefűzi a karaktereket stringé és kapcsolja is a ledeket. Vagy a hiba ott van hogy az RX-TX lábakat ne is kössem így össze a két lapka között

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: Robert » 2015. június 25. csütörtök, 4:15

Az EN láb ekkor felesleges.
A soremelés az nem játszik szerepet a programkódban.

Az első A_KAPCSOLO beérkezése után van még 1 ENTER (10;13) karakter is!
Ha folytatod a vételt, akkor az adat változód:
A_KAPCSOLO{10}{13}A_KAPCSOLO{10}{13}A_KAPCSOLO{10}{13}A_KAPCSOLO{10}{13}A_KAPCSOLO{10}{13}A_KAPCSOLO{10}{13}A_KAPCSOLO{10}{13}
Azaz a változódat adat=""; nullázni kell.
Az ENTER nem küldendő (serial.println helyett serial.print).

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 26. péntek, 17:47

Sziasztok!

Adott 2db UNO.
Feladat: folyamatos állapotfigyelés.

Az 1-es kártya 2, 3, 4, 5 bemenetére érintkezők jelei érkeznek (0->1, 1->0 állapotok). Ezeket az állapotokat szeretném átküldeni a 2-es kártyára, úgy, hogy az 1-es kártya 2, 3, 4, 5 bemenetinek megfelelően a 2-es kártya 2, 3, 4, 5 kimenetei felvegyék ugyanazokat az állapotokat.
Melyik kommunikációs lehetőséget használjam?
Mekkora lehet a maximális távolság a két kártya között? Pl. 100m?
A sebesség nem számít, azaz ha lassú, az sem baj.

Ha lehet, kérnék egy nyúlfarknyi programot. Köszönöm.

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 26. péntek, 17:47

Sziasztok!

Adott 2db UNO.
Feladat: folyamatos állapotfigyelés.

Az 1-es kártya 2, 3, 4, 5 bemenetére érintkezők jelei érkeznek (0->1, 1->0 állapotok). Ezeket az állapotokat szeretném átküldeni a 2-es kártyára, úgy, hogy az 1-es kártya 2, 3, 4, 5 bemenetinek megfelelően a 2-es kártya 2, 3, 4, 5 kimenetei felvegyék ugyanazokat az állapotokat.
Melyik kommunikációs lehetőséget használjam?
Mekkora lehet a maximális távolság a két kártya között? Pl. 100m?
A sebesség nem számít, azaz ha lassú, az sem baj.

Ha lehet, kérnék egy nyúlfarknyi programot. Köszönöm.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: Robert » 2017. május 26. péntek, 18:13

A feladatot senki nem találja ki helyetted.
2 arduno közti kommunikáció lehetőségei:
- 5V TTL sorosport - 9600 bps, ~10m
- RS485 illesztéssel - 9600 bps 1.2km
- Ethernet - 185 méter
- I2C - max 1.2 (esetleg 10m)
- I2C - lowspeed (10k) ~10...15m, de zaravérzékeny, és nem szabvános megoldás!
- SPI - 1MBPS ~20cm
- 1Wire - 15.6k, ~25...75m (lsd kialakítási szabvány/javaslat)
- RF kapcsolatok garmadája
- Optikai átvitel
- hangalapú átvitel...
http://www.tavir.hu - a gazda :)

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 26. péntek, 18:40

Remek, az RS485 tetszik, van is hozzá két kártyám.
http://www.ebay.com/itm/2PCS-MAX485-mod ... 1906910642
Remélem, találok hozzá példaprogramot, de szívesen venném a segítséget.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: Robert » 2017. május 26. péntek, 19:27

http://www.tavir.hu - a gazda :)

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 27. szombat, 6:51

Köszönöm a gyűjteményt!

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 27. szombat, 6:51

Köszönöm a gyűjteményt!

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 27. szombat, 6:54

Azt hiszem, egeret kell cserélnem.

LErvin
DrótVégénSzéndarab
Hozzászólások: 19
Csatlakozott: 2017. május 24. szerda, 20:20

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: LErvin » 2017. május 28. vasárnap, 15:15

Sajnos a lényegre még mindig nem találtam megoldást. Portmásolás.
Kiküldök a soros portra nyoc bitet, 10000100. Pl. a hatodik 1-es azt jelenti, hogy adóoldalon a 6-os bemenet HIGH szinten van. Hogy tudnám a vevőoldalon csak ezt az egy bitet, a hatodikat kiolvasni ahhoz, hogy ott a 6-os kimenetet HIGH szintre kapcsolja? Ugyanez a többivel is.

Avatar
Robert
Elektronbűvölő
Hozzászólások: 9917
Csatlakozott: 2005. december 9. péntek, 7:00
Tartózkodási hely: Budapest
Kapcsolat:

Re: 2 arduino közötti kommunikáció

HozzászólásSzerző: Robert » 2017. május 28. vasárnap, 19:03

Mi a kimenő adat?
- BIT-eket reprezentáló számsor? 1010101100<enter>
- szám 0...255 közt, azaz a biteket leképezed byte-ra
- szám HEX formában: 00...FF<enter>
- ??
http://www.tavir.hu - a gazda :)


Vissza: “Arduino / C-nyelvű programozás (AVR-Duino, EthDuino, Arduino, Diecimila)”

Ki van itt

Jelenlévő fórumozók: nincs regisztrált felhasználó valamint 1 vendég