Fórum témák

» Több friss téma
Fórum » Arduino
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Lapozás: OK   602 / 851
(#) usane válasza sargarigo hozzászólására (») Márc 12, 2020 /
 
Például tegyük fel, különböző forrásból(kommunikációs) jönnek az adatok. Egyikről t1, másikról t2.. tömb. viszont ezeket egyszerre akarom átadni egy másik funkciónak egy teljes tömb formájában. Egyszerűbb lenne, ha nem kellene minden frissítésnél bemásolnom az új adatokat, hanem azok az "összekötés" miatt átkerülnének. Hasonlóképpen ahogy a define működik. Tudom, az konstans, de mintha úgy rémlene változókat is össze lehet valahogy "drótozni".
(#) djusee válasza usane hozzászólására (») Márc 12, 2020 /
 
Probáld esetleg struct -al.
  1. struct foTomb{
  2.         byte t1[4];
  3.         byte t2[4];
  4.         byte t3[4];
  5. };
  6.  
  7. foTomb proba;
  8.  
  9.  
  10. proba.t1
  11. proba.t2
  12. proba.t3 -ként hivatkozol az elemekre
Így át tudod adni az egészet más funkcióknak, pl.
  1. void foo(foTomb a){
  2.  
  3. }
A hozzászólás módosítva: Márc 12, 2020
(#) usane válasza djusee hozzászólására (») Márc 12, 2020 /
 
Ez akár jó megoldás is lehetne, de ezzel az a baj, hogy aminek át akarom adni az egy telepített lib funkciója ami nem fogadja el a struktúrát mint bemenő adat.
(#) djusee válasza usane hozzászólására (») Márc 12, 2020 /
 
Mit vár, tömböt?
(#) sargarigo válasza usane hozzászólására (») Márc 12, 2020 /
 
Össze lehet igen, de az csak azt jelenti, hogy azonos memóriaterületet használnak (ez volt az enu.m). Mondjuk ezen az ágon el lehetne indulni. Kell egy pointer, ami a tömböd elejére mutat, ezt a tömböt használja az egyik szenzorod. Aztán amikor a másik szenzor adatát akarod írni, akkor csak megnöveled a pointer értékét annyival ahány adatelemmel eltolva akarod írni. Végülis működhet.

Tehát ha van egy p1 tömböd, akkor annak a címét *pointer = &p1-ként kapod. pointer értékét meg tudod növelni, és *pointer-be adatot írva a tömb megfelelő helyére kerül. Elvileg. Ha jól emlékszem arra amikor még ilyesmikkel bűvészkedtem (C-ben).

Szerk:
Egy kis olvasnivaló: Bővebben: Link
A hozzászólás módosítva: Márc 12, 2020
(#) djusee válasza usane hozzászólására (») Márc 12, 2020 /
 
Ha a funkciód tömböt és tömb méretét várja(pl. foo funkció) akkor így is tudod átadni(pointerrel).
  1. struct foTomb{
  2.   byte t1[4];
  3.   byte t2[4];
  4.   byte t3[4];
  5. };
  6.  
  7. foTomb proba;
  8.  
  9. void foo(byte a[], int tmbMeret){
  10.  for(byte c = 0; c < tmbMeret; c++){
  11.   Serial.println(a[c]);
  12.  }
  13. }
  14.  
  15. void setup() {
  16.  
  17.   Serial.begin(9600);
  18.   proba.t1[0] = 1;
  19.   proba.t1[3] = 4;
  20.   proba.t2[0] = 5;
  21.   proba.t3[0] = 6;
  22.   foTomb *mutato = &proba;
  23.   foo((byte*)mutato, sizeof(foTomb));
  24. }
A hozzászólás módosítva: Márc 12, 2020
(#) usane válasza djusee hozzászólására (») Márc 12, 2020 /
 
Sargarigo, igen, ez tiszta, erre már én is gondoltam, de ez sem az amit én szeretnék.

djusee: Átnézem, kipróbálom, addig is köszönöm.
(#) djusee válasza usane hozzászólására (») Márc 12, 2020 /
 
Szivesen, sőt akár így is feltöltheted adatokkal
  1. for(byte s = 0; s < sizeof(foTomb); s++){
  2.     proba.t1[s] = s;//t1[0] -tól t3[3] - ig
  3.   }
A hozzászólás módosítva: Márc 12, 2020
(#) sszasza hozzászólása Márc 12, 2020 /
 
Sziasztok, nullkilométeres arduinós vagyok. Kinai nano panel, azt mondja az IDE: hiba a feltöltés közben. A ch340 driver több különböző dátumú verzióját próbáltam már, mind felmegy, látszólag minden rendben. Alaplap info lekérdezésnél van VID meg PID szám, bár azt mondja, ismeretlen alaplap. Hol az átverés?
(#) djusee válasza sszasza hozzászólására (») Márc 12, 2020 /
 
Helyes com port, lap van kiválasztva? Windows -on nem tudok sokat segíteni de esetleg a driver helytelenül lett telepítve?
(#) GPeti1977 válasza sszasza hozzászólására (») Márc 12, 2020 /
 
Arduino / Genuino Uno alaplapot válaszd ki.
A hozzászólás módosítva: Márc 12, 2020
(#) sszasza válasza GPeti1977 hozzászólására (») Márc 12, 2020 /
 
Sajnos nem javult. Programozó alatta pár sorral számít (sima usb-s kapcsolat)? Próbáltam már váltogatni, nem sok jó történt. Két nanom van amúgy, mindkettőnél ugyanez a nyűg.
A hozzászólás módosítva: Márc 12, 2020
(#) sszasza válasza djusee hozzászólására (») Márc 12, 2020 /
 
Csupa okét mondott, eszközkezelő látja... Ki tudja.
(#) sargarigo válasza usane hozzászólására (») Márc 12, 2020 /
 
Idézet:
„de ez sem az amit én szeretnék.”

Most már felcsigáztál! Mit kellene még tudni amit a fenti megoldás nem tud?
(#) GPeti1977 válasza sszasza hozzászólására (») Márc 12, 2020 /
 
Villog rajta a led? Lehet a mikrokontrollerbe nincs beleírva a bootloader.
(#) sszasza válasza GPeti1977 hozzászólására (») Márc 12, 2020 /
 
A led villog. (Gyárilag lehet a kinai bootloader más, vagy hibás vagy valami? )
Szkóppal megnéztem, az avr órajele megy. A ch340c kimenetén 115kbs-el jön az adatfolyam, az avr viszont nem válaszol.
A hozzászólás módosítva: Márc 12, 2020
(#) sszasza hozzászólása Márc 12, 2020 /
 
Köszönöm a tippet, találtam olyan menüpontot hogy "old bootloader". Igy már megy. Jár ez az "old" valami hátránnyal?
(#) sargarigo válasza sszasza hozzászólására (») Márc 12, 2020 /
 
Idézet:
„Jár ez az "old" valami hátránnyal?”

Tudtommal nem. Használd nyugodtan!
(#) Kovidivi válasza sszasza hozzászólására (») Márc 12, 2020 /
 
Indulásnál 2-3mp-ig nem fut a programod. Az újnál ez a várakozás minimális, szinte azonnal indul a programod.
(#) usane válasza djusee hozzászólására (») Márc 12, 2020 /
 
Átnéztem de ezekből nem világos, melyik is a tömb amit megadhatok.
Lehet, hogy még változik, de egyenlőre a következőképpen néz ki.
Van ez a class:
  1. NeoBuffer <NeoBufferProgmemMethod<NeoRgbwFeature>> image(9, 1, TOMB);

Ez még a setup előtt van. A "TOMB" helyére kellene beilleszteni azt a "tömböt" ami több darabból tevődik össze, és ide még egy sima változót sem fogadott el, csak tömböt.
Később az image-nek van egy Block transfer funkciója amit a loopban használok, az előtt adok értéket a dolgoknak. Ez átadja az értéket egy másik class funkciójának.
  1. image.Blt(....)
,de ez a funkció már nem érdekes infonak írtam.
A hozzászólás módosítva: Márc 12, 2020
(#) usane válasza sargarigo hozzászólására (») Márc 12, 2020 /
 
Mint ahogy a legelején is íratm azt szeretném elérni, ha indításkor megcsinálom az összekötést (unio.nnal, mutatóval, bárhogyan), akkor utána mindenféle memcpy, mutatómódosítás és egyéb csiribá nélkül ha értéket adok az egyiknek az megjelenjen a másikban.
Ahogy írtad valószínűleg közös címhasználattal.
Egyszerűsítve:
  1. byte t1[5];
  2. byte t2[2];
  3. t1[3] = t2[0];
  4. t1[4] = t2[1];   de ez az összekötés, maradandó legyen értéktől függetlenül, bármennyi is az aktuális értéke.

Tehát, ha a program futása közben bármikor adok a t2-nek új értéket az átkerüljön a t1 megfelelő helyeire. Konkrétan, ha megnézed az előző, hozzászólásomat amit djusee-nek írtam, látod, hogy abba a classba hová kell az összerakott tömb, példánkban t1. Későb ha adok a t2-nek másik értéket, az automatikusan a t1-ben is ott legyen és nekem csak az ott leírt class blocktransfer funkcióját kelljen vérehajtanom a t1 tömbön. Semmi mutatómozgatás, semmi memcpy. Ahogy írtad azt szeretném ha a t1 elemeinek címei megegyezzenek a t2 megfelelő elemeinek címeivel, ha ez megoldható.
(#) sargarigo válasza usane hozzászólására (») Márc 12, 2020 /
 
Ok, ez eddig is megvolt. De mi bajod a megoldásommal? Transzparensen el tudod érni ugyanazt a területet, ott írod ahol akarod. Akár egyben ki is olvashatod. Ha nem tetszik oké, csak egy javaslat volt. Csak nem értem miért nem jó?
A hozzászólás módosítva: Márc 12, 2020
(#) PHARO hozzászólása Márc 12, 2020 /
 
Sziasztok!


Mit kellene módosítani a programba, hogy a hosszú "ő", "ű" betűket is kiírja?
Erős felhősödés helyett ez van a kijelzőn:
"Ers felhsödés"

Bővebben: Link

Előre is köszönöm!
(#) sargarigo válasza sargarigo hozzászólására (») Márc 12, 2020 /
 
Elkezdtem megcsinálni ahogyan gondoltam, és azt hiszem értem mi bajod van vele. Részemről nem tudok megoldást a problémádra.
(#) Kovidivi válasza usane hozzászólására (») Márc 12, 2020 /
 
Egy nagyon pazarló, de működő megoldás, ha egy sűrűn lefutó interruptban mindig egyenlővé teszed a megfelelő változókat. Pár órajelet igényel csak, plusz az interrupt lefutási ideje.
Más ötletem nincs.
Gondolom egy pointer tömb nem jöhet szóba.
Olyan tömb, aminek minden eleme egy pointert tartalmaz, ami memória címre mutat, ahol a változó van tárolva. Így több tömb is tud ugyanarra a változóra mutatni.
(#) nightlife válasza usane hozzászólására (») Márc 13, 2020 /
 
  1. int a[10] = { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
  2. int b[4];
  3. *(b) = *(a + 3);
  4. *(b + 1) = *(a + 4);
  5. *(b + 2) = *(a + 5);
  6. *(b + 3) = *(a + 6);


Ez azt teszi, amire gondolsz, a memóriacímeket teszi azonossá.
Létezik elegánsabb, rövidebb megoldás, de már sokat felejtettem.
(#) szeg76 válasza usane hozzászólására (») Márc 13, 2020 /
 
  1. byte t1[5];
  2. byte *t2;
  3. t2=t1+3;
  4.  
  5. innentől t2[0] ugyanaz, mint t1[3], t2[1] mint t1[4], stb
(#) rolandgw válasza nightlife hozzászólására (») Márc 13, 2020 /
 
Ez egy sima dereferencia. A C az a[b] hivatkozást *(a+b)-re konvertálja. Szóval csak átírtad az első hivatkozást arra ami egyébként is lenne.
(#) Bell hozzászólása Márc 13, 2020 /
 
Sziasztok!
Leonardoval bootloader égetéssel kapcsolatban volt problémám. (Bővebben: Link)
Sikerült megoldani az ArduinoISP.ino cseréjével, mert hibás volt és az Arduino as ISP(ATmega32U4) könyvtár telepítésével.
  1. // Az ArduinoISP módosítottam:
  2. #define RESET     10
  3. #define LED_HB    13

Így tökéletesen működik a bootloaderek égetése és bármelyik sketch feltöltése a programozó használatával (a Vázlat menűből).
Csak a Duemilanov telepíti helyből a blink-et.
A hozzászólás módosítva: Márc 13, 2020
(#) Lamprologus hozzászólása Márc 13, 2020 /
 
PIC-ről nodeMCU-ra kéne adatokat átküldenem... UART kapcsolaton keresztül már sikerült megoldanom ... de kicsit lassúnak találom.
Mit lenne érdemes használni I2C, SPI ...?
int8, int16, float változókat kéne átküldeni, 250-300 adat, változó időközönként.
Következő: »»   602 / 851
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem