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   171 / 863
(#) andykaaa válasza andykaaa hozzászólására (») Dec 6, 2015 /
 
Ha mar tobb progirol van szo akkor en egy int menu valtozoval a kovetkezot hasznalnam:
  1. void loop() {
  2.   // ide jonne a nyomogomb figyeles es a menu++, vagy a menu--
  3.       if (menu == 0)    {   }
  4.  else if (menu == 1)    {   }
  5.  else if (menu == 2)    {   }
  6.  else if (menu == 3)    {   }
  7.  else if (menu == 4)    {   }
  8.  else if (menu == 5)    {   }
  9. }

Igy mindig csak a menu ertekenek a megfelelo progi futna le
A hozzászólás módosítva: Dec 6, 2015
(#) erdeidominik1999 válasza andykaaa hozzászólására (») Dec 6, 2015 /
 
De így a problémámra még nincs megoldás, hogy lépkedjek sorba.
(#) Kovidivi válasza csatti2 hozzászólására (») Dec 6, 2015 /
 
Szia!
Erről írnál egy kicsit bővebben? Nézegetem már egy ideje, de nem esik le, miért a megfelelő task fog lefutni. Látom, hogy pointerekről van szó. Köszi.
(#) andykaaa válasza erdeidominik1999 hozzászólására (») Dec 6, 2015 /
 
Hat a megfelelo menu ertek lepteteset kihagytam, az a masodik sorba jonne. Nyomogombbal leptetni a menu erteket: menu++, menu--, vagy ugorjon a masik vegere ha a maximum erteken van, vagy a minimumon.
Peldaul, ha menu == 5, akkor a menu++ helyett menu = 0. Ha menu ==0, akkor menu-- helyett menu = 5.
Lehet hasznalni millis prell mentesitot es aktualis es elozo nyomogomb statuszt, vagy button, debounce library-t. En a „Bounce2.h” hasznaltam es jo eredmennyel.
Ami az altalam javasolt megoldast illeti en menu sistemnek hasznalom, nalam bevalt. Mindig a menu ertekenek megfelelo progi reszlet fut le.
A hozzászólás módosítva: Dec 6, 2015

Bounce2.zip
    
(#) erdeidominik1999 válasza andykaaa hozzászólására (») Dec 6, 2015 /
 
Értem mit mondasz, csak nem egyről beszélünk... A gombok meg stb azt meg tudom csinálni, csak az a gondom, hogy pl a 4 soros kijelzőnél (mondjuk ezt most glcd-re csinálom, ahol 8 sor van) hogyan csináljam meg, hogy soronként lépkedjek, és visszafele is tudjak menni. Valami ilyesmit szeretnék: Bővebben: Link, ezt még meg is tudom csinálni, csak nálam több elem lenne, és belene a kijelző, illetve még lefele is görgetné. Viszont amikor görgetek, akkor ugye fent eltűnik egy elem. Ha pedig az aljáról felfelé, akkor meg az a gondom, hogy nem a kurzor indul el felfelé előszőr, hanem rögtön feljebb ugrik a lista... Ezt szeretném megoldani...
(#) andykaaa válasza erdeidominik1999 hozzászólására (») Dec 6, 2015 /
 
Hááát az én hozzászolasom nem erröl szolt, hanem Bővebben: Link
A hozzászólás módosítva: Dec 6, 2015
(#) csatti2 válasza Kovidivi hozzászólására (») Dec 6, 2015 / 1
 
Azt használom ki, hogy lehetséges a függvényekre is pointerekkel mutatni. A deklarációjuk kicsit furcsa első ránézésre, de nem bonyolult. Nagyon praktikusak lehetnek olyankor, amikor készítesz egy általánosabb többször felhasználható kódot, ami nincs "tudomással" a később írt már adott feladatra készített megoldással. Pl. PID szabályzó osztály, ami egy pointerrel hívja meg mintavételezéskor a később megírt függvényeket, ami írja a tényleges kimenetet és olvassa a tényleges bemeneteket. Esetleg egy serial protokoll fordító, ami kezeli az általad készített protokoll minden ügyes-bajos dolgát és amikor kész egy csomag feldolgozása egy pointeren keresztül hívja meg a később megírt függvényt és átadja neki a feldogozott adatokat.

pl.:

.h

  1. template<typename T>
  2. class PIDControllerTempl
  3. {
  4. public:
  5.         ...
  6. private:       
  7.         ...
  8.         void(*_writeOutput)(PIDControllerTempl * controller, T correctingValue, bool enabled);
  9.         static void __defaultPIDOutput(PIDControllerTempl * controller, T correctingValue, bool enabled);
  10.         ...
  11. public:
  12.         ...
  13. void setControllerOutputFunction(void(*writeOutput)(PIDControllerTempl * controller, T correctingValue, bool enabled));
  14.         ...
  15. };
  16.  
  17. typedef PIDControllerTempl<double> PIDController;


.cpp

  1. template<typename T>
  2. void PIDControllerTempl<T>::setControllerOutputFunction(void(*writeOutput)(PIDControllerTempl * controller, T correctingValue, bool enabled))
  3. {
  4.         _writeOutput = writeOutput;
  5. }
  6.  
  7. template<typename T>
  8. void PIDControllerTempl<T>::loop()
  9. {
  10.         unsigned long now = millis();
  11.         if (now > _lastCycle + _sampleTime)
  12.         {
  13.                 if (_enabled && _auto) _calculate();
  14.                 _lastCycle += _sampleTime;
  15.                 _writeOutput(this, _CV, _enabled);                             
  16.         }
  17. }
  18.  
  19. template class PIDControllerTempl<float>;
  20. template class PIDControllerTempl<double>;


Későbbi kód:
  1. void Motor_Y_CtrlOutput(PIDController * controller, double correctingValue, bool enabled)
  2. {
  3.         if (enabled) Fan_Y_SetSpeed(PIDController::convertFromNormalized(correctingValue,0,100));
  4.         else
  5.                 Fan_Y_SetSpeed(0);
  6. }
  7.  
  8. setup rész:
  9. Motor_Y_TempPID.setControllerOutputFunction(Motor_Y_CtrlOutput);
A hozzászólás módosítva: Dec 6, 2015
(#) siletto válasza csatti2 hozzászólására (») Dec 6, 2015 /
 
Eddig azt hittem értek az arduinohoz
(#) Kovidivi válasza siletto hozzászólására (») Dec 6, 2015 /
 
Ez nem Arduino, ez csak "C". Köszi Csatti2! Adj egy pár hetet, mire feldolgozom!
(#) csatti2 válasza Kovidivi hozzászólására (») Dec 7, 2015 /
 
Nem C, hanem C++. Az arduino is C++-n alapszik.
(#) erdeidominik1999 hozzászólása Dec 7, 2015 /
 
Sziasztok! Ha nem kell nagy sebesség (9600 baud), akkor 10-12 méter Serial kommunikációt tudok csinálni 2 arduinó között? Előre is köszi!
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Oda már inkább valami robusztusabb fizikai átvitel kellene.
Legalább áramhurokszerű. Pl.: optocsatolókkal a TX RX oldalon.
A leden áramnak kell átfolyni, így a hosszú drótra ráülő zajok kevésbé fognak zavart okozni.
Esetleg sodrott érpár se árt.Csupaszon a uC portot nem illik sok méter vezeték után kötni.
Mindenképpen valami jobb fizikai réteget kell kiépíteni.
Vagy RF adóvevőkkel.Persze az is kérdés hogy oda/vissza kell vagy csak egyirányú?
A hozzászólás módosítva: Dec 7, 2015
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
RS-485 modulokat pont erre találták ki.
Akár több száz métert is áttudnak hidalni viszonylag gyors soros kommunikációval.
Persze sodrott érpár (utp) nem hátrány.Elég a vezeték vagy anélkül kellene?
Egy / két irányú ?
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Valahogy így lehetne legegyszerűbben 2 optocsatolóval és 4 ellenállással megoldani.
Ebben még az is jó lehet , hogy galvanikusan is függetlenek lehetnek az eszközök.
A testpontokat se kösd össze, 4 vezetéket használjál.
Persze az optocsatolók impulzus átviteli sebessége korlátozni fog , plusz a hosszú vezeték kapacitásai, de mivel viszonylag "nagy áramot" hajtunk át a leden akkor azok se zavarhatnak annyira.9600 -t biztos tudni fogja így esetleg lejjebb mész 4800 vagy teszteld le meddig bírja a rendszer hosszban sebességben.
(#) erdeidominik1999 válasza Kera_Will hozzászólására (») Dec 7, 2015 /
 
Szia! utp van behúzva, és kábelen tökéletes, csak annyi a lényeg, hogy 2 ér+ a közös gnd, és 2 irányba kellene. Igazándiból i2c-vel akartam megcsinálni, azt kipróbáltam 12m utp-n, és ment, csak az a gondom, hogy ha a slave i2c eszköz nem kap áramot, akkor a master nem hajtja meg az i2c-s lcdt. Vagy ha erre van valami ötleted az még jobb lenne.
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Energia nélkül nehéz bármit is működésre bírni .
Soros adatvonalak nem energiaátviteli csatornák.
A hosszú UTP végén már jelentős feszültség esés is felléphet terheléstől függően.
Ezt is bele kellene kalkulálni . Ha táv táplálod akkor lehet inkább nagyobb feszültséggel indítani és a túloldalon stabilizálni.
Akkor esetleg a galvanikus leválasztást elhagyva.
Felszabadul 1 ér.Közös lesz a föld.A felszabadult éren pedig lehet vinni az energiát.
A hozzászólás módosítva: Dec 7, 2015
(#) erdeidominik1999 válasza Kera_Will hozzászólására (») Dec 7, 2015 /
 
Nem, helyben táplálom mind a két oldalt, tökéletesen megy, viszont nekem az kéne, hogy ha a slave állomás kiesik valamiért, akkor a master menjen tovább teljes működéssel. Viszont ha i2c-t használok, és a slave eszköz be van dugva az scl, illetve sda portokba, de nincs áram alatt, akkor a komplett i2c busz nem megy, tehát a master nem ír ki semmit az i2c-s kijelzőre sem. Ezt kéne kiküszöbölni.
A hozzászólás módosítva: Dec 7, 2015
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Akkor próbáld meg optocsatolókkal mozgatni az SCL SDA vonalakat.
A nem vezérelt tranzisztor közel szakadást képvisel.
Vagy nem IIC buszt használni.Igaz akkor szoftveres serial portot kell használni.
Elárulom annó az IIC nem kilométerre lett kitalálva, hanem csak IC to IC beszélgetésre az 1 2 tenyérnyi NYÁKokokn 5-10-20 cm vezetékezéssel.Persze az egy másik dolog , hogy elég robusztusnak tűnik és több 10 méterre is elvihetted.Ezt inkább csak a "mázli factornak" köszönhetjük.No meg megint vissza térve a lényegre : uC portjait nem lógatjuk sokszor 10 méteres drótokon keresztül a külvilágban.
Bocs, látszik , hogy csak otthoni/asztali programozgató vagy.Ez nem baj!Nagyon hasznos dolog!DE a való világban sokkal több mindenre fel kell készíteni a technológiát!
Így a kivitelezés, tervezés során használni kell az iparban már bevált eszköz rendszert.
Kevesebb meglepetés érhet a hosszú távú üzemeltetés során, ha erre is oda figyelsz.
A hozzászólás módosítva: Dec 7, 2015
(#) erdeidominik1999 válasza Kera_Will hozzászólására (») Dec 7, 2015 /
 
Igazándiból én az i2c-vel jobban ki lennék békülve, akkor veszek optócsatolót, és kipróbálom. Viszont légyszi akkor még azt is áruld el, hogy milyet vegyek, mert ebben a részében nem vagyok otthon. Ja és még annyi, hogy az i2c-nél limitálva van a karakterszám?
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Optok típusai ott vannak a rajzomon. 4N25 vagy hasonlóak
Hhmm IIC ?!?! Muszály?!
LCD-d mellé nem tudsz / akarsz másik uC tenni ?!
Bocsi most a rendszer tervedet nem látom át .
Nem 2 eszköz van a láncodban ?
IIC az emlékeim szerint alapból több 10-100 KHz sebességgel dolgozik.
Fussunk neki még egyszer, legalább tömbvázlat szinten uC-k ,érzékelők, kijelzők és köztük lévő kapcsolatokat rajzold le.
(#) erdeidominik1999 válasza Kera_Will hozzászólására (») Dec 7, 2015 /
 
Rendi, szóval van egy arduinó due (ő a mindenes master), i2c-n van egy glcd, egy rtc, és egy másik arduinó (nano), ő egy slave, aki 10 méterre lenne a másiktól. Illetve valószínű lesz még egy i2c-s ic is, ami ledeket fog hajtani. Most jelenlegi konfigurációval működik minden, csak annyi a gond, hogy ha a slave ardunak nem adok áramot, de nem húzom ki az i2c lábait, akkor a due nem jelenit meg semmit az lcd-n. (az rtc-t nem is néztem )
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Részben még így se kerek a dolog légyszíves rajzoljál ! Ki kivel és hol van és még hova mit tervezel be ... stb ..

Akkor neked a galvanikusan leválasztott optos megoldás lenne a legjobb.
I2C elfelejtve más soros kommunikációt csinálni a nanó és a due közt.
pl.: ha van még program tárhely az eszközökben akkor ezt a könyvtárat ajánlom:
virtualwire
Igaz ezt drótnélkülire tervezték, de nincs akadálya annak se , hogy duplex üzemben dróton
optókon keresztül beszélgessenek egymással így összekötve:

For testing purposes you can connect 2 VirtualWire instances directly, by connecting pin 12 of one to 11 of the other and vice versa, like this for a duplex connection:

Arduino 1 wires Arduino 1
D11-----------------------------D12
D12-----------------------------D11
GND-----------------------------GND

Vagy más egyébb serial com könyvtárat keresni az arduino könyvtárai közt amik nem a HW soros portokat használják.Mert azok az USB porton vannak alapból .
Részben még így se kerek a dolog légyszíves rajzoljál ! Ki kivel és hol van és még hova mit tervezel be ... stb ..
A hozzászólás módosítva: Dec 7, 2015
(#) erdeidominik1999 válasza Kera_Will hozzászólására (») Dec 7, 2015 /
 
Van 2 db nrf24l01-es sma-s adó-vevő modulom, csak még soha nem használtam, és azt sem tudom, hogy milyen távolságot visz át.
(#) Kera_Will válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Van Drótod maradjunk azon !
Nekem meg időm nincs ... folyt köv ... !
A hozzászólás módosítva: Dec 7, 2015
(#) erdeidominik1999 válasza Kera_Will hozzászólására (») Dec 7, 2015 /
 
Jó, abban én is jobban bízok, leszedtem a libet innen, mindjárt kipróblom!
(#) erdeidominik1999 válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Igen csak ez a lib nem fordul le due-ra.
(#) erdeidominik1999 válasza (Felhasználó 15355) hozzászólására (») Dec 7, 2015 /
 
Amúgy a legjobb nem rs485 lenne? És azt meg tudom csinálni valami ic-vel?
(#) erdeidominik1999 válasza (Felhasználó 15355) hozzászólására (») Dec 7, 2015 /
 
És az miért baj?
(#) erdeidominik1999 válasza (Felhasználó 15355) hozzászólására (») Dec 7, 2015 /
 
Csak azt milyen libbel tudom meghajtani?
(#) GPeti1977 válasza erdeidominik1999 hozzászólására (») Dec 7, 2015 /
 
Az I2C nem fog működni optocsatolóról mert kétirányú az adatátvitel az SDA vezetéken, azért nem megy az I2C ha a slave nem kap áramot mert a port és a Vdd között parazita dióda az SDA és SCL lábat nem engedi felvinni H szintre, a felhúzó ellenállás nem fogja táplálni az egész áramkört.
Következő: »»   171 / 863
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