Hirdetés

2024. május 4., szombat

Gyorskeresés

Téma összefoglaló

Téma összefoglaló

  • Utoljára frissítve: 2023-03-11 00:46:52

LOGOUT.hu

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.

Összefoglaló kinyitása ▼

Hozzászólások

(#3201) Janos250 válasza Teasüti (#3199) üzenetére


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.

(#3202) Teasüti válasza Janos250 (#3201) üzenetére


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="&#x2713;" /></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">&lt;</span>Arduino.h<span class="pl-pds">&gt;</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">&lt;</span>avr/wdt.h<span class="pl-pds">&gt;</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="&#x2713;" /></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">&lt;</span>Arduino.h<span class="pl-pds">&gt;</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">&lt;</span>Arduino.h<span class="pl-pds">&gt;</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">&lt;</span>avr/wdt.h<span class="pl-pds">&gt;</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">&lt;</span>avr/wdt.h<span class="pl-pds">&gt;</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.

(#3203) Janos250 válasza Teasüti (#3202) üzenetére


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.

(#3204) Janos250 válasza Teasüti (#3202) üzenetére


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.

(#3205) Teasüti válasza Janos250 (#3203) üzenetére


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.

(#3206) Janos250 válasza Teasüti (#3205) üzenetére


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.

(#3207) Teasüti válasza Janos250 (#3206) üzenetére


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. :(

(#3208) Janos250 válasza Teasüti (#3207) üzenetére


Janos250
őstag

Nekem így néz ki (kép)

Én a portable verziót használom, Nálad ez a dokumentek között lesz.

Az amerikaiak $ milliókért fejlesztettek golyóstollat űrbéli használatra. Az oroszok ceruzát használnak. Én meg arduinot.

(#3209) Teasüti válasza Janos250 (#3208) üzenetére


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 ]

(#3210) mArZsi


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 ]

(#3211) Janos250 válasza Teasüti (#3209) üzenetére


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.

(#3212) Teasüti válasza mArZsi (#3210) üzenetére


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".

(#3213) Janos250 válasza Teasüti (#3209) üzenetére


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.

(#3214) DougButabi


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?

(#3215) Teasüti


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. :F

[ Szerkesztve ]

(#3216) Teasüti


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: :F
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. :R

[ Szerkesztve ]

(#3217) zka67 válasza Teasüti (#3216) üzenetére


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 ]

(#3218) Teasüti válasza zka67 (#3217) üzenetére


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. :N
Referenciaként használom, de ahhoz tudnom kell mit keressek. :B
De akkor most meglesem az SRAM működését. :R

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. :R
De azt a "8 bites tömböt" nem értem, amit írsz. :F
Ú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 (*).

(#3219) zka67 válasza Teasüti (#3218) üzenetére


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

(#3220) Teasüti válasza zka67 (#3219) üzenetére


Teasüti
nagyúr

Köszi a segítséget! :R
Bevallom a doksiban keresni eszembe se jutott első körben, csak miután rámutattál a dologra. :B
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: :C
#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);

}

(#3221) Teasüti


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 ]

(#3222) norbert1998


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.

(#3223) Teasüti


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?? :U
(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. :F

Erre esetleg van vkinek vmi ötlete? :R

[ Szerkesztve ]

(#3224) zka67 válasza Teasüti (#3223) üzenetére


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 ]

(#3225) Gergosz2 válasza Teasüti (#3223) üzenetére


Gergosz2
veterán

Egy kis késleltetést tegyél bele.

(#3222) norbert1998

Nem igazán értem a kérdést :F

[ Szerkesztve ]

Nokia 6030 Hardcore User // I Panic Restaurant by Taito

(#3226) norbert1998 válasza Gergosz2 (#3225) üzenetére


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.

(#3227) tvamos válasza norbert1998 (#3222) üzenetére


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

(#3228) norbert1998 válasza tvamos (#3227) üzenetére


norbert1998
veterán

Nem tudom mi a magyar neve :B
Cnc shield v3.0

(#3229) tvamos válasza norbert1998 (#3228) üzenetére


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

(#3230) norbert1998 válasza tvamos (#3229) üzenetére


norbert1998
veterán

Persze.

De megoldódott. Valamiért megszakadt a tápellátás vezetéke :Y

(#3231) Teasüti válasza zka67 (#3224) üzenetére


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. :F
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? :F

Amúgy egy delay(1) pl. nem segített a hibán a Serial.read() előtt. :(

[ Szerkesztve ]

(#3232) soldi3r válasza norbert1998 (#3222) üzenetére


soldi3r
veterán

Mekkora sebessegre es gyursulasra kepes? Max jittert lehet nezni? Mekkora frekin dolgozik?

E30 (oo=[][]=oo)

(#3233) norbert1998 válasza soldi3r (#3232) üzenetére


norbert1998
veterán

Tessék? :B miről van szó, egész pontosan?

(#3234) tvamos válasza Teasüti (#3231) üzenetére


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

(#3235) soldi3r válasza norbert1998 (#3233) üzenetére


soldi3r
veterán

A vezerlorol.

E30 (oo=[][]=oo)

(#3236) norbert1998 válasza soldi3r (#3235) üzenetére


norbert1998
veterán

Hát a leghalványabb gőzöm sincs :D

(#3237) Teasüti válasza tvamos (#3234) üzenetére


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. :F

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 ]

(#3238) hermit válasza hermit (#3172) üzenetére


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...

(#3239) norbert1998


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 :R

(#3240) soldi3r válasza norbert1998 (#3239) üzenetére


soldi3r
veterán

Azt lehet direkt a controllelre kotni, STEP/DIR-es.
(Meg 1 lepes es eljutunk a nyomtatoportig :) )

E30 (oo=[][]=oo)

(#3241) norbert1998 válasza soldi3r (#3240) üzenetére


norbert1998
veterán

Köszi :R

Milyen nyomtatóportig? (Vagyis, miért? )

(#3242) soldi3r válasza norbert1998 (#3241) üzenetére


soldi3r
veterán

Arrol lehet a legegyszerubben vezerelni a motorokat, pl. De ettol olcsobban is kaphato levalasztokartya.

[ Szerkesztve ]

E30 (oo=[][]=oo)

(#3243) norbert1998 válasza soldi3r (#3242) üzenetére


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.

(#3244) Daszkalosz19


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?

(#3245) Janos250 válasza Daszkalosz19 (#3244) üzenetére


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.

(#3246) Daszkalosz19 válasza Janos250 (#3245) üzenetére


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!

(#3247) kmisi99


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]

(#3248) Teasüti válasza kmisi99 (#3247) üzenetére


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 ]

(#3249) kmisi99 válasza Teasüti (#3248) üzenetére


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.

(#3250) Teasüti válasza kmisi99 (#3249) üzenetére


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 ]

Copyright © 2000-2024 PROHARDVER Informatikai Kft.