Long - digit lábra küldése

Processing/Wiring (illetve C) nyelvű programozási fogások, tippek. (AVR-Duino, Arduino, EthDuino, Diecimila, Severino, Nano, LilyPad)
q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Long - digit lábra küldése

HozzászólásSzerző: q1900dc » 2017. május 2. kedd, 18:07

helló!
Soros porton beirt long értéket hogyan lehet leggyorsabban elküldeni digitális lábra (arduino uno)?
Mert ez elég lassú megoldás "Serial.parseInt();" !

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

#include <RCSwitch.h>



#include<EEPROM.h>//könyvtár bekérése
 
unsigned long addr;

RCSwitch mySwitch = RCSwitch();



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


mySwitch.enableTransmit(10);

mySwitch.enableReceive(0);
}
void loop() {

  if (mySwitch.available()) {
   
    int value = mySwitch.getReceivedValue();
   
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }

 mySwitch.resetAvailable();
  }
 
if(Serial.available()) { //a soros port változását figyeli

addr=Serial.parseInt();
mySwitch.send(addr, 24);
delay(30);

Serial.print(addr);

Serial.println(); //eeprom kiíratása


}
}

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 2. kedd, 19:47

Beolvasod 1 char tömbbe bilentyüzetröl a szöveges adatot, majt átkonvertálod az atol() fügvényel.
Idézet a fentebb linkelt könyvből:
B5. Kiegészítő rendszerfüggvények: az <stdlib.h> header
Az <stdlib.h> standard headerben vannak deklarálva a számkonverziós, tárkezelő és más hasonló, általános jellegű függvények. Az egyes függvények leírása:

double atof(const char *s)
Az atof függvény az s karaktersorozat tartalmát double típusú számmá alakítja. A függvény egyenértékű az strtod(s, (char**)NULL, 10) függvénnyel.

int atoi(const char *s)
Az atoi függvény az s karaktersorozat tartalmát int típusú számmá alakítja. A függvény egyenértékű az (int)strtol(s, (char**)NULL, 10) függvénnyel.

long atol(const char *s)
Az atol függvény az s karaktersorozat tartalmát long típusú számmá alakítja. A függvény egyenértékű az strtol(s, (char**)NULL, 10) függvénnyel.


Fentebb találsz rá példát:

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

/*
  SerialEvent occurs whenever a new data comes in the
 hardware serial RX.  This routine is run between each
 time loop() runs, so using delay inside loop can delay
 response.  Multiple bytes of data may be available.
 */
void serialEvent()
...


Még a Serial.begin(9600); veheted magasabbra, sokat javít a sebességen.

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 2. kedd, 20:07

long atol(const char *s) ezel a részel ?

igazábol csak számok amit küldeni kell!

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 2. kedd, 20:15

Igen!

Csak a PC monitor felöl stringet kapsz, mikor beírod a számot és nyosz entert!
Ezt a stringet venni kel előbb, aztán átalakítani long-ra, és azt tovább küldeni.

Viszont ha nem túl hosszúak a soros kábelek?
A baudot felvehetem mximumra is 250000! Ez egyszerübb eredményt hoz!

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 2. kedd, 20:36

esplink max 115200 baund!

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 2. kedd, 20:55

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

#include <RCSwitch.h>




 
long addr;

RCSwitch mySwitch = RCSwitch();



 
void setup() {
Serial.begin(115200);


mySwitch.enableTransmit(10);

mySwitch.enableReceive(0);
}
void loop() {

  if (mySwitch.available()) {

   
   
    int value = mySwitch.getReceivedValue();
   
    if (value == 0) {
      Serial.print("Unknown encoding");
    } else {
      Serial.print("Received ");
      Serial.print( mySwitch.getReceivedValue() );
      Serial.print(" / ");
      Serial.print( mySwitch.getReceivedBitlength() );
      Serial.print("bit ");
      Serial.print("Protocol: ");
      Serial.println( mySwitch.getReceivedProtocol() );
    }

 mySwitch.resetAvailable();
  }
 
if(Serial.available()) { //a soros port változását figyeli

   String str(Serial.read());

   long x = stringToLong(str);

//addr=Serial.parseInt();

long stringToLong(String s)
{
   char addr[12];
   s.toCharArray(addr, sizeof(addr));
   return atol(addr);
}

 
mySwitch.send(addr, 24);
delay(30);

Serial.print(addr);

Serial.println(); //eeprom kiíratása


}
}

hibakod:
C:\888888888888888888888\eeprom_my3rf\eeprom_my3rf.ino: In function 'void loop()':

eeprom_my3rf:52: error: 'stringToLong' was not declared in this scope

long x = stringToLong(str);

^

eeprom_my3rf:57: error: a function-definition is not allowed here before '{' token

{

^

exit status 1
'stringToLong' was not declared in this scope

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 2. kedd, 22:53

Bocsi!
De az eddigiekből lemérhető, hogy még kevés a programozó tudásod ehhez a feladathoz!

Tarsdmeg a: Serial.begin(115200); változtatást!
A többit csináld vissza.

Már ezzel is 12* gyorsabb lesz a soros kommunikálás.

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 2. kedd, 23:05

Ha készítesz 1 fügvényt?
Akkor ne a loopon() {belülre tegyed!}

Hanem a setup() elé!
Így valahogy:

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

#include <RCSwitch.h>

long addr;

RCSwitch mySwitch = RCSwitch();

// ide rakjuk:
long stringToLong(String s)
{
char addr[12];
s.toCharArray(addr, sizeof(addr));
return atol(addr);
}

void setup() {
Serial.begin(115200);
...


Sajnos ez csak a legnagyobb hiba, a programodban!

A másik hiba, hogy még azt sem olvasod el, amit kiragadok 1 nagy könyvből, mivel fontos:
B5. Kiegészítő rendszerfüggvények: az <stdlib.h> header
Az <stdlib.h> standard headerben vannak deklarálva a számkonverziós, tárkezelő és más hasonló, általános jellegű függvények. Az egyes függvények leírása:


Pedig illene elolvasni az egész könyvet! Ha programozni szeretnél?

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 3. szerda, 11:17

Hamarabb tanulok minta példál alpján amit bármilyen nyelvi könyvböl edig meg tutam volna érteni szakifejezések miatt ami egyszerüen nem értem meg!
Arduino cc vagy google keresem a minta példákat ugy 50% van rá hogy sikerül Spanyol viasz feltalálni mégegyszer már nem kell....
Nagyon összetet dolgogba nemmegyek bele ugy sem mert reménytelen nekem elég a mezei logikai fügvényel programozás böven ki szolgálja a feltételeimet nekem a nagyon bonyolultab rész az adat feldolgozása pl mind a fenti konvertálás!

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 3. szerda, 13:54

Eddig ok!
Én is ezt szoktam javasolni, a gyakorlás jobban meg marad az emberben, mint a száraz elmélet.

Viszont ha a könyveket ennyire megveted?
Akkor azt sosem tudod meg, hogy miért kel megkeresned, hogy valamely használni kívánt függvény hol van deklarálva?
És még mindig nem tudod, hogy ha használni akarod a ’atol(addr) ’ függvényt, akkor miért kell betenni a programodba: #include <stdlib.h> sort!

Az össze ollózgatásnak is csak akkor van eredménye, ha ismered az alapokat!

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 3. szerda, 16:01

Jó könyvek az ritka amit öröm olvasni vagy nyüglödés követni megérteni....
De lehet a logikai füg azért könyü mert elettronika már régota csinálom de lehetöségel helyetesitem és itt lehet a határa számomra a programozási szintel...
Megélni nem fogok belöle pár projekt össze jön saját részre az nekem elég és ennyi is az igényem!
De valoszinü hogy erre a feladatra több idöt nem szánok nincs értelme nem vagyok nagy matekos eredményt nem hozot kutatás sem ...

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: kapu48 » 2017. május 3. szerda, 17:35

Szeretném megkérni a nagyérdemű közönséget!
Hogy lehetőleg az eredeti témához illő, hozzászólásokat tegyék meg itt!
Más témában nyissanak maguknak új topikot!
Mert az ilyen laikus kérdezők, szétforgácsolják az eredeti témát!

És a Moderátort meg kérném, hogy az első 3 hsz. kivételével, a többit rakja át valami hozzá illő helyre!
Mert szeretném a program fejlesztés témát folyamatosan folytatni.

Köszönöm a megértést!

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

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: Robert » 2017. május 3. szerda, 17:37

Lépésenként tanulni.
Igen utánaolvasva...


A nem ér ennyit - az számomra két dolgot jelent:
- nem akarok időt sem áldozni rá, mert van más/kész/jobb megoldás
- "sültgalamb"
- alapokat sem tanulom meg : Z generáció error: "azonnal ide nekem, mert megérdemlem, de semmit nem teszek érte...."
http://www.tavir.hu - a gazda :)

vargham
Chipgyilok
Hozzászólások: 263
Csatlakozott: 2014. január 8. szerda, 8:32
Kapcsolat:

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: vargham » 2017. május 3. szerda, 17:59

"Z generáció error"
Láttam én ilyet idősebbeknél is. Öreg vagyok már, angolul sem tudok, nem is akarok megtanulni, de valaki segítsen.

q1900dc
DrótVégénSzéndarab
Hozzászólások: 35
Csatlakozott: 2017. február 2. csütörtök, 18:26

Re: Soros parancs értelmező program készítés!

HozzászólásSzerző: q1900dc » 2017. május 3. szerda, 18:38

Kár hogy ennyit szemeteltünk....


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