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.
Gyorskeresés
Legfrissebb anyagok
- Bemutató Spyra: akkus, nagynyomású, automata vízipuska
- Bemutató Route 66 Chicagotól Los Angelesig 2. rész
- Helyszíni riport Alfa Giulia Q-val a Balaton Park Circiut-en
- Bemutató A használt VGA piac kincsei - Július I
- Bemutató Bakancslista: Route 66 Chicagotól Los Angelesig
Általános témák
LOGOUT.hu témák
- [Re:] [koxx:] Bloons TD5 - Tower Defense játék
- [Re:] [Luck Dragon:] Asszociációs játék. :)
- [Re:] [sziku69:] Szólánc.
- [Re:] [sziku69:] Fűzzük össze a szavakat :)
- [Re:] [attilasd:] A laposföld elmebaj: Vissza a jövőbe!
- [Re:] [gban:] Ingyen kellene, de tegnapra
- [Re:] [bb0t:] Gyilkos szénhidrátok, avagy hogyan fogytam önsanyargatás nélkül 16 kg-ot
- [Re:] Gurulunk, WAZE?!
- [Re:] [antikomcsi:] Való Világ: A piszkos 12 - VV12 - Való Világ 12
- [Re:] [ubyegon2:] Airfryer XL XXL forrólevegős sütő gyakorlati tanácsok, ötletek, receptek
Szakmai témák
PROHARDVER! témák
Mobilarena témák
IT café témák
Útvonal
Fórumok » Egyéb hardverek » Mikrokontrollerek Arduino környezetben (programozás, építés, tippek)Téma összefoglaló
Hozzászólások
Janos250
őstag
"Nem fordul le a példa program" Nekem lefordul.
Beállítottad fordítás előtt az Arduino panel típusát? Pl. UNO
A .h header fájlokat nem találja, vagy mit?
A könyvtárakat nem kell átírni, hanem használni.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Teasüti
nagyúr
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.
Janos250
őstag
A 302 az a C2h karakter (Â) kódja.
Nem tudni, hogy kerül az oda.
Nincs véletlenül magyar karakter valamelyik file, vagy könyvtár nevében?
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Janos250
őstag
A /267 meg a B7h karakter, ami egy vesszős nagy E, vagy hasonló.
Tippjeim:
1. kicsomagolási, másolási hiba a fájlban.
2. valami olyan szövegszerkesztővel szerkesztetted, ami az ASC karakterek mellé még valami berak.
Tehát a hiba azt jelzi, hogy nem ASC karakterek találhatók a fájlban.
Én nem látok az aplicationmonitor.h fájlban oda nem illő karaktereket.
Nálad valahogy nem jó ez a fájl.
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Teasüti
nagyúr
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.
Janos250
őstag
https://github.com/Megunolink/ArduinoCrashMonitor
[link]
clone or download - download zip
Én letölteném újra az egészet
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Teasüti
nagyúr
Letöltöttem, a .h és .ccp kimásolva. Ugyanaz a hiba.
Ha a zip-et csak kicsomagolom library könyvtárba a többi szeméttel együtt, úgy fel se ismeri az IDE. A zip könyvtár hozzáadása parancsra meg invalid library hibát kapok.
Janos250
őstag
Teasüti
nagyúr
Aha.
És hogy hívod be a random programba?
#include <ApplicationMonitor.h> esetleg?
Én library-k közé szerettem volna rakni, ahogy az látható az elérési útból is.
Az IDE legördülő menüjében is szerepel, ahogy kell.
Aztán az #include-ra dobja ezt a hibát.
[ Szerkesztve ]
mArZsi
tag
Üdv!
AccelStepper szakértő van itt?
Hogy lehet a library-val megcsinálni, hogy van 3 motor, ebből kettőt egy időben mozgatok, a harmadik várja meg míg befejezi a másik kettő és csak utána mozogjon?
Vagy egyszerre mennek, vagy sehogy...
[ Szerkesztve ]
Janos250
őstag
Én csak a Program.cpp programot hívtam be, és fordítottam, hogy megnézzem, mi nem működik. Az hívja az elején.
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
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".
Janos250
őstag
https://www.arduino.cc/en/Hacking/LibraryTutorial (a library készítést írja, de a végén az is le van írva, hova tedd, stb.)
[link]
https://www.arduino.cc/en/Guide/Libraries
[link]
aztán ha megnézel egy libraryt, látsz még benne ezt-azt.
library.properties néhány jellemző
keywords.txt itt adhatod meg, hogy miket milyen színnel jelöljön meg a keretprogram. "helyesírásellenőrzésre" jó
src könyvtárba kerülnek a .h és .cpp forrásfájlok
biztos még sokféleképpen jó, de így is működik.
[ Szerkesztve ]
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
DougButabi
tag
Sziasztok!
Ethernet Shield-el van problémám.
Ennél az utasításnál kifagy az uno-m, egyik ágba se fut bele, semmit nem ír ki, semmit nem csinál.
if (client.connect(server, 80)) {
Serial.println("connected");
} else {
Serial.println("connection failed");
}
A sima WebClient példafile sem megy, csak akkor, ha feltöltés után elveszem a tápot egy másodpercre az arduinotól. Akkor egyszer lefut, de többször nem.
Hardverhibára gyanakszom, van jobb ötletetek?
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 lockup
MÁ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.
[ Szerkesztve ]
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.
[ Szerkesztve ]
zka67
őstag
Szia, az uint8_t * nem 8 bites változót deklarál, hanem egy 8 bites tömböt, aminek a címe egy 16 bites érték.
Az Atmel AVR8 procikban a ram nem a 0-ás címtől kezdődik, hanem 256-tól, és a stack pointert a memória végére címzi, szóval stimmel a 2297-es érték. A memóriád utolsó bájtjának a címe = 256+2047.
Egyébként nem árt megismerkedni a procikkal, amikkel dolgoztok, azaz el lehet olvasni az adatlapjukat, minden fent van az atmel.com oldalán.
uint8_t *report = SP+1;
Ez visszaadja a stack utolsó elemét.
[ Szerkesztve ]
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 (*).
zka67
őstag
Szia, persze, én sem szoktam végigolvasni a több ezer oldalas doksikat, de amire szükségem van éppen, arra veszem a fáradtságot és átnyálazom alaposan, hogy melyik bit mit is csinál pontosan. Neked is csak rá kellett volna kattintanod az AVR CPU CORE -: STACK POINTER könyvjelzőre a doksiban, elolvasni, hogy hogyan működik és megnézni a hivatkozást az SRAM-ra, és máris tudtad volna, hogy miért nagyobb az SP értéke, mint a RAM mérete. Ezt nem bántásból írom, hanem a jövőre nézve adok tanácsot, sokkal gyorsabban megtalálod a doksikban amit keresel, mint ahogy itt válaszolnak neked. Utána úgyis megnézed a doksiban is azt, amit megnézhetnél kérdés nélkül is. De tényleg csak jószándékból írom ezeket.
De azt a "8 bites tömböt" nem értem, amit írsz.uint8_t tomb[2048]; // Ez egy 8 bites tomb
uint8_t *pTomb; // Ez pedig egy 8 bites tombre mutato pointer
Igen, a 8 bites tömb azt jelenti, hogy minden eleme egy bájtból áll.
Az utolsó elemének a címét pontosabban, nem
Mivel pointerként van deklarálva, ezért természetesen igen. Az elemet a * operátorral tudod elérni.
Üdv.
Zoli
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
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?
[ Szerkesztve ]
norbert1998
veterán
Üdv.
Adott egy uno, egy cnc pajzs és 1 drv8825 (van több is csak becsomagolva). Ki akartam próbálni, de egyszerűen nem jutok dűlőre.
Grbl 0.9j van rajta, universal sender és grbl controller egyaránt nem csinál semmi reakciót a gépen. 24v1a-t kap tápot, tudom hogy nudli, de meginditania kellene tudni.
2.8a a motor gyári értéke.
Mi lehet az ok?
Megpróbáltam tobbfelekepp a motor bekötését, de a sikereset még nem találtam meg.
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?
[ Szerkesztve ]
zka67
őstag
Szia, az adás és a vétel is ugyan azzal a sebességgel megy, ugye? Nos, amikor jön egy CR vagy egy LF karaktered, akkor te kiíratsz 3 karaktert. Amíg a programod azzal van elfoglalva, hogy megvárja amíg elküldi a 3 karaktert, ezalatt neked jöhet még 3 karaktered, amit nem tudsz kiolvasni, mert a programod épp mást csinál, és ezek a karakterek mennek a levesbe.
Többféle megoldást is tudok neked mondani, az első az, hogy amíg nem értél a vétel végére, addig ne írj semmit a soros portra. A második, használj megszakítást, írj saját rutinokat a küldés-fogadásra, címezd közvetlenül a regisztereket, azaz ne az előre megírt rutinokat használd.
Szerk: most látom, hogy println-t használsz, az még további két karakter jelent.
[ Szerkesztve ]
Gergosz2
veterán
Egy kis késleltetést tegyél bele.
(#3222) norbert1998
Nem igazán értem a kérdést
[ Szerkesztve ]
Nokia 6030 Hardcore User // I Panic Restaurant by Taito
norbert1998
veterán
Marmint mit fogalmaztam meg rosszul? Melyik részt?
Ki szeretnem próbálni a felsorolt dolgokkal a motort. Lehet, hogy az a baja, hogy csak 1A a tap? Attól még meg kellene mozdulnia nem? Vsgy legalabb remegni, vagy valami.
tvamos
nagyúr
Mi az a cnc pajzs?
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
norbert1998
veterán
Nem tudom mi a magyar neve
Cnc shield v3.0
tvamos
nagyúr
Pontosan hogy taplalod? Ugye az Arduinot usb-rol!
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
norbert1998
veterán
Persze.
De megoldódott. Valamiért megszakadt a tápellátás vezetéke
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.
[ Szerkesztve ]
soldi3r
veterán
Mekkora sebessegre es gyursulasra kepes? Max jittert lehet nezni? Mekkora frekin dolgozik?
E30 (oo=[][]=oo)
norbert1998
veterán
Tessék? miről van szó, egész pontosan?
tvamos
nagyúr
No, ez a 60 byte-os puffer nekem uj. El kell olvasnom a specifikaciot! Meg szerencse, hogy nem okoskodtam bele!
"Mindig a rossz győz, és a jó elnyeri méltó büntetését." Voga János
soldi3r
veterán
A vezerlorol.
E30 (oo=[][]=oo)
norbert1998
veterán
Hát a leghalványabb gőzöm sincs
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.
[ Szerkesztve ]
hermit
tag
Helyesen: ha rajt az ethernet, akkor NEM latszik a programjabol.
Ha ugy teszem ra ethernetet, hogy csak az egyik oldalon es kozepen erintkeznek labai, akkor elindul a mega.
Ha pedig ugy, hogy a masik olda es kozepen ernek hozza az ethernet labai, akkor csak a piros ledig jut el.
Nincs itt mega/uno tulaj Szhelyrol vagy a kornyekrol? Kivancsi lennek hogy egy masik eszkozzel is ezt csinalja-e az ethernet, vagy esetleg a megan rossz vmi...
norbert1998
veterán
A CNC shield ötletét elvetettem, kevés ide. Ingyen jött, megy a süllyesztőbe. TB6600 lesz helyette, viszont azt shield-re nem tudom kötni, a kérdésem az lenne, lehetséges lenne-e valahogy (nemigazán találtam róla infókat ) Xmax, Xmin, Ymax, Ymin, Zmax, Zmin érzékelőket kötni rá, hogy a GRBL homing cycle-je boldoguljon vele?
CNC shield-en voltak ilyenek, de anélkül, simán Arduino-val és TB6600-kkal, nem igazán tudom
Előre is köszi
soldi3r
veterán
Azt lehet direkt a controllelre kotni, STEP/DIR-es.
(Meg 1 lepes es eljutunk a nyomtatoportig )
E30 (oo=[][]=oo)
norbert1998
veterán
Köszi
Milyen nyomtatóportig? (Vagyis, miért? )
soldi3r
veterán
Arrol lehet a legegyszerubben vezerelni a motorokat, pl. De ettol olcsobban is kaphato levalasztokartya.
[ Szerkesztve ]
E30 (oo=[][]=oo)
norbert1998
veterán
Ja igen, erről lehet asszem komolyabbra, tényleg komoylan megoldani egy házi CNC-t, meg közvetlen mach-azást csinálni. majd lesz az is ha beválik az eddigi terv. de nem mostanában, az biztos.
Daszkalosz19
aktív tag
Sziasztok!
volna egy kis problémám. Van egy dht22 hőmérséklet és páratartalom érzékelőm,amit bekötöttem és egy programkódom hozzá. Tökéletesen működött tegnapig. Még el is volt mentve sketch-be
Arduino: 1.5.7 (Windows 8), Board: "Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
sketch_jun29a.ino:1:17: fatal error: dht.h: No such file or directory
compilation terminated.
This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Pedig a dht könyvtár benne van. Már újra telepítettem az arduino progit,de ugyan azt írja mindig
A programkód!#include <dht.h>
#define dataPin 8
dht DHT;
void setup () {
Serial.begin(9600);
}
void loop() {
int readData = DHT.read22 (dataPin);
float t = DHT.temperature;
float h = DHT.humidity;
Serial.print ("Temperature = ");
Serial.print (t);
Serial.print (" *C ");
Serial.print ( " Humidity = ");
Serial.print (h);
Serial.println (" % ");
delay (1000);
}
Valaki tud segíteni benne?
Janos250
őstag
"Show verbose output during compilation
enabled in File > Preferences."
Ha ezt bejelölöd, több mindent kiír, azt is, hogy hol keresi.
Ha nem ott, ahol van, akkor másold be oda (is)
Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.
Daszkalosz19
aktív tag
Köszi!
Letöltöttem más programkódot és azzal tökéletesen működik!
Csak azt nem értem,hogy az én kódom is működött rendesen,aztán egyik napról a másikra meg nem!
kmisi99
addikt
Heló! Nem tudom mennyire bonyolult a kérdésem, programozni nem tudok, csak letöltöttem a kódot és összeraktam a bluetoothos távirányítású autómat. Na most az a gondom, hogy a program úgy működik, hogy amint megnyomom pl az előre gombot akkor az addig megy előre míg nem nyomok meg egy másik irányt. Viszont én úgy szeretném, hogy ha elengedem a gombot akkor nem megy tovább.
Ez volna a kód. [link]
Teasüti
nagyúr
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.
[ Szerkesztve ]
kmisi99
addikt
Köszönöm a segítséget így valóban úgy funkcionál ahogy kell, viszont a delay-t egészen 20ms ig kellett emelnem, hogy egyáltalán bírjon gurulni normálisan, de így is nagyon darabos. A PWM értékeknél meg nem látok delay-t amit emelhetnék, van a végén egy ilyen delay(time_ms); meg egy ilyen, delay(delay_ms);
De ezekkel nem tudom mit kezdhetnék.
Teasüti
nagyúr
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.
[ Szerkesztve ]