Float küldés soros porton

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
Avatar
boczhunor
Bitmanipulátor
Hozzászólások: 110
Csatlakozott: 2009. augusztus 5. szerda, 6:00

Float küldés soros porton

HozzászólásSzerző: boczhunor » 2011. május 8. vasárnap, 20:19

Hello World! :lol:

Két Arduino között szeretnék soros kapcsolatot létrehozni és tizedestörtet küldeni, illetve fogadni.

Adó:

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

unsigned int i = 25;
float e;
float v;
unsigned long int vv;

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

void loop(){
  e = (float)i + 0.1;
  v = e*10;
  vv = (unsigned long int)v;
  Serial.println(vv);
  delay(5000);
}


Vevő:

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

float dekodolas;
unsigned long int reading;

void setup(){
  Serial.begin(9600);
}
void loop(){
  if(Serial.available()>0){
    reading = Serial.read();
    dekodolas = (float)reading/10;
   
Serial.println(dekodolas);
delay(5000);

}
}


Tulajdonképpen a működés röviden, hogy az adó rész a 25-ös számhoz hozzáadja a o.1-et, ami lesz 25.1, megszorozza ezt tizzel, lesz 251, elküldi, a vevő rész ezt tizzel elosztja, vagyis újból 25.1 lesz. A kapcsolat két Arduino között, az egyik Duemilanove, a másik Mega él. A Duemilanove RX pinje a Mega TX pinjéhez, a Duemilanove TX pinje a Mega RX pinjéhez csatlakozik egy-egy vezeték segitségével. A Duemilanove kiküldi az adatot, vagyis ha egy vezetéket veszek és beteszem az egyik végét az RX-hez, a másikot a TX-hez, látom a Serial Monitoron a 251-es számot. Viszont a Mega semmit sem fogad, mivel a serial.available()-s feltétel nem teljesül. Nem tudom mért nem kommunikálnak. Ha valakinek van megoldása, szivesen fogadom.

Köszönettel,
Bocz Hunor-Chris!

Avatar
Atesz
Tranzisztorgyógyász
Hozzászólások: 164
Csatlakozott: 2006. január 19. csütörtök, 7:00
Tartózkodási hely: Dombóvár

HozzászólásSzerző: Atesz » 2011. május 8. vasárnap, 20:43

Én csináltam már olyat, hogy egy M8 beszélt egy M32-höz soros porton keresztül. De én Bascomban csináltam nem C-ben. Nem tudom az segítség lenne e.

Avatar
boczhunor
Bitmanipulátor
Hozzászólások: 110
Csatlakozott: 2009. augusztus 5. szerda, 6:00

Szia!

HozzászólásSzerző: boczhunor » 2011. május 8. vasárnap, 21:02

Értem.
Köszi!
Nekem is megvan a kód, mint látod, de ez Arduino. Ha lenne működő Arduino megoldásod az jó lenne, de sajnos Bascommal nincs mit kezdjek... És szerintem a kód jó, csak valahol a baud értékeknél vagy valami ilyesminél kell hiba legyen...

Köszi azért!!!
Bocz Hunor-Chris!

Avatar
boczhunor
Bitmanipulátor
Hozzászólások: 110
Csatlakozott: 2009. augusztus 5. szerda, 6:00

Észrevétel

HozzászólásSzerző: boczhunor » 2011. május 8. vasárnap, 21:32

Észrevétel: A két Arduino nem egy közös árramforrásról üzemel. A két Arduino Groundját összeköttem és igy jött át adat. Csak mindig más. Vagyis nem az ment át amit küld az adóáramkör, hanem mindig más...

Avatar
kapu48
Elektronbűvölő
Hozzászólások: 3293
Csatlakozott: 2008. augusztus 29. péntek, 6:00
Tartózkodási hely: Újkígyós

HozzászólásSzerző: kapu48 » 2011. május 9. hétfő, 0:00

Szerintem a Serial.println(vv); utasítás átküldi a „vv CR LF” értékeket.

println()
Prints data to the serial port as human-readable ASCII text followed by a carriage return character (ASCII 13, or '\r') and a newline character (ASCII 10, or '\n'). This command takes the same forms as Serial.print().

A vételnél az utóbbi kettőt is venni kel, és el kel dobni!

Vagy ere való utasítás a : Serial.flush()
Ardunio help:
Flushes the buffer of incoming serial data. That is, any call to Serial.read() or Serial.available() will return only data received after all the most recent call to Serial.flush().
A hozzászólást 1 alkalommal szerkesztették, utoljára kapu48 2011. május 9. hétfő, 8:07-kor.

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

HozzászólásSzerző: Robert » 2011. május 9. hétfő, 0:04

Mega panelen 4 sorosport is van. Jóval beszélgetsz?

Avatar
boczhunor
Bitmanipulátor
Hozzászólások: 110
Csatlakozott: 2009. augusztus 5. szerda, 6:00

Értem. Köszi!

HozzászólásSzerző: boczhunor » 2011. május 9. hétfő, 14:29

A println-nél az line new nem probléma szerintem, flushot betettem de úgy se ment, és printé alakitottam úgyse működött.
Mind a 4 soros port kivan próbálva. De az alapértelmezettet használtam RX-TX. Mert a többi RX3-TX3...

Elég sűrgős a dolog. Ha valakinek van lehetősége, nagyon szépen megkérem, hogy próbálja nekem ki, hogy lássuk esetleg az én Arduinommal van-e valami.

Köszönöm!
Várom válaszaitokat!
Bocz Hunor-Chris

Avatar
boczhunor
Bitmanipulátor
Hozzászólások: 110
Csatlakozott: 2009. augusztus 5. szerda, 6:00

Egy kis kinlódás

HozzászólásSzerző: boczhunor » 2011. május 11. szerda, 18:27

Egy kis kinlódás után megoldottam a problémát. Új programot irtam, amiben a számot karakterekre változtattam, amelyeket elküldtem, majd az adó részen dekódoltam.

Köszönöm mindenkinek!
Bocz Hunor-Chris!


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

Ki van itt

Jelenlévő fórumozók: Bing [Bot] valamint 1 vendég