Arduino - projekti, ideje, savjeti, problemi izdvojena tema

poruka: 1.365
|
čitano: 420.836
|
moderatori: DrNasty, pirat, XXX-Man, Lazarus Long, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Hvala, budem to uradio kad napravim još target mod(tj goal mod) jer moram redizajnirati ekran za to.

13 godina
odjavljen
offline
Arduino - projekti, ideje, savjeti, problemi

Jel ima funkcija s kojom mogu datum i vrijeme prebacit u unix?

 
0 0 hvala 0
13 godina
odjavljen
offline
Arduino - projekti, ideje, savjeti, problemi

Evo, optimizirao ja kod, i došao sam na ideju da promijenim malo load i save funkciju koja je imala hrpu koda.

I na kraju sam dobio ove rezultate

 

"OPTIMIZIRANI"
Sketch uses 27,142 bytes (88.4%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,754 bytes (85.6%) of dynamic memory, leaving 294 bytes for local variables. Maximum is 2,048 bytes.

ORIGINAL
Sketch uses 26,700 bytes (86.9%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,738 bytes (84.9%) of dynamic memory, leaving 310 bytes for local variables. Maximum is 2,048 bytes.

 

 

Sad mene zanima dali stvarno arrayi zauzimaju više ROMa i RAMa od običnih "single" varijabli?

Kod koji sam promijenio stavio sam dole.

mbaksa 

 

https://pastebin.com/TiF3Xfx8 - "Optimizirani"

https://pastebin.com/egKpdNDR - Originalni kod

 
0 0 hvala 0
16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Napravio sam mali test, znači kod: https://pastebin.com/yYcvQntg

 

U oba slučaja, znači kad se koriste individualne varijable i kad se koristi polje, zauzeće globalnih varijabli je identično - 157 bajtova. I to točno 8 bajtova više nego kad nema ni jedne od tih varijabli ni polja.

 

 

A sad, zašto ti imaš razliku? Možda is u poljima koristio veće tipove podataka za neke varijable nego kad si koristio individualne varijable, možda si neke privatne varijable izvukao van iz funkcija pa su one postale globalne. Istraži, usporedi.

15 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi
  1. uint32_t states[4] = {

  2.    1, // STATE_SCREEN_STATUS

  3.    0, // STATE_HEADLIGHT

  4.    0, // STATE_FOG_LIGHT

  5.    0 // STATE_SCREEN_INFO

  6. };

 

Cemu tu uint, pogotovo jos 32, tu je boolean dovoljan, odnosno byte posto nema razlike u memoriji

 

Na AVG statsima mozes ustediti memorije na nacin da ih racunas direktno kod ispisa, a ne za svaku imati varijablu(samo total/time).

Nemam bas previse vremena, ali ovo mi je upalo u oko brzinskim pregledom.

Poruka je uređivana zadnji put pon 27.11.2017 18:07 (CroNk3r).
Moj PC  
2 0 hvala 1
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Napravio sam mali test, znači kod: https://pastebin.com/yYcvQntg

 

U oba slučaja, znači kad se koriste individualne varijable i kad se koristi polje, zauzeće globalnih varijabli je identično - 157 bajtova. I to točno 8 bajtova više nego kad nema ni jedne od tih varijabli ni polja.

 

 

A sad, zašto ti imaš razliku? Možda is u poljima koristio veće tipove podataka za neke varijable nego kad si koristio individualne varijable, možda si neke privatne varijable izvukao van iz funkcija pa su one postale globalne. Istraži, usporedi.

 

Nisam dirao druge funkcije.

Malo sam guglao, kažu da array zauzima više jer sadrži pod varijable ili kako da to nazovem već.

 

 

CroNk3r kaže...
  1. uint32_t states[4] = {

  2.    1, // STATE_SCREEN_STATUS

  3.    0, // STATE_HEADLIGHT

  4.    0, // STATE_FOG_LIGHT

  5.    0 // STATE_SCREEN_INFO

  6. };

 

Cemu tu uint, pogotovo jos 32, tu je boolean dovoljan, odnosno byte posto nema razlike u memoriji

 

Na AVG statsima mozes ustediti memorije na nacin da ih racunas direktno kod ispisa, a ne za svaku imati varijablu(samo total/time).

Nemam bas previse vremena, ali ovo mi je upalo u oko brzinskim pregledom.

 

 

Ispravio sam to, i sad je razultat ovakav

 

Sketch uses 26,414 bytes (86.0%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,742 bytes (85.1%) of dynamic memory, leaving 306 bytes for local variables. Maximum is 2,048 bytes.

 

Uglavnom, hvala ti na prijavi, nisam vidio da sam slučajno tu upisao 4 bajtu varijablu.

Ova sitna razlika je vjerojatno zato što su neke varijable prije bile 16 bitne a sad su 32 bitne zbog arraya.

 

 

 

Zapravo, još sam se malo igrao haha

 

Sketch uses 26,214 bytes (85.3%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,738 bytes (84.9%) of dynamic memory, leaving 310 bytes for local variables. Maximum is 2,048 bytes.

Poruka je uređivana zadnji put pon 27.11.2017 19:08 (Dex.pwn).
16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...
Nisam dirao druge funkcije.

Nisi dirao druge funkcije, ali nam nisi dao ni sve bitno za prije/poslije (recimo u prije uopće ne vidimo stanja, odnosno kojeg su tipa), pa je na tebi da istražiž gdje se pogubila memorija.

 

Dex.pwn kaže...
Malo sam guglao, kažu da array zauzima više jer sadrži pod varijable ili kako da to nazovem već.

Ke?

 

Dex.pwn kaže...
Ispravio sam to, i sad je razultat ovakav

 

Sketch uses 26,414 bytes (86.0%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,742 bytes (85.1%) of dynamic memory, leaving 306 bytes for local variables. Maximum is 2,048 bytes.

 

Uglavnom, hvala ti na prijavi, nisam vidio da sam slučajno tu upisao 4 bajtu varijablu.

Ova sitna razlika je vjerojatno zato što su neke varijable prije bile 16 bitne a sad su 32 bitne zbog arraya.

Razlika ti je znači četiri bajta sad. Sam možeš utvrditi na čemu si to izgubio.

13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Vjerojatno je tako i za C++

https://stackoverflow.com/questions/14337685/php-many-variables-or-one-array

 

Sad je ovako

 

Sketch uses 26,214 bytes (85.3%) of program storage space. Maximum is 30,720 bytes.
Global variables use 1,738 bytes (84.9%) of dynamic memory, leaving 310 bytes for local variables. Maximum is 2,048 bytes.

16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Zašto vjerojatno? Pokazao sam ti kako je.

13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Jer sam taj link našao prije nego što si stavio taj test.

Uglavnom, kod sam optimizirao dodatno, dodao onda još neke stvari i sad sam pun.

ROMa imam nešto simbolično, a ako RAM pređe 90% krene ekran zezat.

Stoga ako netko zna neku pločicu dimenzija kao Arduino Nano(a da full radi s Arduinovim kodom), i da ima više od 32kB/2kB, neka napiše.

Imam još neke sitnice za optimizirat, no opet nije dovoljno. Odustao sam od jednog dijela zbog kojeg bi trebao napraviti dva dizajna ekrana, no onda bi nastali probleni zbog RAMa.

 

 

Jedino što sam vidio a da nije teški overkill je ova pločica

Po dimenzijama je nešto veća od Nanoa, jedini problem je taj što u specifikacijama ne piše dali ima EEPROM i koliko kB-ova

Također ni potrošnja ne piše.

https://store.arduino.cc/genuino-101

 

Također i ova bi mogla doći u obzir.

https://store.arduino.cc/arduino-mkrzero

Poruka je uređivana zadnji put uto 28.11.2017 18:39 (Dex.pwn).
16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Mislim da sam ti to već jednom navodio. Nemaš bezbolnih rješenja:

  • umjesto Adafruitovih grafičkih biblioteka koristiti u8g lib
  • koristiti Pri Micro (ima pola kilobajta RAM-a više od Nanoa) uz neki port ekspander (ima i verzija Pri Micra su više pinova, poput ove, samo što je bezvezno skupa), ili STM32 pločicu
  • dodati goli 328 čip, uz nekoliko popratnih komponenti, koji će ti služiti isključivo za ispis sadržaja na ekran
Poruka je uređivana zadnji put uto 28.11.2017 18:53 (mbaksa).
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Mislim da sam ti to već jednom navodio. Nemaš bezbolnih rješenja:

  • umjesto Adafruitovih grafičkih biblioteka koristiti u8g lib
  • koristiti Pri Micro (ima pola kilobajta RAM-a više od Nanoa) uz neki port ekspander (ima i verzija Pri Micra su više pinova, poput ove, samo što je bezvezno skupa), ili STM32 pločicu
  • dodati goli 328 čip, uz nekoliko popratnih komponenti, koji će ti služiti isključivo za ispis sadržaja na ekran

 

 

Najviše mi se sviđa opcija s promijenom GFX liba.

No, dal znaš koliko u8g lib koristi manje RAMa od Adafruitovog? 

Imam 2000 linija i ne bih želio prebacivati sve na taj lib a da ušteda ne bude značajna.

15 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...

Najviše mi se sviđa opcija s promijenom GFX liba.

No, dal znaš koliko u8g lib koristi manje RAMa od Adafruitovog? 

Imam 2000 linija i ne bih želio prebacivati sve na taj lib a da ušteda ne bude značajna.

Realno 2000 linija koda nije puno, a sad ovisno o strukturi tvojeg programa ovisi kolko ce ti trebati za zamjenu.

Ako je kod dobro strukturiran, to je jako malo posla.

Pod dobra struktura mislim ako nemas puno koda koji se ponavlja.

Jos jedna stvar je da nades zamjensku naredbu ili skup naredbi i onda samo vadis parametre iz starog koda i upisujes u novi.

 

Ja u slucajevima kad mi je kod neefikasan najcesce idem iz pocetka(jedino u vecim programima prvo lociras koji dio koda je neefikasan), kolko god on imao linija.

U takvim slucajevima jako pomaze dobar IDE s kvalitetnim dopunjavanjem.

Poruka je uređivana zadnji put uto 28.11.2017 21:31 (CroNk3r).
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Pogledao sam usporedbe na Youtubeu za ta dva liba, jeste Adafruitov sporiji u osvježavanju i koristi viša RAMa i ROMa, al zato ljepše izgleda.

Mislim da ću na kraju ostavit sve kako je.

16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Vidi što Austrijanci rade - mjere na kojoj udaljenosti automobili zaobilaze bicikliste. To je jedan od senzora koji bi možda i ti mogao dodati...

Poruka je uređivana zadnji put uto 28.11.2017 22:16 (mbaksa).
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Vidi što Austrijanci rade - mjere na kojoj udaljenosti automobili zaobilaze bicikliste. To je jedan od senzora koji bi možda i ti mogao dodati...

 

To mi je već prijatelj predložio, al nema se pinova ni ROMa.

A iskreno i ne znam di bi na ekran stavio tu informaciju

15 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

STM32 je pun pinova i memorije, a i procesorske snage.

Mozda uzeti ako ima neki malo veci ekran?

Nisam bas previse radio s OLEDima tako da ne znam dal postoji za prihvatljivu cijenu.

 

Ako trenutno imas 0.96, postoji 1.3 koji je osjetno veci:(samo je pitanje dal zbog rezolucije mozes smanjiti slova)

https://www.google.hr/search?q=1.3+oled+0.96&tbm=isch&source=iu&ictx=1&fir=xwLnaUk_F5h_zM%253A%252CjxUYB7Sd31f92M%252C_&usg=__8x19eirYQ8OFL4zVK6Rf0TchSwU%3D&sa=X&ved=0ahUKEwjQuYjpqOLXAhWB6qQKHcbdDJgQ9QEIJzAA#imgrc=JK1oVIHeTcGB5M:

a postoji i 2.42 koji je ogroman, ali je i 20ak dolara.

Poruka je uređivana zadnji put uto 28.11.2017 23:33 (CroNk3r).
Moj PC  
2 0 hvala 1
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
15 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Da, to je to.

Samo imaj na umu da ce ti trebati prvo jedan dan da si poslozis software i sve sitnice da ta plocica uopce proradi, ali kad proradi onda nema bolje za tu lovu.

14 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Dex.pwn kaže...

Stoga ako netko zna neku pločicu dimenzija kao Arduino Nano(a da full radi s Arduinovim kodom), i da ima više od 32kB/2kB, neka napiše.

Wemos mini sa ESP8266 12E modulom. 32 bitni procesor na 80 Mhz (ili 160 ako kloknes), 4 MB (megabajta) flasha, arduino kompatibilan

i radi na 3.3V kao i sva ostala elektronika, i najbitnije, ima WiFi.

 

Treba pazit samo sa ebaya, klon koji sam narucio imao je preslabo napajanje pa sam morao dodati linearni regulator na plocicu. Inace sve 5.

 

Poruka je uređivana zadnji put sri 29.11.2017 13:09 (Alkaline).
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Ne može na 5V?
13 godina
odjavljen
offline
Re: Arduino - projekti, ideje, savjeti, problemi
Ne odgovara mi, malo pinova ima..
14 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

5V tolerant je, ali sami čip radi na 3.3.

Malo pinova? Da, šteka na tom polju. Koliko ti GPIOa treba?

 

Osobno ga uparim sa golom 8Mhz atmegom8/328 gdje je esp mozak i mrežna komunikacija, a atmega mišići.

 

P.S. Izbaci ekran i šalji podatke na mob 

Poruka je uređivana zadnji put sri 29.11.2017 13:26 (Alkaline).
 
0 0 hvala 0
15 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Bok, narucio sam si arduino set za pocetnike, i sad isprobavam razne projekte, i imam jedan problem kojeg neznam riješiti. Naime imam zadatak da recimo ako se na jednom pinu ocita LOW stanje (ulaz), da ona pocne nekakav brojac brojati, recimo do dvije sekunde, i nakon toga ucini par naredbi, kako bi se to izvelo sa funkcijom milis(), ako moze da mi neko objasni. A ako nebude LOW stanje dovoljno dugo za tih 2 sekunde da se ponovo resetira i tako svaki put sve dok LOW nebude " sekunde i tad tekar ispuni ostale naredbe.

Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
dancy kaže...

Bok, narucio sam si arduino set za pocetnike, i sad isprobavam razne projekte, i imam jedan problem kojeg neznam riješiti. Naime imam zadatak da recimo ako se na jednom pinu ocita LOW stanje (ulaz), da ona pocne nekakav brojac brojati, recimo do dvije sekunde, i nakon toga ucini par naredbi, kako bi se to izvelo sa funkcijom milis(), ako moze da mi neko objasni. A ako nebude LOW stanje dovoljno dugo za tih 2 sekunde da se ponovo resetira i tako svaki put sve dok LOW nebude " sekunde i tad tekar ispuni ostale naredbe.

 

loop(){

  timer=millis():

  while(timer-millis()<2000){

   timer=millis();

   while(button==LOW){

   }

  }

//ostatak programa, program se izvrsava tek nakon sto pustis tipku

}

 

loop(){

  timer=millis():

  while(timer-millis()<2000){

   timer=millis();

   while(button==LOW){

     if(timer-millis()>2000){

       break;

     }

   }

  }

//ostatak programa, nastavlja se u trenutku kad je tipka pritisnuta tocno 2 sekunde

}

15 godina
neaktivan
offline
Arduino - projekti, ideje, savjeti, problemi

Hvala zasad, sutra cu valjda probati to pa javim reakcije

 

 

Neznam jesam dobro objasnil, znaci ako je low da mi pocne brojat, to znaci da kad je low i on broji i nakon 2 sekunde recimo i dalje je low, da mi nakon toga na neki pin posalje signal, znaci samo ako je na tom ulazu dvije sekunde low, tek tada da ide dalje sa programom

Poruka je uređivana zadnji put sub 30.12.2017 1:48 (dancy).
Moj PC  
0 0 hvala 0
16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Nisi ti to baš najbolje opisao. Rekao bih da drugi primjer kolege CroNk3ra odgovara onome što si tražio (kad bi se debuggirao). Na tragu tog primjera:

 

void loop(){

  unsigned long timer = millis();

  while(millis() - timer < 2000){
   if (digitalRead(pinButton)) timer = millis();
  }

  //ostatak programa, nastavlja se u trenutku kad je tipka pritisnuta tocno 2 sekunde
}

 

Poruka je uređivana zadnji put sub 30.12.2017 12:25 (mbaksa).
15 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Nisi ti to baš najbolje opisao. Rekao bih da drugi primjer kolege CroNk3ra odgovara onome što si tražio (kad bi se debuggirao). Na tragu tog primjera:

 

void loop(){

  unsigned long timer = millis();

  while(millis() - timer < 2000){
   if (digitalRead(pinButton)) timer = millis();
  }

  //ostatak programa, nastavlja se u trenutku kad je tipka pritisnuta tocno 2 sekunde
}

 

 Da mozda sam krivo opisal, ispricavam se.  Dakle probat cu još jednom, taj digitalni pin stalno ide iz HIGH u LOW, i sad sam za stanje HIGH postavio uvjet i program radi, eee sad glavnina je ta da pošto on prelazi iz HIGH u LOW stalno, program treba brojati vrijeme tek onda kada LOW stanje ostane, cilj je da se nakon sto LOW stanje ostane duze od 2 sekunde da se nakon toga ispuni daljnja radnja, ostatak programa, znaci prebacuje se svo vrijeme ali tajmer se svaki put resetira jel nije toliko dugo LOW stanje, nakon kaj prestane sa tim prebacivanjem i ostane u LOW, ako je to stanje duze od 2 sekunde tek nakon toga da nastavi program dalje. Jesam sad bio malo jasniji

16 godina
moderator
offline
Re: Arduino - projekti, ideje, savjeti, problemi

Znači:

1. Ulaz ti pliva između HIGH i LOW (zašto ne koristiš PULLUP otpornik pa bi ti ulaz bio po defaultu HIGH, kao što se to uobičajeno koristi s gumbima, pa ti ulaz ne bi plivao? znači, kod podešavanja pina u setupu umjesto INPUT staviš INPUT_PULLUP)

2. Kad stisneš gumb, on ulaz spoji na LOW

3. Program provjerava ulaz i ne pušta program dalje sve dok se gumb ne drži pritisnut dvije sekunde.

 

Jel to to? Moj program upravo to radi. Možda je malo teži za skužiti kako točno radi, ali upravo to radi - ne pušta dalje sve dok netko ne drži gumb pritisnut dvije sekunde. 

15 godina
neaktivan
offline
Re: Arduino - projekti, ideje, savjeti, problemi
mbaksa kaže...

Znači:

1. Ulaz ti pliva između HIGH i LOW (zašto ne koristiš PULLUP otpornik pa bi ti ulaz bio po defaultu HIGH, kao što se to uobičajeno koristi s gumbima, pa ti ulaz ne bi plivao? znači, kod podešavanja pina u setupu umjesto INPUT staviš INPUT_PULLUP)

2. Kad stisneš gumb, on ulaz spoji na LOW

3. Program provjerava ulaz i ne pušta program dalje sve dok se gumb ne drži pritisnut dvije sekunde.

 

Jel to to? Moj program upravo to radi. Možda je malo teži za skužiti kako točno radi, ali upravo to radi - ne pušta dalje sve dok netko ne drži gumb pritisnut dvije sekunde. 

 ne pliva, znam ja za pullup i pulldown otpornike, nije to kaj trazim, opisal sa gore

Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja)
Nova poruka
E-mail:
Lozinka:
 
vrh stranice