- CMF Phone 2 Pro - a százezer forintos kérdés
- Samsung Galaxy A54 - türelemjáték
- Hónap végén érkezik a Xiaomi Band 10, ára is van
- Milyen okostelefont vegyek?
- Yettel topik
- Redmi Note 11 és 11S - biztos alapra jobb építeni
- Macrodroid
- Garmin Instinct – küldetés teljesítve
- Redmi Watch 5 - formás, de egyszerű
- Amazfit Active 2 NFC - jó kör
-
Mobilarena
Arduino hardverrel és szoftverrel foglakozó téma. Minden mikrovezérlő ami arduinoval programozható, és minden arduino program, board, és hardverrel kapcsolatos kérdések helye.
Új hozzászólás Aktív témák
-
Teasüti
nagyúr
SerialEvent() is volt már, technikailag lényegtelen, h loop()-ban olvasod be, vagy a loop után. Nálam az a kód volt a SerialEvent()-ben, ami ki van kommentelve az érkező adat olvasásának meghívása fölött a loop elején.
328p, igen.
Arduinoban nem C-ben programozunk? Vagy vmi elfajzott C++? -
Teasüti
nagyúr
válasz
Janos250 #3439 üzenetére
Az effektezésnél tudatosan vannak kihagyva, így paramétertől függően végigmehet mindegyiken.
Ez az objektum/class nekem új. Vmi szájbarágós tutorial esetleg nincs kéznél?
Pedig az elképzelés éppen az volt, hogy sorszámozom a globális váltózókat.
De akkor létezik elegáns megoldás is.A saját megszakítás kezelőre van vmi ötlet? Merre induljak egyáltalán?
Próbáltam kilőni a programból az összes megszakítással babráló részt, mint a kikapcsolás a led frissítésénél és a gyroszenzor jelzésénél új adatról.
Szóval elméletileg nem kéne közbevágnia semminek a soros kommunikációnál, de így is eldobálja a karaktereket.
Úgy amúgy mi történik, ha megszakítás közben bejön még egy megszakítás?Az Adafruit és Fastled library-t nem véletlenül nem használom, túl erőforrás igényesek és televannak demóval.
FABled-nél meg te magad kezeled a puffert direkt módon és mentes minden felesleges extrától, így jóval kisebb méretre fordul le. -
Teasüti
nagyúr
Azt hittem inkább csak megmosolyognak majd a profik.
Pedig az elképzelésim kis része valósult még csak meg.Saját megszakítás kezelő? Olyat is lehet?
Mondjuk megnézném mire mennék a megszakítások prioritási sorrendjének átrendezésével. Mondjuk feljebb rakni az adatkapcsolatot a sorban, esetleg a legtetejére a hardveres megszakítók után. -
Teasüti
nagyúr
Win10 laptop, IDE 1.6.8 -> Arduino Uno (eredeti). Hozzá a gyári usb kábele ~1,5m VAGY HC-05 BT adapter a hardveres UART-n és egy random kínai usb BT a laptopon. A helyzet mindkettő felállásban ugyanaz.
Serial monitorból szeretnék küldeni pár vezérlőbájtot az Uno-ra, mint pl. "R255G255B255" ahol a sort a "/n" zárja. A soros kimenet vagyis a Serial.print() hibátlanul működik, sose szemetel a kimenetre.
A bemenet viszont kvázi teljesen használhatatlan. Úgy két karakterig üzembiztos kb, e felett elhagyja az üzenet további részét. A new line karakter viszont úgy látszik mindig megérkezik, különben nem volna feldolgozás a programban, hisz ez a delimiter.Ötletem már nincs, átrágtam magam szinte mindenen, amit a Google kidob az "Arduino serial lost characters" szavakra, kipróbáltam már többféle megoldást is a Serial.read()-re, mások által közzétett kódokat egy az egyben emeltem át a programba. Alapvető megközelítés, hogy a pufferben elérhető bájtokat polling-gal rakom be egy tömbbe amíg megérkezik a delimiter. Ha ez megjött, akkor a tömböt pofozom formára ilyen-olyan módon : atoi() segítségével főként.
Letölthető fájl a munkámról.
A loop elején szerepel a meghívás és a loop alatt vannak a releváns függvények.Előre is köszönöm!
-
Teasüti
nagyúr
Na bakker, egy az egyben átemeltem az itt látható pufferelt bemenetet és ugyanúgy elhagyja a karaktereket, mint eddig minden megoldás.
De iszonyú nagy hibaszázalékkal, talán 5-ből csak 1 üzenet érkezik meg 100%-osan.
USB, BT tökmindegy (hardveres UART - Uno).
Általában az első kettő megjön, aztán vége szakad.
Pl. elküldöm a C255-öt és megérkezik a C2. Vagy R255G255B255 és megérkezik az R2. -
Teasüti
nagyúr
Uhm, van arra vkinek vmi ötlete, hogy az alábbi képlet miért ad nekem negatív számot eredményül?
int16_t = 250 * uint8_t / 255 + 2;
Ahol a bájtot 255-ről indítva végigpörgetem nulláig egy vmekkora léptetéssel és a kimeneten azt látom, hogy 252 helyett -5-ről indul a számláló és elszámol -124-ig, ami után átugrik a pozitív oldalra és 130-tól számol lefelé (ahogy a teljes tartományban kéne neki).Azt várnám, hogy 252-től számol lefelé 2-ig. Hogy a p.cs.ba lesz ebből negatív? És miért esik át a pozitív tartományra félúton?
-
Teasüti
nagyúr
Nyitáskapcsolóhoz miért kell a CHANGE?
Miért nem egyszerűbb egy eseményt figyelni kettő helyett?
Az ilyen state = !state féle váltók amúgy se túl praktikusak ilyen exakt dolgokra, ahol azt kell figyelni, h mikor történik meg egy esemény. Ez szvsz inkább ott használatos, ahol az on/off állapotoknak semmi jelentőségük (akarom mondani felcserélhetők), mint egy LED villogtatása. De azért egy biztonsági kapcsolót nem így kezelnék.Nem macerás egyáltalán, ha megnézed a linken - amit a prell-nél raktam ide - mi történik a jelszinttel kapcsolás közben, akkor láthatod, hogy itt nem egy és nem is kettő megszakítás történik, de minden tüske felfutásánál és lecsengésénél lesz egy CHANGE állapotváltozás. Ezt írták feljebb, hogy ha épp páros számú megszakítás érkezik, akkor ebből te nem veszel észre semmit, mintha mi sem történt volna.
-
Teasüti
nagyúr
válasz
gyapo11 #3386 üzenetére
Gombnyomásra én ezt alkottam:
//button press
if (digitalRead(8) == HIGH && !button) {
button = true;
Serial.println("Pressed");
}
else if (digitalRead(8) == LOW) button = false;Loop-ban fut természetesen és fogalmam sem volt eddig ilyen pergés effektről.
Sosem aktivál egynél többször; ezért merem ajánlani a kollégának.
Felengedésre ír vmit az else if-be és voilá!
Nem volt róla szó milyen gombról van szó.
Talán akkor a pergésmentesítéssel jobban jár, ami a linket van.Vagy lehet olyat, hogy egy lábra két megszakítást kapcsolok?
LOW és RISING? -
Teasüti
nagyúr
-
Teasüti
nagyúr
válasz
Janos250 #3375 üzenetére
Érthető, hisz utóbbi úgy indul, h képezd ki magad cnc-ből és forgácsolásból. Majd vegyél cnc gépet.
Persze átvitt értelemben, de akár szó szerint is.
Ha meg szakembert bízok meg vele és gépet bérlek, akkor meg nem DIY.(#3363) gyapo11
Nem hiszem el, h ezt az arduino közösség még nem oldotta meg.
Elég alapvető igénynek tűnik, h parancsot lehessen küldeni az MCU-nak. -
Teasüti
nagyúr
válasz
gyapo11 #3354 üzenetére
Ez egy remekül összeszedett eszmefuttatás!
Amúgy mi az oka annak, h elvesznek bájtok a soros porton?
Én is küzdök ezzel a problémával és most már csak széttárom a karjaim.
De csak serial monitorból érkező adatok vesznek el, a küldött az hibátlan és a program feltöltés se hibázik. -
Teasüti
nagyúr
válasz
gyapo11 #3336 üzenetére
Villogni kezd?
Az animáció?
Ezért lehet érdemes grafikus futószalag elvén megírni, ahol minden egyes loop() ciklus egy képkockát generál.
A parancsokat megszakítással veszi és polling-gal rakja össze a pufferből. Annyi, hogy amíg a LED frissítése zajlik, arra a rövid időre kikapcsolom a megszakítást. (BAAAAZDMEG lehet ezért veszik el egy-egy vezérlőbájtom a BT átvitel során??Há Móóónika! Megyek dolgom van!
)
Így nálam bármilyen fps mellett működőképes marad minden egyéb funkció.
És persze a LED-ek sem villognak, hisz a PWM vezérlő sample&hold elven működik, legfeljebb az animáció akadozik, ha nagyon beesik az fps, de itt csak 120 ledről (meg pár paletta, ami mi is pontosan?) beszélünk és az animáció erőforrásigénye se óriási. Egy 8 bites Atmel328p vígan elviszi a tapasztalataim alapján több száz fps-el.(#3334) printpro
Azt hiszem tudok segíteni neked, viszont határozatlan időre tudnám csak vállalni a feladatot. Hetekig tartana ráérő szabadidőmben. Nem számolva a posta idejével, amíg megérkeznek a kellékek hozzá ebay-ről. -
Teasüti
nagyúr
válasz
printpro #3320 üzenetére
Mondjuk egy telefon vagy tablet?
Távirányító nekem azért nem szimpi, mert nem tudsz paramétert átadni, csak vezérlő gombok vannak.
Igaz lehet csökkenteni meg növelni is a paramétereket a gombokkal...
De azért ebbe belegondolva szerintem annál bonyolultabb lenne a program, minél kevesebb gombot szeretnél használni és azokhoz menüt készíteni, vagy vmi state machine-t.
És itt azért nem egy szalagról van csak szó. Rögtön kettő meg még egyéb extrák is.
Ehhez elég okosan kéne megírni a távírányítást, vagy sok gomb kell. -
Teasüti
nagyúr
válasz
printpro #3318 üzenetére
Infra feltétlen muszáj?
Bluetooth esetleg?
Amúgy rövid keresgélés után én nem látom indokoltnak a plusz hardvert a dekódoláshoz.
Olybá tűnik egyszerű, mint az 1x1.
Persze vki ügyesen megírt library-jével.A LED részével el lehet pepecselni, míg azt kapod, amit szeretnél.
Én pár hónapja foglalkozok ráérő szabadidőmben WS2812 ledsor animálásával. Rengeteg munkaóra benne van, mire egyáltalán kitaláltam mit is szeretnék és azt hogy lehet megcsinálni.
Sztem pár hét alatt össze lehet hozni, ha napi szinten foglalkozol vele. -
-
Teasüti
nagyúr
válasz
FireKeeper #3257 üzenetére
Éppen a barkácsolást szeretném elkerülni. Vmi kifinomult, helytakarékos, csinos megoldást keresek. Nem olyat amit baltával faragtak.
Mint pl egy biciklis km óra, csak vezetéken.
Létezik ilyesmi MCU-hoz? -
Teasüti
nagyúr
Karakteres lcd-ből ismer vki olyan terméket, ami időjárásálló készülékházzal rendelkezik?
Az se volna baj, ha volna rajta 3 gomb, amit így vagy úgy el lehet érni MCU-val.
Adatbuszra megy vagy GPIO-ra az mindegy.
Szét kerestem az ebay-t, de vagy nem találom a megfelelő szavakat, vagy nincs.
Köszi! -
Teasüti
nagyúr
válasz
kmisi99 #3253 üzenetére
Gondolom ezért vettél Arduino-t, hogy ezen változtass.
Hamar bele lehet jönni, ha foglalkozol vele. Nekem két-három hét volt, mire az analfabétából eljutottam oda, hogy önállóan írok sketch-eket az Uno-ra.
Inkább az elektronikai része, amivel nem fejlődök.
A hardvernél még mindig csak breakout board-okkal legózok.
(Nem mintha ez nem lenne elég a projektjeimhez.)
A szoftverrel sokkal könnyebb dolgozni.Amúgy Play-en láttam már BT-s kontroller app-okat Arduino-hoz, miért nem szerzel be egy olyat, ami analóg irányítást is tud?
A programban van PWM vezérlés mindkét tengelyre, illetve az egyik tengelyt szervóra átírni se nagy kunszt.
A többi csak annyi, hogy hozzáigazítod a vezérlő bájtokat az app-hoz.
De talán még példa programokat is találni mellé.
És/vagy keresel egy kevésbé primitív tutorialt rc autóhoz.
Ez a 8 irányú digitális irányítás már 20 évvel ezelőtt is gagyi volt. -
Teasüti
nagyúr
-
Teasüti
nagyúr
válasz
kmisi99 #3249 üzenetére
Valszeg akkor az app se 9600 baud rátával stream-el ezek szerint.
Ha jól vettem ki a kódból, akkor a PWM az nem csak egy sebesség szabályzó? Vagyis egyszer beállítod a csúszkát vagy nem tudom mi van az app-ban, aztán azzal a sebességgel megy a kocsi az iránygombokra.
Látni kéne az alkalmazás API-ját is, hogy ez jó legyen.Amúgy a linken amit adtál van pár hivatkozás és eljutottam ide:
Próbáld ki ezt!
Persze az eredeti kóddal. -
Teasüti
nagyúr
válasz
kmisi99 #3247 üzenetére
Tudni kéne hozzá hogy működik az alkalmazás.
Amíg nyomod a gombot, addig ismétli ezerrel a parancsot, vagy csak egyszer küldi ki a nyomva tartás ellenére?
Esetleg megpróbálhatod kicserélni a loop()-ot erre:void loop(){
int i = 0;
if (Serial.available()) {
processInput();
}
else stop_Robot();
delay(1);
}Ha ismétli a parancsot az alkalmazás - 9600 baud - amíg nyomva tartod, akkor asszem ez jó lehet.
Ha akadozik a kocsi, akkor a delay értékét lehet növelni picit, bár ha jól gondolom 1 ms-ba bele kéne férjen digitális irányítással a vezérlő karakter + delimiter. PWM vezérlésnél szintén érdemes lehet növelni a delay-t egy-két milliszekundummal, hogy beleférjen minden karakter.Illetve ha nem ismétli a parancsot az alkalmazás, akkor... passz. Akkor az alkalmazást kell rávenni, hogy küldje ki a stop_Robot() parancsot, mikor elengeded a gombot.
-
Teasüti
nagyúr
64 byte jobban mondva, elgépeltem.
A Serial.available() pont arról szól, hogy megnézi mennyi van a pufferben.
Na most én azt hinném teljesen mindegy mikor olvasom ki a puffert, adat nem veszhetne el, csak overflow esetén. Nem így van? A fogadás meg megszakítással megy, szóval ezen sincs nagyon mit dolgozni.
A baud rate meg kb mindegy, mert overflow nem fordul elő, a kiolvasás meg több menetben történik amíg megjön az EOL karakter is a puffer-be.
Vhogy ez mindig meg szokott jönni, ez még egyszer se veszett el az éterben.Szóval nem tudom mi a frász van ezzel.
Ha esetleg a bluetooth hibázik, de a Serial.write() viszont nem hibázik egyáltalán.
Meg az a furcsa még, hogy a program feltöltés USB-n lényegesen gyorsabb, BT-n elszöszöl akár 20 másodpercig is. Pedig elvileg ugyanaz a baud rate mindkettőn - 112500 a bootloader sebessége. -
Teasüti
nagyúr
Na de mi az, hogy a programom épp mást csinál?
Ez hardveres UART, a fogadás már alapból megszakítással működik (USART_RX_vect?).
Ott kéne figyelnie a 60 bájtos pufferben, amíg a Serial.read() ki nem olvassa bármit is fogad bármikor.
A soros kommunikáció amúgy nem full duplex?(#3225) Gergosz2
Mi okból?
Pont az volna a cél, hogy a programfutás ne akadjon meg semmilyen várakozás miatt és mivel a loop() gyorsabb lehet a kommunikációnál, ezért a while(SErial.available() > 0) ha jól értem minden loop() ciklusban kiüríti a Serial puffert a message[] tömbbe és ez addig ismétlődik, míg a newMessage flag nincs beállítva az egyik feltétellel.
Hol a hiba a gondolatmenetben?Amúgy egy delay(1) pl. nem segített a hibán a Serial.read() előtt.
-
Teasüti
nagyúr
Estét!
Kérhetnék egy-két tippet arra miért hibázik nekem a Serial átvitel?
Serial monitorból szeretnék 11 karaktert átküldeni: 255,255,255.
De egymás után többször se sikerül fogadni az adatot, vhol mindig hibázik.
Ez volna a kód, aminek el kéne kapnia papíron:char message[12] = {};
bool newMessage = false;
byte messageCount = 0;
while (Serial.available() > 0) {
char c;
c = Serial.read();
if ((c == '\r') || (c == '\n')) { //end of line
if (messageCount) { //empty message filter
newMessage = true;
Serial.println("EOL");
break;
}
}
else {
message[messageCount++] = c;
if (messageCount > 12) { //overflow
newMessage = true;
break;
}
}
}Ez elvileg több loop() cikluson keresztül is olvas egészen addig, míg nincs sor vége, vagy túl nem csordul a tömb.
Ennek ellenére random hibákat dob nekem, kimarad egy-egy karakter a közepéből, vagy a végéről (ami után megjött ez EOL jelzés), de olyan is előfordult, hogy a 255-öt 2555-nek mentette el a kimeneten.Az átvitel bluetooth-on (hardveres UART) történik és a 15KB program hiba nélkül felmászik, de nem tudok elküldeni 11 bájtot??
(Mondjuk USB-hez viszonyítva tovább tart; lehet hogy hibajavítózik feltöltéskor? Tud ilyet a bootloader?)
A táp hálózatról megy, szóval még csak a gyenge USB-re se lehet ráfogni.
Sőt, a perifériáknak (BT) külön ágról megy a táp, nem az Uno-ról üzemelnek (ground közösítve).Jah és a Serial.write parancsok egyáltalán nem hibáznak. Soha.
Erre esetleg van vkinek vmi ötlete?
-
Teasüti
nagyúr
Estét!
Miért kapok korrupt eredményeket, ha az alábbi képletben túllépem a 16 bitet?buffer2[i] = buffer2[i] + (buffer1[i] - buffer2[i]) * transition / 255;
Ez két pixel között számol áttűnést a transition/255 "százalékkal", és minden változó uint8_t méretű.
Viszont ha a transition és az osztója 255-nél nagyobb (értelemszerűen int16_t méreten deklarálva), akkor szemetel a kép. Miért nem mindegy itt, hogy a végén 200/255-nel szorzok, vagy 300/500-vel?
Ha a képlet részeredménye vhol túllépi a 16 bitet (gondolom ez történik), akkor nem kéne automatikusan feljebb lépnie integer műveletről long-ra? -
Teasüti
nagyúr
Köszi a segítséget!
Bevallom a doksiban keresni eszembe se jutott első körben, csak miután rámutattál a dologra.
Majd észben tartom, hogy egy óra gúglizás után talán nem ártana megnézni a doksit is.Más: végre működik a Lockup Detector-om!!
Ennyi az egész:#include <EEPROM.h>
#include <avr/wdt.h>
uint16_t report;
ISR(WDT_vect, ISR_NAKED)
{
register uint8_t *upStack;
upStack = (uint8_t *)SP+1;
report = (*upStack << 8) | *(++upStack);
eeprom_write_word((uint16_t *)500, report);
}
void setup() {
MCUSR = 0; // reset various flags
WDTCSR |= 0b00011000; // see docs, set WDCE, WDE
WDTCSR = 0b01101001; // set WDIE, WDE, and 8s delay
wdt_reset();
pinMode(13, OUTPUT);
Serial.begin(112500);
EEPROM.get(500, report);
Serial.print("Froze at: 0x");
Serial.println(report*2, HEX);
}
void loop() {
wdt_reset();
digitalWrite(13, !digitalRead(13));
delay(500);
if (Serial.available() > 0) while (1);
} -
Teasüti
nagyúr
Itt van megnyitva az adatlap az egyik lapon, 660 oldalas pdf. Azért csak úgy brahiból nem fogok nekiállni kiolvasni.
Referenciaként használom, de ahhoz tudnom kell mit keressek.
De akkor most meglesem az SRAM működését.Köszi a figyelemfelhívást! Így visszamentem a tutorial-hoz és közben már látom is, hogy a mutató deklarálásánál a típus nem a mutató típusa, hanem az adaté, amire mutat.
De azt a "8 bites tömböt" nem értem, amit írsz.
Úgy érted, hogy 8 bitből álló egység (bájt)?uint8_t *report = SP+1;
Ez visszaadja a stack utolsó elemét.
Az utolsó elemének a címét pontosabban, nem?
Az utolsó elem értékéhez ha jól értem, kell a dereference (*). -
Teasüti
nagyúr
Sziasztok ismét!
Kérhetnék egy kis segítséget a stack pointer megértésében?
Annyit tudok róla, hogy the stack pointer is a small register that stores the address of the last program request in a stack.
Valamint átrágtam magam ezen a bevezetőn a pointer-ek használatáról.
Ez alapján úgy sejtem az SP egy uint16_t változóval egyenértékű regiszter, hisz 256-nál több bájt van az SRAM-ban.
Korrekt?
Egy új sketch-ben a Serial.println(SP) nekem 2297-et ad, ami egyrészt egy 16 bites szám, másrészt meg mi a fene?? Nem 2KB SRAM van csak az Atmel 328p-ben?Nem értem továbbá, hogy a stack és heap size vizsgálatakor miért így deklarálják a változókat, ahogy:
void check_mem() {
//uint8_t * heapptr, * stackptr; // I declared these globally
stackptr = (uint8_t *)malloc(4); // use stackptr temporarily
heapptr = stackptr; // save value of heap pointer
free(stackptr); // free up the memory again (sets stackptr to 0)
stackptr = (uint8_t *)(SP); // save value of stack pointer
}A stackptr egy pointer, az SP is egy pointer, stimmt.
De ez miért így van: stackptr = (uint8_t *)(SP); ??
Miért 8 bites? Nálam így a 2297-ből 249 lesz, csak épp azt nem értem ez hogy a fenébe lenne már kívánatos eredmény, amikor itt a 2297 csordul túl, vagyis korrupt adat.
Na meg sehogy nem tudok rájönni hogy tudom kiíratni Serial-ol az SP-n lévő adatot.
Nálam ez hibát dob:uint16_t report;
report = *SP;
Pedig elvileg ez az SP dereference volna a pointer tutorial szerint, vagyis ezen a címen lévő adatot kéne visszaadnia.exit status 1
invalid type argument of unary '*' (have 'uint16_t {aka unsigned int}')És ami még furább, hogy az alábbi pár sor 16 bites számot ír ki a monitorra:
register uint8_t *upStack;
upStack = (uint8_t *)SP;
Serial.println((int)upStack);Nagyra értékelnék egy kis iránymutatást, már egy ideje a netet túrom emiatt, de csak random fórum posztokat találok kevés átfedéssel.
-
Teasüti
nagyúr
Aki random fagyásokat tapasztal I2C használata közben, az spórolja meg azt a szopást amin keresztülmentem (de a watchdog lockup detector-t csak azért is összerakom) és dobja ki az alapértelmezett Wire library-t a pi... a kukába!
Kulcsszó: I2C freeze bus lockupMÁS
Mellesleg nem tudja vki miért nem tudom használni az EEPROM.h library-t ISR interrupt-ból?
Nem találok arra vonatkozó infót, hogy megszakításokat használna ez a fgv könyvtár. -
Teasüti
nagyúr
Ez alapján én első körben a distanceToGo() függvénnyel próbálkoznék.
A harmadik motor akkor fut, ha az első kettő "odaért". -
-
Teasüti
nagyúr
válasz
Janos250 #3203 üzenetére
Ok, rosszul töltöttem le, tele voltak HTML kóddal a fájlok.
Most sima copy&paste Github-ról (nincs egy qrva download gomb sehol).
Most "csak" ezt tolja az arcomba egyszerű #include-ra, vagyis semmit nem csinálok még vele a programban.Arduino: 1.6.8 (Windows 10), Alaplap:"Arduino/Genuino Uno"
libraries\ApplicationMonitor\ApplicationMonitor.cpp.o: In function `__vector_6':
C:\Users\cex\Documents\Arduino\libraries\ApplicationMonitor/ApplicationMonitor.cpp:26: undefined reference to `ApplicationMonitor'
C:\Users\cex\Documents\Arduino\libraries\ApplicationMonitor/ApplicationMonitor.cpp:26: undefined reference to `ApplicationMonitor'
collect2.exe: error: ld returned 1 exit status
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences. -
Teasüti
nagyúr
válasz
Janos250 #3201 üzenetére
A panel típusát nem szoktam piszkálni, telepítés után egyszer be lett állítva, aztán ennyi.
Háát, van itt baj rendesen, ha érti vki mi a hiszti:Arduino: 1.6.8 (Windows 10), Alaplap:"Arduino/Genuino Uno"
In file included from C:\Users\cex\Documents\Arduino\kicsike\kicsike.ino:1:0:
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:26:5: error: stray '\302' in program
<title>ArduinoCrashMonitor/ApplicationMonitor.h at master · Megunolink/ArduinoCrashMonitor · GitHub</title>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:26:5: error: stray '\267' in program
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:26:5: error: stray '\302' in program
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:26:5: error: stray '\267' in program
In file included from C:\Users\cex\Documents\Arduino\kicsike\kicsike.ino:1:0:
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:138:3: error: missing terminating ' character
<!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="/Megunolink/ArduinoCrashMonitor/search" class="js-site-search-form" data-scoped-search-url="/Megunolink/ArduinoCrashMonitor/search" data-unscoped-search-url="/search" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
^
In file included from C:\Users\cex\Documents\Arduino\kicsike\kicsike.ino:1:0:
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:467:69: error: stray '#' in program
<td id="LC8" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">pragma</span> once</td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:471:69: error: stray '#' in program
<td id="LC9" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds"><</span>Arduino.h<span class="pl-pds">></span></span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:475:70: error: stray '#' in program
<td id="LC10" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds"><</span>avr/wdt.h<span class="pl-pds">></span></span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:492:70: error: stray '#' in program
<td id="LC14" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">if</span> defined(__AVR_ATmega2560__)</td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:496:70: error: stray '#' in program
<td id="LC15" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">define</span> <span class="pl-en">PROGRAM_COUNTER_SIZE</span> <span class="pl-c1">3</span> <span class="pl-c">/* bytes*/</span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:500:70: error: stray '#' in program
<td id="LC16" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">else</span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:504:70: error: stray '#' in program
<td id="LC17" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">define</span> <span class="pl-en">PROGRAM_COUNTER_SIZE</span> <span class="pl-c1">2</span> <span class="pl-c">/* bytes*/</span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:508:70: error: stray '#' in program
<td id="LC18" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">endif</span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:718:70: error: stray '#' in program
<td id="LC68" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">if</span> defined(WDTO_4S)</td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:726:70: error: stray '#' in program
<td id="LC70" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">endif</span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:730:70: error: stray '#' in program
<td id="LC71" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">if</span> defined(WDTO_8S)</td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:738:70: error: stray '#' in program
<td id="LC73" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">endif</span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:873:3: error: missing terminating ' character
<!-- </textarea> --><!-- '"` --><form accept-charset="UTF-8" action="" class="js-jump-to-line-form" method="get"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /></div>
^
In file included from C:\Users\cex\Documents\Arduino\kicsike\kicsike.ino:1:0:
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:5:1: error: expected unqualified-id before '<' token
<!DOCTYPE html>
^
In file included from C:\Users\cex\Documents\Arduino\kicsike\kicsike.ino:1:0:
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:471:148: error: expected unqualified-id before '<' token
<td id="LC9" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds"><</span>Arduino.h<span class="pl-pds">></span></span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:471:189: error: expected unqualified-id before '<' token
<td id="LC9" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds"><</span>Arduino.h<span class="pl-pds">></span></span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:475:149: error: expected unqualified-id before '<' token
<td id="LC10" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds"><</span>avr/wdt.h<span class="pl-pds">></span></span></td>
^
C:\Users\cex\Documents\Arduino\libraries\AppMonitor/ApplicationMonitor.h:475:190: error: expected unqualified-id before '<' token
<td id="LC10" class="blob-code blob-code-inner js-file-line">#<span class="pl-k">include</span> <span class="pl-s"><span class="pl-pds"><</span>avr/wdt.h<span class="pl-pds">></span></span></td>
^
In file included from C:\Users\cex\Documents\Arduino\kicsike\kicsike.ino:3:0:
C:\Users\cex\Documents\Arduino\libraries\FAB_LED-master/FAB_LED.h:28:29: error: expected declaration before end of line
#pragma GCC optimize ("-O2")
^
exit status 1
Error compiling for board Arduino/Genuino Uno.
This report would have more information with
"Show verbose output during compilation"
option enabled in File -> Preferences. -
Teasüti
nagyúr
Illetve akartam kérdezni, hogy regiszter tologatásnál mit jelent egy ilyen művelet: 1<<WDRF?
Bitshift referencia szerint így kellene kinéznie:
Syntax:
variable << number_of_bits
variable >> number_of_bitsSzóval ez alapján nem tudom értelmezni a fenti műveletet.
Tolja el az 1-et balra a WDRF regiszterrel (ami 8 bites gondolom)??
Ha jól láttam az összes regiszter beállítása hasonlóképp működik*, de eddig csak értetlen copy&paste alapján végeztem tutorial-ból.
De szeretném megérteni mi is történik itt.
Érdekességképpen az I2C buszon lévő modulok regisztereit AND és OR művelettel lehet írni, ami adja magát és logikus is.Köszi!
*pl Timer1 config:
OCR1A = 31250; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt -
Teasüti
nagyúr
Watchdog témakörben van itt egy cikk, ami vhogy elmenti egy ISR_NAKED interrupt-tal, hogy hol lett megszakítva a program. Ez debug-ra volna jó, hogy aztán lehessen látni visszafejtés után pontosan milyen parancsnál fagyott le a futtatás.
Function called when the watchdog interrupt fires. The function is naked so that
we don't get program stated pushed onto the stack. Consequently the top two
values on the stack will be the program counter when the interrupt fired. We're
going to save that in the eeprom then let the second watchdog event reset the
micro.Nem fordul le a példa program, szóval szeretném újraalkotni alacsony szinten a kulcs részeit, viszont még elég hiányosak az ismereteim, meg a library-t se igazán értem még, hogy sketch-be át tudjam írni.
Nem tudom mi az a "stack" és hogy lehet kezelni. Illetve ez milyen területe az Arduino-nak? Még azt se igazán tudom mit kéne keresni a neten némi tájékozódás gyanánt. -
Teasüti
nagyúr
Ezt hol látod? Átsiklottam felette biztos.
Arról nincs infód véletlenül miért kell a PWR_MGMT_1 regiszterben a reset után még külön ébreszteni (kinullázni a regisztert)? A doksi szerint ha végez a reset-tel, akkor ez a kapcsoló automatikusan átfordul nullába. De nálam vmiért nem és nem is működik a modul, amíg külön nem írok nullákat ide.DEVICE_RESET: When set to 1, this bit resets all internal registers to their default values.
The bit automatically clears to 0 once the reset is doneFIFO-t nem használok jelenleg. felraktam maxra a lowpass filtert, aztán csak a regisztereket olvasom.
Egész jó eredményt ad, mintavételezéssel és átlagolással se kapnék szükségszerűen jobb eredményt, de legalább megspórolok némi cpu időt.MÁS
Watchdog interrupt-ra tud vki egy tutorial-t példával?
Csak olyan cikket találtam, ami egy erre épülő library-t mutat be, de nem akarok library-t használni, amikor pár sor az egész és legalább látnám mit is csinál regiszter szinten a kód.
(Lassan meg kéne néznem mi is az a library és hogy lehet létrehozni sajátot.) -
Teasüti
nagyúr
válasz
Daszkalosz19 #3181 üzenetére
Nálam lefordítja így ahogy van.
Gondolom friss verziód van neked is. -
Teasüti
nagyúr
Miért van az, hogy az alábbi 3 soros kód részlet - hőmérséklet olvasása MPU6050-ről - nem fut le a setup()-ban (rawData[ ] nem tartalmaz semmit), míg a loop()-ban igen?
szerk: nem aktuális, delay megoldotta.
Gondolom a szenzor reset után még nem volt adat, mikor olvasott az Uno.//temperature from MPU6050
Serial.println(readTempData());
Serial.print(float(readTempData()/340.0 + 36.53), 2);
Serial.println(" °C");
int16_t readTempData()
{
uint8_t rawData[2]; // x/y/z gyro register data stored here
readBytes(MPU6050_ADDRESS, TEMP_OUT_H, 2, &rawData[0]); // Read the two raw data registers sequentially into data array
Serial.println(rawData[0], BIN);
Serial.println(rawData[1], BIN);
return ((int16_t)rawData[0]) << 8 | rawData[1] ; // Turn the MSB and LSB into a 16-bit value
}
void readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest)
{
Wire.beginTransmission(address); // Initialize the Tx buffer
Wire.write(subAddress); // Put slave register address in Tx buffer
Wire.endTransmission(false); // Send the Tx buffer, but send a restart to keep connection alive
uint8_t i = 0;
Wire.requestFrom(address, count); // Read bytes from slave register address
while (Wire.available()) {
dest[i++] = Wire.read();
} // Put read results in the Rx buffer
} -
Teasüti
nagyúr
MPU6050 lelkivilágához ért itt vki?
Átnyálaztam magam ezen, mellé felcsaptam még ezt is.
Viszont akad pár kérdésem, amit nem értek, infót neten nem találtam, a program és a kézikönyv nem tárgyalja.
Pl. a FIFO olvasása és írása hogy működik?
Van egy FIFO_R_W regiszterem, de ez csak egyetlen bájt az 1024-ből. Szóval ezt miként használja a modul? Az olvasás gondolom úgy megy, mint a 60 KB soros puffer esetén, hogy a kiolvasott adat helyére a sorban következő kerül míg ki nem ürül a FIFO. Így van?
Viszont az írás teljesen ködös, egyáltalán mit és miért kéne ebbe írni kívülről az adatbusz felől?Aztán ott van a low pass filter és a sample rate.
Ha jól értem a kézikönyvet, akkor a chip a mintavételi frekinél alacsonyabb szűrő frekivel írja ki a szűrt értéket a regiszterbe.
Viszont ennek látszólag ellenmond az alábbi kód:// Configure MPU6050 gyro and accelerometer for bias calculation
writeByte(MPU6050_ADDRESS, CONFIG, 0x01); // Set low-pass filter to 188 Hz
writeByte(MPU6050_ADDRESS, SMPLRT_DIV, 0x00); // Set sample rate to 1 kHz
writeByte(MPU6050_ADDRESS, GYRO_CONFIG, 0x00); // Set gyro full-scale to 250 degrees per second, maximum sensitivity
writeByte(MPU6050_ADDRESS, ACCEL_CONFIG, 0x00); // Set accelerometer full-scale to 2 g, maximum sensitivity
uint16_t gyrosensitivity = 131; // = 131 LSB/degrees/sec
uint16_t accelsensitivity = 16384; // = 16384 LSB/g
// Configure FIFO to capture accelerometer and gyro data for bias calculation
writeByte(MPU6050_ADDRESS, USER_CTRL, 0x40); // Enable FIFO
writeByte(MPU6050_ADDRESS, FIFO_EN, 0x78); // Enable gyro and accelerometer sensors for FIFO (max size 1024 bytes in MPU-6050)
delay(80); // accumulate 80 samples in 80 milliseconds = 960 bytesTehát 80 ms-et vár, ami e szerint 80 minta (1 kHz). Viszont feljebb meg 188 Hz-es lowpass van beállítva, szóval ezt nem értem.
A célom az volna, hogy egy tetszőleges lowpass frekvencián megtöltsem a FIFO-t a gyorsulásérzékelő adataival, majd ezt burst read módban kiolvasni relatíve ritkán, hogy a fő programomat ne lassítsa be a 200 hz-es I2C olvasás szerencsétlen Uno-n. E helyett mondjuk a megengedhető legnagyobb késleltetéssel végezni egyetlen I2C műveletet a teljes FIFO puffert kiemelve, majd matekozni.
Ehhez talán interrupt se fog kelleni, max flag-ként.
Illetve azon fílózom még, hogy ha overflow interrupt-ot választok, akkor a FIFO eleje már felülírodott, mire jön a jel? Mert tök jó lenne úgy időzíteni a burst read-et is, hogy teli puffernél olvasson.szerk: illetve továbbra se tudok interrupt-ban I2C műveletet végezni. Ez normális?
Köszi!
-
Teasüti
nagyúr
Én pl. kalibrációs értékeket mentek el benne, amit onnan tölt be egy esetleges reboot esetén.
Flash élettartam.
A CPU meg évtizedeket szolgálhat. Igazából én még csak nem is hallottam hír szinten se öregségben elhunyt processzorról eddig életemben.
A 20-30 éves PC-k is vígan futnak még, persze ha az alaplap és rajta a kondik bírják még. -
Teasüti
nagyúr
Kérhetnék egy kis elektronikai segítséget?
Megcsináltam a vezetéknélküli program feltöltést, viszont a reset-elő áramkör nem működik vmiért.
Nálam R3 = 10 kOhm, R2 = 20 kOhm (2x10 sorba kötve). A kondi egy u1J63 izé, ami a kezdő csomagban volt, ha jól tévedek ez éppen akkora, amekkora ide kell.
Rámértem multival:
1. átvitel közben a PIN32 lehúz földre, ahogy kell; amúgy 3,3V.
2. a reset PIN-en stabil ~4V van minden helyzetben.
szerk: 3. a kondi egyik lábán a feszültség állandó ~4V, a másik lábán meg 3,3/0V mérhető üzemmódtól függően.
A bekötést n+1 alkalommal ellenőriztem.
A nulla felé konvergáló elektronikai ismereteimmel a feszültségosztót is épp csak kapisgálom, de a kondi nem tudom hogy viselkedik, vagy hogy kéne neki.
Vmi tipp?
Köszönöm!szerk: manuális reset-tel véletlenül elkaptam egy getsync kísérletet, a program szépen feltöltött szal ezen apró bug-on kívül elvileg jó.
Mellékhatása a mod-nak, hogy a monitor megnyitásakor is lesz egy reboot. -
Teasüti
nagyúr
válasz
norbert1998 #3084 üzenetére
Ránézésre ezt nem lehet megmondani.
Ez egy sokváltozós képlet, kezdve a motor nyomatékával, a jellemző áttétellel, ennek az orsónak a menetemelkedésével és így tovább minden egyes alkatrész jellemzőivel a hajtásláncban. És akkor a súrlódási tényezőket megállapítani még külön fejvakarás.
Hacsak nem vmi nevetségesen hosszú áttételt használsz, akkor az a 0,32 Nm elég viccesen hangzik szerintem.
De ne hallgass rám, csak hasraütöttem, ahogy a kérdés is csak hasraütésszerű.
Ez így már bőven gépészmérnöki feladat, általában ezt már tervezni szokás. -
Teasüti
nagyúr
válasz
fpeter84 #3078 üzenetére
A serial monitor az "AT" üzenetre a loopback Serial.print(char, DEC) is csak két karakter ascii kódját adja vissza.
Ha van is itt még vmi trükk, akkor azt így nem látom.B@@@@!
Egész álló napja próbálom életre kelteni a HC-05-öt, semmire se akart válaszolni AT módban, semmilyen sebességen.
Kibogarásztam már a fórumok bugyraiból, hogy hisztis a soremelésre és a kocsi vissza karakterekre, de azt hittem az arduino serial monitor erről gondoskodik a háttérben, mivel a HC-06 simán kommunikál velem.
Erre nem most látom az ablak alján, hogy lehet kapcsolni a soremelést és a kocsivisszát??
(Na így már Serial.print(char, DEC) is 4 karaktert mutat az "AT" szóra.)
(#3081) Janos250
Example-ből másoltam ki ezt a parancsot, ami a tutorial-ban működik, nekem nem ad választ.
De mivel manuálisan sikerült most életet csikarni a HC-05-be, ezért ugyan érdekes jelenség, hogy kódból miért nem válaszol rá, de a továbbiakban érdektelen számomra. Ez egy baud rate teszthez kellett volna, ahol végigpörgeti az "AT" parancsot az összes sebességen. -
Teasüti
nagyúr
Miért nem tudok küldeni AT parancsot az HC-05 vagy 06 moduloknak programból?
Ha serial monitorból gépelem be ezen a hídon keresztül, akkor príma:
// Keep reading from HC-05 and send to Arduino Serial Monitor
if (BTSerial.available())
Serial.write(BTSerial.read());
// Keep reading from Arduino Serial Monitor and send to HC-05
if (Serial.available())
BTSerial.write(Serial.read());De amint kódolni szeretném, sehogy se működik.
Pl.:
BTSerial.write("AT");
BTSerial.write("AT\r\n");
BTSerial.print("AT");
BTSerial.println("AT");
és stb...
String command = "AT";
char com[3];
BTSerial.print(command);
command.toCharArray(com, 3);
BTSerial.write(com);Ha csak egyetlen egy ilyen bekerül a programba, akkor már a híd se működik onnantól.
Egészen perverz módon azt is próbáltam, hogy a begépelt parancsot menti le karakter tömbbe és azt rakja ki write() módban.Szóval tudja esetleg vki most mi f@sz baja van?
Köszönöm! -
Teasüti
nagyúr
válasz
Teasüti #3064 üzenetére
Sehogy se akar működni az I2C busz a megszakítással. A végrehajtási ideje 560 uS, szóval technikailag mennie kéne, de még 250 hz-re csökkentve se éled fel a program. Egyszerűen el se indul, még a setup() se fut le.
(#3065) fpeter84
GY-512-es modulom van, tud küldeni megszakítást.
Viszont jelenleg csak egyetlen tengely adatai kellenek nekem és csak a nyers adatok kiolvasása példáját használom. Az INT-hez meg már kéne a FIFO puffer, amivel meg társul a DMP is ha jól emlékszem (de nekem nem kell a DMP ehhez a projekthez, csak a nyers gyorsulás egy tengelyen).Illetve kicsi frekvencián nincs zajszűrés (átlagolva a mintákat), ami nekem nem jó.
-
Teasüti
nagyúr
válasz
Teasüti #3063 üzenetére
Hmmm úgy néz ki működik a dolog, ha az interrupt függvény tartalmát kikommentelem és bent hagyok egyetlen számlálót.
Ebből arra következtetek, hogy túl lassú az interrupt végrehajtása?
Talán a következő megszakítás újraindítja a kódot mielőtt az lefutna?
Lehetséges ez egyáltalán, hogy a következő megszakítja az előzőt?Hogy szokás fix frekvencián kiolvasni egy I2C buszon lévő eszköz regisztereit, ha nem timer interrupt-tal?
-
Teasüti
nagyúr
Uhm,
Timer interupt-tal játszadozok épp és első nekifutásra semmi nem történik, mármint fel se éled az Uno az addig jól működő programmal az alábbi kód beillesztése után.
1 kHz-es frissítése van az MPU6050-es gyorsulásérzékelőjének, ezt szeretném kiolvasni ugyanekkora frekvenciával és a loop()-ban a megfelelő pontban átlagot számolok és nullázom az értékeket.
Vagyis ez volna az elképzelés...
Vmi ötlet arra, hogy meg se nyikkan?
Az első és utolsó életjel egy félig kiküldött Serial.print pár sorral a timer beállítása után.
Próbáltam alá rakni a sei()-t ennek az egy Serial.print-nek, de meglepő módon még idáig se jut a program.Setup()-ban:
cli();//stop interrupts
//set timer2 interrupt at 1kHz
TCCR2A = 0;// set entire TCCR2A register to 0
TCCR2B = 0;// same for TCCR2B
TCNT2 = 0;//initialize counter value to 0
// set compare match register for 1khz increments
OCR2A = 249;// = (16*10^6) / (1000*64) - 1 (must be <256)
// turn on CTC mode
TCCR2A |= (1 << WGM21);
// Set CS22 bit for 64 prescaler
TCCR2B |= (1 << CS22);
// enable timer compare interrupt
TIMSK2 |= (1 << OCIE2A);
sei();//allow interruptsSetup()-on és Loop()-on kívül:
ISR(TIMER2_COMPA_vect){
Wire.beginTransmission(MPU_addr);
Wire.write(0x3F); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU_addr,2,true);
AcZ += Wire.read()<<8|Wire.read(); // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
measures++;
Serial.println("Yay");
}Egyébként ilyenkor az analogWrite() egyáltalán nem fog működni, vagy csak azon a két lábon nem, amit a Timer2 vezérel?
(#3061) fpeter84
BT-s vezérlés Android-on adja magát, de mennyire profi megoldás lenne már egy beépített képernyő! -
Teasüti
nagyúr
Nem értek a Linux-hoz, meg nem is szeretnék OS-el szarakodni.
De ezzel az erővel egy kiszuperált telefont is beágyazhatnék a projektbe, ami BT-n kommunikál.
Amúgy elsőre a BT-s megközelítés foglalkoztat inkább, de még vizsgálom egy Android GUI összerakásának lehetőségét különösebb IT tudás nélkül.
Tasker Widget készítőjével akár működhetne is, ha találnék egy jó beépülőt hozzá soros BT kommunikációhoz.Erről jut eszembe. Rendeltem egy HC-05 modult is, hogy megcsinálom a vezetéknélküli program feltöltést az Uno-ra, viszont kicsit ködösek az infóim.
Ugye a reset a modul LED kivezetésével történik, ami ha jól értem akkor aktív, ha van kommunikáció.
Ez idáig rendben is van, de ez nem fog nekem reset-elni programfutás közben minden egyes soros kommunikáció alkalmával? Mert ha újraindítja nekem az Uno-t egy Serial.read-nél vagy print-nél, akkor megette a fene az egészet. -
Teasüti
nagyúr
válasz
Gergosz2 #3051 üzenetére
A "HMI" képernyőkhöz van editor, az hatalmas előny szerintem. Meg nem 8 bites GUI-ra gondoltam, hanem 32 bitesre, grafikával, animációval akár. Mint egy Android alkalmazás, vagy HTML. Szóval eyecandy.
Nem foglalkoztam még a témával, egy-két videót néztem csak nagyjából mit tudnak ezek.
De gondolom ha kézzel készítem a képet editor helyett, akkor csak a photoshop tudásom szabhat gátat. Úgy olvastam semmi extrát nem csinálnak ezek, mint SD kártyáról megnyitják a megfelelő képeket oszt' ennyi.Esetleg az megoldható, hogy egy közönséges processzor nélküli lcd-hez magam rakom össze a kontrollert tárhellyel?
Mert valóban olcsóbb megvenni az alkatrészeket, mint egy HMI árát kifizetni.
Mondjuk itt csak azt kell szerintem eldöntenem megér-e nekem ennyit a szoftveres fejlesztés vagy nem. -
Teasüti
nagyúr
válasz
fpeter84 #3043 üzenetére
Hogyne lehetne beállítani a kékfogat, a SoftwareSerial gyönyörűen teszi a dolgát, azután csak pár sor hidat képezni a gép és a BT között.
LCD-kkel az a bajom, hogy túl sok láb kell hozzájuk. Ha nem ilyen kész megoldást használok, akkor kell neki egy dedikált mikrokontroller, hacsak nem vmi bitang nagy számú porttal rendelkező deszkát veszek. De a Nano méretű cuccok meg nem erről híresek, h 50 I/O van rajta. És akkor még nem tudom hogy raknék össze egy grafikus interfészt érintőkijelzővel és az se lenne baj, ha animálva lenne. Ehhez meg van minden, beleértve a szoftvert is.
-
Teasüti
nagyúr
válasz
Teasüti #3039 üzenetére
Amúgy melyik a jobb választás embedded használatra? Barebone Uno, vagy egy Nano? Ebay-en kb egy árban vannak, sőt az Essential Kit egy hangyányit még drágább is a Nano-nál. Egyelőre még nem kacérkodok prototípus készítésével, de ha eljutok egy szintre, akkor már megfontolnám saját nyák készíttetését.
Mondjuk egy Nano-t se vészes beágyazni. Dilemma...Az STM32-esek közt se tudok dönteni.
-
Teasüti
nagyúr
válasz
fpeter84 #3038 üzenetére
Polling, jó tudni... Köszi!
Csak néha egy-egy vezérlő bájthoz kell.
A 4D Systems LCD kijelzőivel szemezek még, az elvileg UART-on kommunikál, ahhoz lehet már több fog kelleni ennél. Bár funkciójában is ugyanaz, mint a BT. Egy kevés vezérlő bájt, és inkább Serial.print sorozatok állapotjelzéshez.BT vevőből ilyet vettem:
[link]FTDI-re nem tudom mi szükségem volna egyelőre. Az majd a barebone Uno-k építéséhez fog kelleni.
-
Teasüti
nagyúr
Épp most olvastam utána. Elvileg nem nagy was ist das.
A 32-es lábát lehet használni a HC-05/06 vevőnek az Uno reset-elésére.
(Arra nem tért ki milyen varázslattal.)
Az új IDE-ben már dll fájlokkal se kell babrálni hozzá állítólag.
Aztán reset-en kívül csak az átviteli sebességet kell belőni 19200-ra a bootloader-nek és elvileg megy.Viszont ránézve erre a kis vacakra esélytelen számomra, hogy bármit is ráforrasztok arra a mütyür lábra.
Kézi reset-tel meg neki se állok, akkor már inkább kábelezek továbbra is.Egyébként meglepően ügyes ez a SoftwareSerial, azt hittem meg fogja akasztani a led frissítését.
Vajon hogy működik a puffere? Interupt-tal kapja el a bejövő adatot? -
Teasüti
nagyúr
válasz
fpeter84 #3034 üzenetére
String message;
int integer;
while (Serial.available() > 0) {
message += char(Serial.read());
}
if (message.length() > 0) {
integer = message.toInt();
Serial.println(integer);
message = "";
}Lett a megoldás végül.
Fogalmam sincs ezek mennyi erőforrást vesznek el, de legalább nem akasztja meg a programot, mint a parseInt().Úgy olvastam BT-n programot feltölteni kifejezetten nem lehet. Mintha Arduino nyomatékosan nem ajánlaná emlékeim szerint. Talán nem túl biztonságos a 3.3 TTL feszültség az Uno RX lábán?
Természetesen nem ért váratlanul, mikor összeakadt az usb-vel, a hotplug viszont úgy tűnik működik.
Sima HC-06, soros kivezetéssel. -
Teasüti
nagyúr
Én megvettem az eredeti Starter Kit-et.
Hát nem volt egy nagy élmény a könyv, néhányszor elővettem az első lépésekhez, meg első olvasásra érdekes volt. De azt hiszem nem venném meg újra. Tényleg gyerek szinten van, ami jó egy technikai analfabétának. De villámgyorsan túl lehet lépni rajta, hisz a benne lévő tudásanyag vajmi kevés és alaposan fel van hígítva bő magyarázatokkal.MÁS
Megjött a posta, szóval ma karácsonyi hangulatban bontogattam a kis I2C bizbaszokat, BT HC-06 vevőt, stb. Jupííí!
Viszont most először próbálok adatok küldeni a deszkára, és több mint egy órája azt kutatom, hogy miként lehet visszanyerni azt az egy szerencsétlen bájtot uint8_t formájában a kurva ASCII kódból.
Szóval ti mit használtok erre?
Hogy tudom konvertálni az uint8_t-t ASCII-be és vissza?(#3031) tvamos
Hát passz. Gondolom a port lebegése közben még a mérési határokon belül olvas értéket.
Na meg mi van akkor, ha nem? A változók max túlcsordulnak, nem kéne lefagynia.
Ennél érdekesebb volt, mikor megnéztem mit alkot az USB bekötött BT vevővel az UART-ra.
Na az úgy kiakasztotta, hogy még a PC se ismerte fel az eszközt utána, csak áramtalanítás után. -
Teasüti
nagyúr
Uhm, az normális ha lefagy a proci, ha lebegő analóg bemenetről próbálok olvasni?
Pár másodpercig fut tovább anomáliákat okozva, aztán annyi. Soros kommunikáció is megszűnik.
Leesett a próbapanelről a poti... -
Teasüti
nagyúr
Hogy tudok összefűzni több Serial.print-et?
Most komolyan minden egyes változóhoz külön parancs kell? -
Teasüti
nagyúr
válasz
Teasüti #3026 üzenetére
Ha a led szalag pwm frekvenciája 400 hz, akkor teljesen fölösleges 400 fps fölé szaladni.
Vagy a 800 Khz-es átviteli sebesség fölé.
Amúgy WS2812-nél az adatbusz-on 1 hz alatt egy bit közlekedik? Vagyis 800khz úgy 33.333 db 24 bites pixel frissítésére elég? Vagy 400 fps-en 83 pixel. -
Teasüti
nagyúr
Üdv!
Kérhetnék egy kis segítséget a led strip vezérléshez?
Eljutottam odáig, hogy összeraktam egy offset vezérlésű grafikus motort, ami fps-től és timer-től függetlenül dolgozik (delay nélkül ugye), egy előre meghatározott animációs sebességet tartva két képkocka közötti eltolás számolásával a futási idővel korrigálva. Vagyis az fps-re fordítottan arányos az offset. (Hasonlóan, mint a pc játékok, vagyis kicsi fps-nél szaggat, nagy fps-nél megy mint állat, de ugye a játékidő tempója változatlan.)
Pl. két képkocka között ha +10-et küldök 60 fps-en a renderelő függvény bemenetére - ami a pixeleket számolja -, akkor 600 fps-en +1-et. Így viszonylag állandó animációs sebességet kapok (mondjuk +-10% az offset kerekítésétől függően kicsi értékeknél).A gond ott kezdődik, hogy csökkentve a kívánt animációs sebességet az offset nem mehet +1 alá, mert akkor az animáció egyszerűen leáll. Viszont magas fps-nél ez elkerülhetetlen, mivel egy adott aránynál elkezd nullára kerekíteni az offset.
Nos a kérdésem az, hogy miként lehetne megkerülni ezt a jelenséget úgy, hogy ilyen esetben csak minden második vagy harmadik (és így tovább...) loop() ciklusban legyen +1 az offset, amúgy meg nulla?
Vagyis a példánál maradva 600 fps felett minden második/harmadik képkockát ismétel.Esetleg vmi hasonló technikával jól jönne egy fps limit is. Ha a led szalag pwm frekvenciája 400 hz, akkor teljesen fölösleges 400 fps fölé szaladni.
(delay?)
(#3024) fpeter84
(#3025) tvamos
Igaz, mire való a prescale... -
Teasüti
nagyúr
Mi ez a digitalRead() ^ 1 egy kimenetre állított porton?
Értem, hogy toggle, de... Ilyet is lehet?? Mi az a power 1? Ez vmi olyasmi, mint változó esetén pl a ledstate = !ledstate?/* Arduino 101: timer and interrupts
1: Timer1 compare match interrupt example
more infos: http://www.letmakerobots.com/node/28278
created by RobotFreak
*/
#define ledPin 13
void setup()
{
pinMode(ledPin, OUTPUT);
// initialize timer1
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 0;
OCR1A = 31250; // compare match register 16MHz/256/2Hz
TCCR1B |= (1 << WGM12); // CTC mode
TCCR1B |= (1 << CS12); // 256 prescaler
TIMSK1 |= (1 << OCIE1A); // enable timer compare interrupt
interrupts(); // enable all interrupts
}
ISR(TIMER1_COMPA_vect) // timer compare interrupt service routine
{
digitalWrite(ledPin, digitalRead(ledPin) ^ 1); // toggle LED pin
}
void loop()
{
// your program here...
} -
Teasüti
nagyúr
válasz
Janos250 #3016 üzenetére
Érdekes oldal ez a secrets of arduino.
A 3 timer ha mondjuk a PWM-mel van "elfoglalva" mind a 6 csatornán, akkor mellette befogható mondjuk input capture-re is?Amúgy elektronikailag van vmi különbség a fast pwm és phase correct pwm között?
Mert hogy most 0..255 között csak felfelé számol, vagy oda-vissza a számláló, abból nekem csak annyi jön le, hogy az egyiknek gyorsabb a frekvenciája. -
Teasüti
nagyúr
Az impulzus hosszúsága a kitöltési tényező lesz szerintem a PWM jelben (0-100%).
A frekvenciát nem tudod változtatni, az a PWM vezérlő hardveres jellemzője.A kondi szerintem nem fog segíteni, ha visszaemlékszek egy korábbi bejegyzésre, ahol a többiek a lehúzó ellenállást magyarázták nekem az Arduino bemenetének lebegése kapcsán, ahol a FET maga is rendelkezik egy kapacitással és ha jól értem, akkor nyit, ha az telítődik.
Nem az volt a megoldás erre, hogy másfajta FET-et kell alkalmazni? -
Teasüti
nagyúr
Csak azt néztem, hogy a Teensy áráért Maple mini-ből is többet lehet kapni.
Ezt a felárat nem tudom hova tenni, nem azért mert nem tehetem meg.
De hisz ez 3.3 volton működik.Vagy az 5V toleranciát érted ez alatt?
Igazából nincs különösebb érvem a 3.3 ellen se, csak gondoltam könnyebb beilleszteni Uno mellé egy 5 voltosat.
Ami azt illeti képtelen vagyok dönteni a Nucleo, Maple, Teensy és egyéb STM32 deszkák között.
Melyiket lehet ajánlani egy laikusnak kezdésnek? FPU nem annyira létkérdés, csak úgy gondolom £22-ért már nem kéne kispórolni belőle azt sem. -
Teasüti
nagyúr
válasz
Janos250 #3002 üzenetére
Oké, csak a technikailag fejlettebb arm családban, mint amilyen az STM32 is.
Azt olvastam ez a terület túl fragmentált ahhoz, hogy olyan széleskörű rajongói tábora legyen mint az Arduinonak.Arduino-nak nincs Nano méretű 32 bites vasa, csak a Zero és a Due úgy tudom.
Ez a Maple ez nem discountinued? Tovább is lapoztam, mikor először kidobta a kereső.
-
Teasüti
nagyúr
Mit takar az Arduino connectivity pontosan? Mire jó az?
Épp akartam kérdezni egy breadboard friendly vasat, ez a Teensy jónak tűnik.
Ez mennyire volna ajánlott nekem bevezetőnek? Nulla tapasztalat, nulla tudás mellé.
32 bites vonalon hol van a legnagyobb közösség? Úgy mint az Arduino esetében. -
Teasüti
nagyúr
válasz
fpeter84 #2974 üzenetére
Az igen, mea culpa!
Azért nem volt haszontalan éjszaka.
Uint32_t az nem double (integer)? Vagy 32 bites változó automatikusan float lesz?A táblázat viszont jól mutatja, hogy 32 biten ha van elég ram, akkor "double-t mindenkinek"!
A float szorzásban van vmi furcsaság. Ott lassúbb lenne órajel ciklusonként a Due, mint a Nano?
-
Teasüti
nagyúr
Üdv ismét!
Piszkálja a csőröm a 32 bites proci, mint amilyen a Zero is, vagy akár az STM32.
Arra volnék kíváncsi, hogy van vmi előnye a 8 bitessel szemben az aritmetikai műveletekben is (változó típusától függetlenül), vagy mondjuk egy int8_t osztása és szorzása ugyanolyan gyors? Persze órajel ciklusonként értem. Vagy egy int16_t?Mi a helyzet a lebegőpontos számokkal? A 32 bitesek már tudják számolni hardverből, vagy itt is még trükkös és lassú a dolog?
A processzorok lelkivilágához nem értek.Pixel transzformációk kapcsán relatíve sokat használom a szorzást és osztást, főleg integer-rel.
Viszont megfontolnám a lebegőpontos számításokat is, ha már függvényeket használok.
Erre alkalmasabb lenne egy 32 bites proci?
Köszönöm!szerk: jah igen, 32 bitesből nem létezik 5V-os?
-
Teasüti
nagyúr
Én értem, hogy ovis. De ha csak egyetlen feladat fut a procin...
Timer-nél lesz némi overhead, amivel nehéz számolni.
Nekem legalábbis.
Jelenleg azzal kísérletezek, hogy setup()-ban lemérem minden függvény idejét és ezekkel korrigálom a delay-t. Így faszán be lehet lőni az fps-t.Frame vezérlésű animációt egy ovis is leprogramoz, nekem meg nulla tapasztalatom van, a nyelvvel is csak ismerkedek.
A timer vezérlésű animációt még nem tudom, hogy lehetne összerakni. PC-s 3D grafikából merítettem ihletet, ott a motor teljes kapacitással fut és a megjelenítés van időzítve.
Nálam ez úgy nézne ki, hogy a led library meghívása lenne időzítve a program végén, míg a renderelés lefut minden ciklusban.De nekem ez a megközelítés nem tetszik.
Ha meg a teljes futószalagot időzítem, akkor meg tudni kéne belépés előtt, hogy mennyi idő alatt fog lefutni, mert azzal az értékkel kell korrigálni a timer-t.
De időt mérni csak a végén tudok...
Szóval jelenleg még a tervezőasztalon sem tisztult ki a kép.Vmi olyasmin filózok, hogy az animáció sebességét függetleníteni kéne az fps-től ÉS a megjelenítés frekvenciájától is. Vagyis ha a teljesítmény skálázná a következő képkocka offset-jét. Pl. egy colorwheel esetén a függvény felbontását növelném két képkocka között, ha gyorsul a sebesség. Vagyis ha egy másodperc alatt ki tud tolni magából 60 fps-t a vas, akkor 100% mintavételezés volna, 120 fps-nél 200% mintavételezés a függvényen.
De az egyenletes megjelenítéshez itt is ismernem kéne a futószalag idejét belépés előtt. -
Teasüti
nagyúr
Uhm lehetséges átadni egy függvénynek egy változó azonosítóját, hogy aztán azzal a változóval számoljon?
Vmi ilyesmire gondolok:byte buffer1[] = {};
byte buffer2[] = {};
#DEFINE RED(x,i) x[i]
void fgv(magic) {
RED(magic, i) = akármi;
}
setup() {
fgv(buffer1);
fgv(buffer2);
} -
Teasüti
nagyúr
válasz
Janos250 #2942 üzenetére
Koncepció szintjén szerintem még mindig a két processzoros felállás a legegyszerűbb.
Könnyebb delay-jel beállítani az fps-t az egyiken, míg a másikon mehetnek az alacsony késleltetésű feladatok.
Lehet egy erős proci izomból leviszi a 25 ms-et mondjuk 5 ms-re, de még nem tudom mennyire lenne bonyolult belőni az fps-t delay nélkül.
Az egész "grafikus futószalagot" egy ciklusba kéne rakni, belépési feltételnek meg a timer?
Vagy mennyire bonyolult egyenletes megjelenítési sebességet tartani változó fps-el. Az se zavar, ha 40 helyett 200 fps van, ha nem gyorsul be a grafika (változó offset két képkocka között).
Hmm, ezzel a kísérlettel elleszek egy darabig. -
Teasüti
nagyúr
válasz
fpeter84 #2918 üzenetére
Ne is mondd, az időm 95%-a nettó szopórollerezés.
Ha már mikrokontroller...
Ti melyik irányba mennétek, ha a WS2812 többcsatornás vezérlése mellé meg kéne még oldani pár egyéb feladatot is, mint soros kommunikáció, input capture, alap I/O vezérlés?
Legyen két Uno I2C buszon összekötve master/slave módban? Ahol a slave egy amolyan koprocesszor szerepében kizárólag a ledekkel foglalkozik és a master-től kapja az utasításokat, miközben a master ráér foglalkozni minden mással.
Vagy legyen egy bika hardver, mint mondjuk a Due és az majd izomból megold mindent?Jelenleg az Uno a ledek renderelése közben épp elégséges sebességet produkál, a legizzasztóbb művelet (két függvény és a kettő közti átmenet /"képkocka") közben is megvan a 40 fps-em.
Persze ez csak szimuláció, 100 db virtuális leddel, egy csatornán... Azt még nem tudom mi lesz ebből, ha több független csatornát szeretnék renderelni.
Ha e mellé még extra feladatokat is szeretnék, akkor az azt jelenti, hogy 40 fps-nél 25 ms késleltetéssel számolhatok. Ezért filózok azon, hogy legyen koprocesszor. -
Teasüti
nagyúr
válasz
Teasüti #2914 üzenetére
Oké, user error.
Eleinte rögtön a byte-ként deklarált pufferbe raktam vissza a képlet eredményét, majd debuggoláskor a Serial.print-ben a puffer maradt benne, nem pedig az int temp.
Szóval jól számol a progi, csak a negatív számot mikor visszarakta a pufferbe, ott ment el az egész és én csak a legvégét láttam a monitorban.
A cast is működik, sőt megcsinálja cast nélkül is az int = byte - byte kivonást negatív eredménnyel hibátlanul.Hát ez jó lecke volt.
-
Teasüti
nagyúr
Byte 0..255 között vehet fel értéket; a light = analogRead(A0)/4.
Úgy érted, hogy nem előjeles, hogy a pl. a +25 értékről "nem tudja a fordító" hogy ez pozitív egész szám, cast ide vagy oda? Nem erre való a cast? Az implicit konverzió nem arról szól, hogy matekos analógiával élve egy értéket áthelyezek egy másik halmazba (pl egész számok halmaza -2^8 és 2^8 között) a számítás erejéig? Értem, hogy a motorháztető alatt konkrétan átkonvertálja a változót, de azt nem tudom pontosan hogy váltja át.Csak byte-ként deklarálhatom a buffer1 és 2 tömböket, mert a LED library csak bájtot fogad el.
-
Teasüti
nagyúr
Vmi gond van a cast-olással.
Tudna vki segíteni?int temp;
byte buffer1[] = {};
byte buffer2[] = {};
temp = (int)buffer2[i]-(int)buffer1[i];Ahol ha 0-ból kivonok mondjuk 25-öt, akkor 236-ot kapok -25 helyett.
Miért?
A cast-ot végigpróbáltam többféle változóval is, mint float, long, stb.
Az eredmény mindig hibás.szerk:
Ezt meg simán visszaadja a helyes egészrésszel cast nélkül...
buffer2[i] = buffer2[i]*light/255
Ahol byte light < 255.Korábban meg egy ugyanilyen képletben hibázott, mikor az osztó és osztandó fel volt cserélve, vagyis 255/int.
Lásd korábban.Megkockáztatom, hogy szar a fordító?
(Amúgy korábban az (int)byte nem működött. (uint16_t)byte már igen. Ez is kérdőjeles számomra...)
Így elég szar programozni, hogy alkotás helyett csak azzal szopok, hogy miért nem tud kiszámolni egy kib@szott képletet...
-
Teasüti
nagyúr
válasz
razorbenke92 #2894 üzenetére
Az a gond, hogy a byte az kellene a képletbe, mert nem deklarálhatom másként. Vagy erőforráspazarló módon át kéne másolnom másik változóba? Az egészrésznél nem is kell több. Sőt, az eredmény is elférne egy byte-ban, mert az osztó mindig nagyobb 255-nél.
Amúgy mit jelent, amit írtál?
Ez az (int)byte?Köszi!
-
Teasüti
nagyúr
Uhm, hol a probléma itt???
uint16_t = byte * 255 / int
Hibás eredményt kapok, még a long is átfordul tőle.
Kikisérleteztem, hogy a byte-ot legfeljebb 128-al szorozhatom, különben hibázik. Ebből nekem nem esik le a tantusz, szóval van vkinek vmi tippje?
Köszönöm! -
Teasüti
nagyúr
válasz
fpeter84 #2888 üzenetére
MPU 6050-nél én pl abszolút nem értem hogy kéne értelmezni a 6 tengelyes mérés kimenetét 3 darab értékkel, amit ad a DMP. Ha ezt elhelyezem egy koordinátarendszerben, akkor is csak egy vektort kapok 3 dimenzióban.
Amúgy nem értem miért jó a gyártónak a "discouragement policy", hogy nincs rendesen dokumentálva a DMP.
De mindegy is, nekem elég 1D a jármű gyorsulására, lassulására. Ezt váltaná ki az abs jeladó.
Lehetne vacakolni még dőlésszögekkel (motorról lesz szó amúgy), de nem én fogom újrafeltalálni az egykerekezés gátlót, vagy kanyar abs-t.Hardveresen lehet számolni mindkét megszakitót egymástól függetlenül?
SPI-nél akkor elméletileg nincs delay()?
I2C:
több eszköz összedrótozása akkor nem probléma?
Egy SI1145 fényérzékelőt viszont be szeretnék vetni.Az az asztal nagyon beteg!!
A hangot is a mikrokontroller dolgozza fel, vagy stream-elik az adatokat pc-ről?
Szeretnék hangérzékeny effekteket is majd. -
Teasüti
nagyúr
válasz
fpeter84 #2886 üzenetére
A BT csak számítógépes kommunikációra kell, nincs szükség master/slave csatornára.
Class 2 is elég belőle. Szal HC 5 és 6 megfelelő... Tele van vele az ebay, akkor ez pipa.I2C: első körben egy MPU 6050 gyro szenzor érdekel, de csak játszani. Ha működik a megszakítás (abs jeladót szeretném monitorozni), akkor nem lesz szükségem accelero-ra.
A lednél hogy érted azt, hogy az SPI levesz a hardver válláról?
WS2801 és 02 nem bit bang-gel működik?
Hmm, akkor talán utána kéne néznem az SPI-nek is, hogy miként lehet több eszközt használni róla.
Még az is lehet, hogy kevesebb porttal kijönnék 5 db ledszalag meghajtása esetén (mindegyik külön adattal természetesen).WS2812-nél én úgy tudom a 400 hz a PWM frekvencia. A komminukáció 400/800 Khz-en zajlik.
A másiknál a 20 KHz is PWM frekvenciát jelent. -
Teasüti
nagyúr
válasz
fpeter84 #2883 üzenetére
Usb kivezetés, breakout board. Mea culpa.
Bluetooth modulból melyik ajánlott?Illetve most ismerkedek az I2C adatbusszal, ehhez van esetleg vkinek egy jól bevált interface-e, ami nem shield?
Fizikailag akár légszerelve is össze lehet drótozni több eszközt az SDA/SDC portokra?
Jah és a lényeg: a WS2812 ledek vezérlése és UART (bluetooth kommunikáció) + I2C (szenzor adatok) + interrupt mennyire mission impossible?
A kódot még összerakom vhogy, csak hogy működni is tud a dolog?
A megszakítást csak számlálóként használnám, az se életbevágó probléma, ha addig nem számol, amíg a ledekre ír a program - tekintve, hogy addig kilövi a led library a megszakítást.A kacatokat köszönöm szépen, már megy is a kosárba!
-
Teasüti
nagyúr
válasz
fpeter84 #2875 üzenetére
Ohh erre nem is gondoltam, hogy PWM esetén áramból is a maximumot veszi fel. Akkor kár is fényerővel kalkulálnom, 60mA-rel kell méreteznem ledenként.
Adafruit Neopixel oldala szerint lehet számolni az átlaggal is, ha jól értelmeztem. :S
Már úton van egy 15A-es buck konverter, de az majd a járművön fog kelleni.Veszek szerintem egy usb breakboard-ot, vagy mit, aztán addig usb töltőről fog üzemelni. :-)
Új hozzászólás Aktív témák
Hirdetés
- Automata kávégépek
- CADA, Polymobil, és más építőkockák
- Bittorrent topik
- Formula-1
- Clair Obscur: Expedition 33 teszt
- AMD Ryzen 9 / 7 / 5 / 3 5***(X) "Zen 3" (AM4)
- CMF Phone 2 Pro - a százezer forintos kérdés
- TCL LCD és LED TV-k
- Samsung Galaxy A54 - türelemjáték
- sziku69: Fűzzük össze a szavakat :)
- További aktív témák...
- BESZÁMÍTÁS! 32GB (2x16) G.Skill Trident Z RGB 6600MHz DDR5 memória garanciával hibátlan működéssel
- www.LicencAruhaz.hu OLCSÓ & LEGÁLIS SZOFTVEREK 0-24 KÉZBESÍTÉSSEL - Windows - Office - ÖRÖK GARANCIA
- ÁRGARANCIA!Épített KomPhone Ryzen 7 5700X 16/32/64GB RAM RTX 4060Ti 8GB GAMER PC termékbeszámítással
- BenQ PD-3200-U Monitor - Designer 4K 32"
- Asus ROG G20AJ - Intel Core i7-4790, GTX 980
Állásajánlatok
Cég: Liszt Ferenc Zeneművészeti Egyetem
Város: Budapest
Cég: CAMERA-PRO Hungary Kft
Város: Budapest