2 arduino közötti kommunikáció
Re: 2 arduino közötti kommunikáció
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...
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...
Re: 2 arduino közötti kommunikáció
A Bascom-AVRben a kulcsszó: split
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:
Eredmény:
Forrás: https://www.inkling.com/read/arduino-co ... recipe-2-7
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) , " ")
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()
{
}
Kód: Egész kijelölése
Peter,Paul,Mary
Peter
Paul
Mary
Re: 2 arduino közötti kommunikáció
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.
Re: 2 arduino közötti kommunikáció
Ü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:
Slave:
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
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 )---
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 )---
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
Re: 2 arduino közötti kommunikáció
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).
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).
Re: 2 arduino közötti kommunikáció
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.
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.
Re: 2 arduino közötti kommunikáció
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.
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.
Re: 2 arduino közötti kommunikáció
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...
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
Re: 2 arduino közötti kommunikáció
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.
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.
Re: 2 arduino közötti kommunikáció
http://www.tavir.hu - a gazda
Re: 2 arduino közötti kommunikáció
Köszönöm a gyűjteményt!
Re: 2 arduino közötti kommunikáció
Köszönöm a gyűjteményt!
Re: 2 arduino közötti kommunikáció
Azt hiszem, egeret kell cserélnem.
Re: 2 arduino közötti kommunikáció
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.
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.
Re: 2 arduino közötti kommunikáció
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>
- ??
- 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