Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Sziasztok!
ESP8266-ot szeretnék rátenni egy Arduino Megára. Elakadtam az egyik adatbekérő iterációnál, feltételezésem alapján valamiért az arduino serial monitorja tölti túl a buffereket, de a Serial.flush() függvényre sem reagál. Tudnátok segíteni, hogy miért triplázza és hogy lehet kiküszöbölni? (csak a 0.-t írtam, a -35, -38-at már magától dobálta ki). Az adatbekérés stringjét Serial.parseInt-tel is próbáltam, úgy csak duplázta. A hozzászólás módosítva: Jan 19, 2019
Szerintem olvashatatlan ez a kép!
Nem tudom kinézni mikor, van l változó vagy 1 érték használva? (Lehetőleg ne használj 1 karakteres változó neveket!) Jobban járnál, ha kódrészletet illesztenél ide, kicsit bővebben. És a terminál szövegét is ki lehet másolni. Egér kijelölés után CTRL+C billentyű kombinációval. És szövegként ide illesztenéd! A hozzászólás módosítva: Jan 19, 2019
Köszönöm!
Kigyomlálom a string függvényeket és átnézem a változók típusait. Ami még nagyon sok helyet foglal az a mozgóátlag számítása. 10, 50 és 100 minta átlagának számytása között nagyon jelentős különbség van a memóriaigényben.
Én mellőzném a 4 Bytes double-vel számolást, ami roppant terület és idő igényes művelet.
A beolvasót értéket felszoroznám 10 – 100 – 1000-el ahány tizedes jegy szükséges? És ezt uint16_t-ben tárolnám, jóval kisseb műveleti igénye van, és gyorsabb is. És ha szükséges kiírásnál vissza osztható.
Nem tripláz semmit a soros monitor.
A -35 és -38 pont 48-cal kisebb érték, mint a soremelés és kocsi vissza ASCII kódja, amit beállítástól függően a begépelt szöveg végére tesz. Egy megoldás, hogy a soros monitoron "Nincs sorvég" opciót választasz. Másik, univerzálisabb megoldás, hogy programban kezeled a bejövő adatot. Ha nem a '0'..'9' karakterek ASCII kódja, nem veszed figyelembe felhasználói válaszként.
Köszönöm. Amennyiben rákerül a későbbi LCD-je és a html beviteli eszköznek, abban az esetben ezek szerint ez a hiba ki fog küszöbölődni, mert csak azokat a karaktereket kapja az Arduino, amiket programból beadok neki, ugye?
Próbáltam timerrel, flushhel, delayyel, egyéb if szerkezetekkel, de addigra már be volt olvasva. Ezek szerint, akkor a beolvasás közben tudok beleavatkozni, hogy ne disfunkcionáljon? Kedves kapu48! Köszönöm az igyekezetet a problémám megoldására, valóban, a kód nehezen átlátható, 3 óra próbálkozás után fordultam hozzátok, sok elvérzett kísérlet után, melyeket nem dolgoztam ki, és elismerem, hogy nem a megfelelő formában raktam fel. Ha újra hozzátok fordulok, ezek szerint fogok eljárni. A hozzászólás módosítva: Jan 19, 2019
Ez függ pár dologtól.
Ha a képen látható lista 9 elem fölé nő, és többjegyű számot kell feldolgozni, akkor ebben a formában nem működik jól. Ha csak az 1..9 számok választhatók, a 0 és minden más érvénytelen, akkor igen. A hozzászólás módosítva: Jan 19, 2019
Szia!
Ahogy szeg76 fórumtárs mondja. A serial.read() 1-1 byte-ot ad vissza eredményül. Azt teheted, hogy az adatokat egy stringbe fűzöd össze, majd azt vizsgálod és alakítod át számmá miután megjött az összes adat. Az if ebben az esetben a cikluson kívül lesz!!! Ez egyszerű, de memória igényes mert a string.h is begyógyul a kódodba aminek esetleg sok-sok felesleges függvénye is lesz, amit nem is használsz. A szebb megoldás az lenne ha a számot magát amit kap a serial-ról, az rögtön azt a számot jelentené ami kell mert ekkor nem kell ide-oda alakítgatni. Azaz a másik oldalról kellene NEM karakterként értelmezett módon küldeni az adatot. egy byte 0-256-ig lehet. Ha ekkora szám elég, akkor 1db byte megy át. Szemben pl ezzel: 95 /r/n ami 4byte.... A hozzászólás módosítva: Jan 19, 2019
"sok-sok felesleges függvénye is lesz, amit nem is használsz." amit nem használsz, az nem lesz befordítva!
Ez legalább egy jó hír! köszi ezt nem tudtam!
Igen, ez a két beállítás alapértelmezett a fordításkor : -ffunction-sections , --gc--sections.
Üdvözlet mindenkinek!
Felmerült egy kérdés amire talán valaki tudja a választ ezért gondoltam , hogy itt érdeklődöm. Létezik I2c buszos modul ami 16db servo-t tud működtetni. PCA9685 16 Channel 12-bit PWM Servo motor Driver Ez rendben is van de visszafelé,hogyan lehet 16 potmétert I2c buszra vissza küldeni? mert ugye a servókat evvel a potikkal szeretném mozgatni minden egyes mocihoz egy poti kellene. Tehát kellene egy modul vagy IC ami tud fogadni 16 potit és I2c-n küldi vissza. Nagy érdeklődéssel és izgalommal várom a választ mert hosszas keresgélés után sem volt a Google a barátom. Puff neki hát ez van utolsó lehetőségként vettem a bátorságot és megosztottam veletek. Üdvözlettel Simonsen!
Tudtommal a szervómotorok attól szervómotorok, hogy megkapják a megfelelő PWM jelet és beállnak oda, ahova kell. Valamit nem jól gondolok?
Egyébként ezt keresd: I2C ADC. Pl.: ADS1115: 4 csatorna, csatornánként 16 bites felbontás, egy I2C buszra négyet lehet felfűzni, max. 860 Sps.
Szia!
Digital Potmeter. Az, hogy van-e olyan amin 16 poti van, azt nem tudom. A hozzászólás módosítva: Jan 19, 2019
Vagy inkább sok-sok 12C Rotary encoder.
https://www.tindie.com/products/Saimon/i2c-encoder-connect-rotary-e...c-bus/ Update: Úgy látom van sorolható kivitelben is: https://www.tindie.com/products/Saimon/i2c-encoder-connect-rotary-e...c-bus/ A hozzászólás módosítva: Jan 19, 2019
Üdv!
Maradok a potméteres változatnál ha van ilyen. De azért köszi. Simonsen!
Abban az esetben i2c AD konverterre lesz inkább szükséged. A potikkal előállított fesz értékekkel akarod majd vezérelni a szervókat gondolom. Ekkor inkább i2c AD konverter kell, ami minimum 16 csatornás. Sima potikkal csak ezt tudom elképzelni mert nincs ennyi AD converter lába az arduinonak.
Erre tudok gondolni.
Üdvözletem!
Igen jól gondolod de a másik oldalon lehet digitálisan programból működtetni meg lehet bármiről is konvertálni de az én esetemben csak potméter jöhet szóba. Keresem az ADS115 az jónak ígérkezik. Hálásan köszönöm! Üdvözlettel Simonsen!
mint pl itt is:
https://forum.arduino.cc/index.php?topic=447245.msg3077334#msg3077334 Igaz, ez csak 8 csatornás, de kettő ebből és meg is van a 16 csatorna.
Egy olyan kontrollerrel is meg lehet valósítani, aminek van 16 (10 vagy 12 bites) A/D csatornája és I2C illesztője. Pl. PIC16F18455, PIC16F18456: 24 bemenetű 12 bites A/D modul és I2C slave módra is képes illesztő.
Üdvözletem!
Elnézést kérek mindenkitől mert elfelejtettem megemlíteni,hogy arduinora kell. közben rátaláltam az ADS1232 re. Köszönöm mindenkinek a segítségét. Üdvözlettel Simonsen!
Olvastam én, hogy arduinora -hoz kell. Az arduinora kezelné I2C felületen a PIC -et, mint 16 csatonás 12 bites A/D -t.
ADS1232 (Mouser 2 331,51 Ft/db) --- PIC16F18455 (Chipcad 370 ... 500 Ft/db tokozástól függően).
Tisztelt Hp41C!
Sajnos nem értek a PIC hez. Közben megtaláltam az ADS1256 8CH modult. Az hogy a PIC olcsób egyáltalán nem érdekel ha hülye vagyok hozzá. Van céleszköz ami egyszerűbb és praktikusabb még ha többe is kerül. Köszönöm mindenkinek , hogy rávezetett a megoldásra. Marad az ADS1256 Üdvözlettel Simonsen!
Nem túl nagy ágyú az egy ekkora verébre? Mármint az ADS1256.
Ha az I2C buszt lefoglalod, akkor marad 6 ADC-d egy Nano-n. A 16 darab potiból egyszerre mindig 6-ot olvasol be. 3 darab 4052-vel megoldhatod, hogy egyszer az egyik, másik, majd harmadik 6-os csoport potiját olvassad be. Lehet, hogy adódhat olyan dolog, hogy az analóg kapcsoló nem viszi át 5 voltos táplálás esetén az egész 5 voltos tartományt, de ebben az esetben egy-egy diódán keresztül kapják a potik az 5 voltot és a GND-t. Így alsó állásban 0.6 volt, felső állásban 4.4 volt lesz a potikon, de ezt átviszi az analóg kapcsoló, és majd szoftveresen korrigálod.
De legalább a sarki alkatrész boltból megoldod . Szerk: tudom, hogy 3x6 az 18, de 2 poti helyet majd nem használsz. A hozzászólás módosítva: Jan 20, 2019
Én egy LCD-vel, egy rotary encoderrel és egy nyomógombbal oldanám meg a problémát. Felbontástól függően több képernyővel oldanám meg, ha 0-9 érték elég, akkor egy kijelzőre elfér mind a 16 érték. Ha ez csak visszajelzés, akkor a háttérben a változó mehet 0-100 között is, az LCD-re pedig a tized részét írnám ki (attól függ mire kell ez az egész). Nyomógombbal a szervók között tudok váltani, a rotary encoderrel tudom az állását módosítani. Két potinál többet egy időben úgyse fogsz állítani, mivel csak két kezed van, ezért két rotary encoder is elég lenne bőven. Azért nem poti, mert akkor a szervó jelenlegi állása és a poti állása tuti nem egyezik, így szervó váltásonként minden szervó felvenné a poti aktuális állását (kivéve, ha ez a probléma a programban le van kezelve: csak akkor küldöm ki a szervónak a poti állását, ha kicsit megmozdult). Az analóg multiplexeres megoldás is tetszett.
cd4067 1-16 vagy 16-1 multi/demultiplexer.
1 analóg AD csatornát foglal + 4db címző vonalat az arduból. A szinteltoló dióda se nagyon szükséges a map() függvénnyel lehet deltaX bemenetű értékű tartományból deltaY értékű kimeneti tartománnyá konvertálni .
Sziasztok!
Használhatom-e a nano-t az uno bootloaderjével? Sajnos a nano bootloaderje valamiért vacakol, amikor egy wdt-t tartalmazó vázlatot töltök fel és wdt miatt újra kellene indulnia, de csak a led villog. Az uno bootloaderjével nincs ilyen hiba. Vagy esetleg valakinek más ötlete, hogy a nanora nano bootloader kerüljön és működjö a wdt is? Köszi.
Akkor jó. A nano bootloaderje miért csinál ilyet? Nincs rá javítás?
|
Bejelentkezés
Hirdetés |