Csak műszaki tekintetben is elég jelentős kihívás. Tegyük most félre, hogy egy szál billentyűnek hány féle paramétert kell rögzítenie a sima "le van nyomva a billentyű" állapoton túl. A következő menet az, hogy ebből alapból ugye 88 darab van, ami oktávonként 13-mal csökken. A legtöbb midi billentyűzet 4 oktávos, ami 52 gombot jelent. Plusz egy analóg bemenet (ha csak egy potmétered van). Ez testvérek között is 53 bemenet, plusz a ki/bemenet a midihez (2 port). Ezt önállóan csak a nagyobb cuccok tudják (Mega, Due stb.).
Ez a hardveres rész. A szoftveres részben az a nehézség, hogy az összes szükséges bemenet állapotát egyszerre kell figyelni, és mivel 54 van belőlük, ez egy felettébb időigényes művelet, amit tovább lassít a midi feldolgozás és illesztés (elég időérzékeny a midi, bár azt most nem vágom, hogy egy nagyságrenden belül vagyunk-e vagy van az Arduinóban tartalék, az a tippem, hogy ha van is, csak minimális).
Arra gondolok, hogy egy régi analóg orgona billentyűzetét-gombjait-potmétereit olvassa az Arduinó és MIDI vezérlő jelekké alakítja amik egy PC-n futó virtuális orgona szoftvert szólaltatnak meg.
Ha ipari (pénzkereső) alkalmazásra kell, akkor ipari (pénzért megvehető, professzionális) eszközöket kell alkalmazni.
Az Arduino alapvetően fejlesztőkörnyezet, bár az eredménye átültethető az ipari gyakorlatba (ehhez azonban nagyon kevés egy működő prototípus és pár próbapanel).
Valószínűnek tartom, hogy az a kábel, amivel a 600 métert át kellene hidalni, magában annyiba fájna, mint egy komplett, kész, működő rádiós rendszer.
1/ Az Arduino használható-e ipari környezetben? Ha igen, milyen védelemmel kell ellátni?
A környezetben erős az elektroszmog.
2/ Egy tucat kontaktus állapotát kell figyelni egy Arduinoval és ezeket egy másik Arduino kimenetein kell megjeleníteni. A távolság 600 m. Használható-e az RS 485 kommunikáció?
Eljutottam odáig, hogy kommunikál már az arduinoval és az arduinon fut egy TCP/IP szerver amire telnettel tudok bejelentkezni. A probléma, hogy ahogyan nézem nem tudom vizsgálni a bevitt paramétereket ugyanis a serial kimeneten értelmetlen kérdőjelek sora jelenik meg mintha karakter kódolás probléma lenne. De rendben feladom most szereztem egy USB TTL konvertert amivel elvileg már tudom magát az ESP - t programozni. Viszont itt adódik a kérdés, hogy hogyan tudok még egy GPIO - ot hozzá rakni mert RGB ledszalagot szeretnék vele irányítani. Néztem Youtube - on, hogyan vezetik ki az IC lábait de sajnos nekem ahhoz nincs kézügyességem, hogy olyan pici lábra rátudjak forrasztani :( Esetleg van rá más módszer?
Köszi a segítséget, így már bejjebb vagyok kicsivel. Még nem tudom melyik megoldás lesz nekem az igazi, a rendszer ötlete van még csak meg, meg pár alkatrész. Ha lesz valami akkor szólók még! :-)
Nem tudtam, hogy vannak 12c library-k külön, azt hittem, hogy az a vásárolt ezközökben benne van, nem kell külön hozzá.
Ha +-25V-os jelet akarsz mérni, akkor két egyszerűbb lehetőséged van: vagy aktív vagy passzív eszközt kell illeszteni hozzá. A passzív az egy ellenállásosztó ahogy írtad, az aktív az egy erősítő fokozat ahol az erősítési fokozat erősítése egynél kisebb, azaz pl 0.2, egy műveleti erősítővel egyszerűen megvalósítható. Ez utóbbinál pl megoldható az is, hogy logaritmikus karakterisztikájú erősítést használsz, aminek következtében a kisebb jeleket jobban a nagyobbakat meg kevésbé erősíti/csökkenti. persze ezt később szoftverből korrigálni kell. Kérdés mekkora felbontás és pontosság kell. de ha jó a lineáris alapból, akkor ezzel se kell molyolni.
A feszosztó egyszerűbb, de figyelembe kell venni a terhelési viszonyokat - azaz amire rácsatlakozol mint bemenet, annak milyen a kimeneti impedanciája, ehhez illik illeszteni. Ez nem mindig tud megvalósulni passzív illesztéssel (ne terheljen be túlzottan a feszosztó a másik kimenetére, mert ez komoly galibát tud okozna, akár frekvenciafüggő viselkedést is).
Ha a 25V-nál nagyobb jeleket vágni szeretnék, akkora legegyszerűbb egy zener diódás határoló/limiter, Aztán persze van ennél komolyabb megoldás is, de kérdés mi a cél.
Még nem foglaloztam ezzel, de szeretnék! Gondom van az adatok gyors mentésével, valamint nem értem pontosan hogyan lehet megoldani azt, hogy ha pl 5V-nál nagyobb feszültséget szeretnék mérni vele, akkor azt hogyan lehet? Feszosztóval? Akkor meg az lesz a gond, hogy ha túl kicsi a bemenet, akkor azt túl kicsire osztja. Hogyan lehet megoldani, hogy nagy feszültség tartományban legyen jó ez az ezköz. Tudnál ebben segíteni nekem?
Kb. -25V-->+25V tartományban kellene mérnem, azonban olyan is lehet, hogy ABS|25V|-nál nagyobb jelek is lehetnek, de azok nem mérési körülmények között érnék az AD konvertert, gondolom oda valami védelem kellene, de nem tudom az milyen, hogyan lehet csinálni. Ötlet?
Én is inkább azt ajánlanám, hogy az esp-t programozd. Ugyanúgy tudod arduinoban. Ha kevés a port, akkor könnyen tudod bővíteni, de ki lehet vezetni az ic lábait is a 02-ről. De vegyél egy másik modult, amiben minden ki van vezetve, és megspórolod az uno-t, a 02 neg jó lesz másra. Legalábbis én nem vacakolnék illesztésekkel, meg tx/rx-el, ha nem muszáj...
Mi a helyzet a 3.3V-al? Mert a wifi modul arról megy, és az rx-tx-hez is azt illik használni. Egyébként a legegyszerűbb ha veszel hozzá egy "tokot", ami megoldja a feszültség átalakítást kiválóan. Egyébként én már próbálkoztam vele, nekem pl. az volt a gond, hogy az arduino nem bírta ellátni árammal, és ez elég sok hibát okozott. Így én végül direkt esp8266-ot programozom inkább. Arduinon keresztül csak AT parancsokat tudsz használni, azokat direktbe is küldheted neki és akkor nem kell a lib-ekkel vacakolni.
sevseg.refreshDisplay(); // Must run repeatedly; don't use blocking code (ex: delay()) in the loop() function or this won't work right
(Már ha a te kódodban a output() ezt jelntette. Remélem igem!)
Az lehet a gond, hogy a Te példaprogramjaidban használt sevseg.h nem egyezik meg amit letöltöttél. Nem gond, csak ki kell cserélni pár dolgot. Szerintem csak verzió probléma, semmi több.
A fordító csinálhat olyat, hogy elsőnek a függvényeket nézni, majd utána aloop-ot, ezért lehet nem azzal kezdte elsőnek.
Ha megy ezzel, akkor javaslom, hogy ha csinálsz egy biztonsági mentést majd a kódodról, akkor a sevseg library-d is tedd ,ellé, hogy később is menjen.
A setNumber bejött, most viszont a void smartDelay-ben levő PrintOutput-ra írja hogy has no member in sevseg. Az ino-ban pirossal van írva a hibaüzenet tárgya.
Ami azért érdekes,mert a void loop-ban is van egy sevseg.PrintOutput és azon átsiklott.
Te érted ezt? Csatolom az eddigiek figyelembe vételével átírt ino-t:
#include "SevSeg.h" #include "TinyGPS++.h"
//Instance aanmaken voor GPS en Display SevSeg sevseg; TinyGPSPlus gps;
void smartDelay(unsigned long ms) { unsigned long start = millis(); do { while (Serial.available()) gps.encode(Serial.read()); sevseg.PrintOutput(); } while (millis() - start < ms); }
void printFloat(float val, bool valid, int len, int prec) { if (!valid) { while (len-- > 1) displayNumber(0000); Serial.print('*'); Serial.print(' '); } else { Serial.print(val, prec); int vi = abs((int)val); int flen = prec + (val < 0.0 ? 2 : 1); // . and - //flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1; flen += vi >= 10 ? 2 : 1; for (int i=flen; i<len; ++i) Serial.print(' '); displayNumber(val); } smartDelay(0); }
//Turn on a digit for a short amount of time switch(digit) { case 1: digitalWrite(digit1, DIGIT_ON); break; case 2: digitalWrite(digit2, DIGIT_ON); break; // case 3: // digitalWrite(digit3, DIGIT_ON); // break; // case 4: // digitalWrite(digit4, DIGIT_ON); // break; }
//Turn on the right segments for this digit lightNumber(toDisplay % 10); toDisplay /= 10;
delayMicroseconds(DISPLAY_BRIGHTNESS); //Display this digit for a fraction of a second (between 1us and 5000us, 500 is pretty good)
//Turn off all segments lightNumber(10); // // //Turn off all digits digitalWrite(digit1, DIGIT_OFF); digitalWrite(digit2, DIGIT_OFF); // digitalWrite(digit3, DIGIT_OFF); // digitalWrite(digit4, DIGIT_OFF); }
while( (millis() - beginTime) < 10) ; //Wait for 20ms to pass before we paint the display again }
//Given a number, turns on those segments //If number == 10, then turn off number void lightNumber(int numberToDisplay) {
Tudnál egy linket küldeni, amiben az a SevSeg.h-van, amit használsz?
Off:
Ami még lehet gond, hogy a változó neve megegyezik a seveg-el. (Lehet nem akkora gond, de más nyelveken azért okozhat problémát) A változód neve megegyezik a típussal, objektom nevével. Szerintem nem annyira jó ez, de lehet tévedek. Ha így van akkor bocsánat!
Szeretnék érdeklődni, hogy valaki használ e közületek ESP8266 wifi modult Arduino Uno - val? Keresek hozzá ugyanis egy megfelelő könyvtárat, hogy az Arduino egy mint webszerver (vagy telnet szerver) működjön a wifi modul pedig csak a kapcsolatért feleljen. Találtam jó pár példát de akárhogy kötögetem TX,RX kimeneteket nem tudok kommunikálni vele. Már elértem azt, hogy csatlakozni tudjon a hálózatomhoz de tovább semmilyen választ nem ad nekem.
Sok példa van, hogy közvetlen a modulra írják meg a webszervert és arduino nélkül használják de sajnos az én feladatomhoz túl kevés a GPIO - oja (3db viszont az ESP8266-02 amit végül szeretnék használni annak még kevesebb van)
Tablet,mobil nem játszik a mérete miatt. Nem akarom teljesen felrobbantani a műszerfalat, csak a km/órát cserélném le. Továbbá az említett készülékek fényereje nappali fényben nem igazán kielégítő. A forrás első változatának alapjait értem nagyjából. A probéma csak annyi,hogy a szerzője szerint sem műxik. A javított változat a SevSeg bevezetésével jóval egyszerűbbé teszi az ino megírását, viszont bonyolítja is a helyzetet az egyszerű földi halandó számára. Ugyanis "láthatatlan" dolgokra támaszkodik, amik a SevSeg-ben vannak "eldugva".( pl NewNum, printOut ).
Szóval a gondom még mindíg az, mi lehet az adott ino-ban a gond, amiért nem ismeri fel a NewNum-ot az ellenőrzés a SevSeg-ben?
Magamról anyit: az Arduinoval valóban most kezdek foglalkozni, amúgy 20-25 éve foglalkozom elektronikával. Építettem már erősítót, órát, karácsonyfa villogót stb. Nem kit-ből, a nyákot is magam tervezem,maratom, beültetem.Az Arduinoban az tetszett meg,hogy szinte bármire lehet használni. Ezért gondoltam, jó lesz sebességmérőnek is. A neten talált alkalmazás nem tűnik bonyolultnak, három egységből áll (Arduino+GPSmodul+LEDkijelző). Szerintem nem nagy kunszt. A fogyasztás nem érdekes, a robogó akkuja bírja(robbanó motoros, nem elektromos). A pontosság, ha tíz százalékon belül van akkor megfelelő,hisz az autóm gyári kmórája is csal annyit. A kerékpárok sebességmérője valóban alternatíva lehetne,csakhogy azok LCD kijelzősek én meg ragaszkodom a LED-hez. Amúgy már kész a kapcsolás,összeszereltem az eszközt, már csak az agya hiányzik.
Tehát a kérdésem még az eredeti: mi lehet a probléma a NewNummal az általam átírt ino-ban?