Fórum témák
» Több friss téma |
A klónok CH340 Soros-USB illesztőjének drivere (Letöltés)
Pár dolog amit észrevettem, igaz C# nem az erősségem. Gondolom Visual Studio:
1: A tervezés időben megadtad gondolom a trackbar minimum és maximum értékét (1-255) 2: A buttonokból egyelőre vedd ki a trackbar értékadásokat! Ha azt állítod ott, akkor a scroll sub fut le először, amiben írsz a serial-ra, majd visszajön onnan és megint írsz a serialra. private void button3_Click(object sender, EventArgs e) { itt lehet meghívódik a scroll, amiben írsz a serial-ra. trackBar1.Value = 127; majd megint írsz rá, más értékkel 3. Gondolom, hogy az 'InitializeComponent();'-ben meg van adva minden a sorosportra vonatkozóan. Boud Rate, StopBits stb. SerialPort mySerialPort = new SerialPort("COM1"); mySerialPort.BaudRate = 9600; mySerialPort.Parity = Parity.None; mySerialPort.StopBits = StopBits.One; mySerialPort.DataBits = 8; mySerialPort.Handshake = Handshake.None; mySerialPort.RtsEnable = true; Ez sem ártana bele, de lehet kisebb érték is. // Set the read/write timeouts mySerialPort.ReadTimeout = 500; mySerialPort.WriteTimeout = 500; A track scrollban meg kellene várni az adatátvitel végét, mert túl gyors is lehet a változás!
Próbáld ki ezt is:
Ezek helyett: serialPort1.Write(Convert.ToString(trackBar1.Value)); serialPort1.Writeline(Convert.ToString(trackBar1.Value)); A hozzászólás módosítva: Feb 25, 2017
A másik pedig az (Lehet tévedek), hogy az Arduino kódban a serial read csak BYTE-onként olvas... Ha küldesz felé egy ilyet: "81" akkor elsőre feldolgozza a 8-at, nem csinál semmit, majd az 1-t, amire csinál mást. Ha igazam van akkor pl a 41-re is hasonlóan fog reagálni.
soros_port_adat = Serial.read(); Véletlenül nem csak 1 byte-ot olvas be???? Ha igazam van, akkor az arduino kódot is, és a c# kódot is meg kell változtatnod. A hozzászólás módosítva: Feb 25, 2017
Köszönöm. Kifogom próbálni.
Az egyik fórumon találtam egy elegánsabb megoldást a problémámra. Az adatokat byte-onként küldik át a soros porton.
A kérdésem az lenne , hogy itt pontosan mit küldenek át? Pontosabban mit jelent a serialPort1.Write(b, 0, 4); sorban a 0 és a 4 -es szám? Az utasítás leírása itt van, de itt nem így adja meg a paramétereket. A hozzászólás módosítva: Feb 25, 2017
Igen valóban ez tényleg így van.
Nem azt küldik akkor.
Szerintem jobb lenne, ha kitalálnál egy saját kis protokollt.. A C# kódban az értéket átlököd string-be, majd hozzáteszel pl egy '#' karaktert a végére, majd serial.write. Az Arduinoban pedig while ciklus addig amig a serial elérhető, a ciklusmagban pedig összefűzöd a karakterket, amíg ez a karakter be nem jön. (egész pontosan egy tömbbe teszed) Így szépen megkapod amit szeretnél. Hasonlóan ehhez: Bővebben: Link VAGY!!!! Ahogy legutóbb írtad, a scroll értékét int típusként küldöd az arduino felé, azt olvasod ki (ott is int típusnak kell lennie, lehet uint), és a case-ben már nem szövegként, hanem értékként kezelheted... nem kell '123', helyette már sima 123 Amit kérdeztél, most nem tudom, a 0 mit jelent, de a 4 az 4 byte-ot jelenthet.
Írtam:
soros_port_adat = Serial.read(); Véletlenül nem csak 1 byte-ot olvas be???? Ez gondolom csak akkor igaz, ha az Arduino kódban a beolvasás char... Ha pl define LED1 9 #define LED2 13 uint soros_port_adat; lenne, akkor a beolvasáskor már 4 byte-ot szed ki a pufferből. (ondolom én), így a C# kódból szövegátalakítások nélkül küldheted feléje, mint a legutóbbi hozzászólásodban. Annyi gond lehet még, hogy lehet nem tud az arduino 4-byte-os integert, csak 2-t. Ezt meg kell nézned.. Ha így van, akkor a c#kódban kell átalakítanod a küldendő adatot 2byte-osra, de ekkor a b[] nem 4 hosszú lesz, csak 2.
Ezt a case-es dolgot nem nagyon értem. Ott nem csak string típusú lehet?
VAGY
mivel 0-255-ig lehet beállítani a scrollt ezért a CHAR változód az Arduino-ban megkapja az értéket, de a case-ben nem kell '' közé tenni.... Ebben az esetben az arduino kódban a case ben ' ' -ki kell venni, a C# kódban pedig a scroll értékét át kell adni egy szintén Char-változónak, ami 0-255 érték lehet, ami 1 byte, és azt küldeni a seriallal.... Így sokkal egyszerűb.
Nem csak string lehet.
A char felveszi azt az értéket, amit kapott a serial-ból. Mondjuk ez 32 (space). Ha ezt írod hogy: case ' ' akkor az történik, hogy a ' '-közé írt karakter (most a space) ASCII kódját hasonlítja össze a változód értékével. Ennyi, semi más. Szóval küldj el a c#-ból EGY bájtot, ami 0-255 lehet, (scroll.value convert to byte??? vagy char?) majd az Arduból simán read, de a case-ben nem kellenek a '' karakterek.
Rendben, megpróbálom.
Sok a melóm, illetve nem vágom most fejből, de lehet az arduino-ban a char típus helyett jobb lenne a byte. Szóval amit kiolvasol változót, az inkább byte legyen. VB.Net-ben jobban tudom, engem kicsit megzavar ez a char, meg byte a c-ben. Mikor char ami 1 byte, stb..
A hozzászólás módosítva: Feb 25, 2017
Sziasztok! Egy olyan kérdésem lenne van egy értékem amit nyomó gombbal állítok fel le amikor kikapcsolom az arduinot és vissza be kapcsolom vissza áll az alap értékre. Olvastam, hogy EEPROM-ba lehet menteni az értéket de kb 10000 szer. Nekem lehet naponta lesz változtatva 1000 szer.
Nem lehet valahogy megoldani, hogy az előre beállított alap érték változzon? És ha ki kapcsolom azzal induljon? Köszönöm.
Ne minden egyes gombnyomásnál ments eepromba, hanem például csak az utolsó változás után 10 másodperccel.
Vagy csak akkor ments eepromba, mikor a készüléket kikapcsolod.
Azt hogy tudom megoldani, hogy kikapcsoláskor mentsen?
Kezdő vagyok ezen a téren.
Sziasztok!
Lenne egy kis gondom. Adott egy függvény: y=36.74+4.73*x-0.0489*x^2-0.00038*x^3+0.000012*x^4 x megy 0-65-ig. f(65)=247 lenne. De az arduino valahogy sehogy sem akar 150 fölé menni. Így lett beírva a programba: y = 36.66+4.73*x-0.0489*(x*x)-0.00038*(x*x*x)+0.000012*(x*x*x*x); Az x és y az int-es, de próbáltam float-al és double-el is.
Szia!
További kód? x legyen float, meg az y is. értékadáskor meg x=65.0 Polinom illesztés?
Most már jó. Igen ez egy polinom illesztés. Van egy mutatós fordulatszámmérőm, azt kellett megcsinálnom, hogy annyit mutasson amennyit bevittem neki, mert nagyon nem lineáris. Így viszont már csak maximum 100-at csal, nem pedig 1500-2000-et.
Mi volt a gond?
Az x-et int-ben számoltam. Az y-t így hiába tettem floatba, ha intben az x^4-en más túl sok volt.
Nagy nehezen sikerült összehozni. Igaz nem a char-ral , de majd azzal is megpróbálom. Az int -et bájt-ra alakítását választottam. A soros port csak 4 bájtot enged valamiért. A nulla az eltolást jelenti.
A hozzászólás módosítva: Feb 25, 2017
Az arduino-ban pedig a char helyett int-et olvasol be a serial.read-ban?
A hozzászólás módosítva: Feb 25, 2017
Igen, int-et. Az érdekes, hogy így működik a Serial.available() függvény. De a case -esetében nem.
A hozzászólás módosítva: Feb 25, 2017
Akkor ok. Ezek szerint mindegyik esetben az int 4 bájtos, a byte sorrend is azonos, illetve a read annyi bájtot olvas, mint amennyi a változó. Legalábbis remélem.
Az aktualis adatok elmenteset en attachinterrupt-al oldottam meg. A tap feszultseget (ami nagyobb mint 5 V, peldaul 12V) ellenallassal leosztottam 4 V-ra (egy allithato ellenallassal), azt pedig rakotottem az interrupt pinre. Igy amikor az a logikai szint ala csokken akkor elmenti az ertekeket az epromba. Na persze az IC tapjara, az 5V-ra tettem 3000 µF kondit azert hogy legyen meg egy annyi aramja a kapcsolasnak hogy vegrehajtsa az eprom irast. Nalam mukodik.
Sziasztok!
Az eBay -es és hasonló forrásokból beszerzett Arduino hardverek mennyire megbízhatóak vagy éppen kerülendőek? Köszönöm
Nekem eddig 5+ darabból nem volt problémám, persze én "koca" felhasználó vagyok, az ilyen óra, hőmérő, stb. funkciók messze alatta vannak a hw lehetőségeinek, és az is simán lehet hogy valamelyiknél hibás mondjuk a D8-as láb, csak azt sose használtam.
Javaslom hogy olcsóban ne eredetinek mondott hamisítványt (counterfeit) vegyél, hanem olyat ahol "be is vallják" hogy ez klón és CH340/PLabcd/ATxxx stb az usbserial rajta. (Nem, nem fognak ft232-t rátenni akármit is mondanak.) Ha 1-2 darab kellene akkor tavir.hu is jó lehet, ott is klónok vannak de azok már - gondolom - beváltak, teszteltek, garancia, stb.
Vegyél innen a Hestore- ból. Itt biztos, hogy nem küldenek hamisítványt. Én is innen vettem az enyémet, igaz kicsit drágább , mint az eBay.
Csak a soros illesztő más. Ugyan olyan Atmel mcu van rajta.
|
Bejelentkezés
Hirdetés |