Elektronika - pitanja, odgovori, tutoriali izdvojena tema

poruka: 7.633
|
čitano: 2.110.660
|
moderatori: DrNasty, pirat, XXX-Man, vincimus
+/- sve poruke
ravni prikaz
starije poruke gore
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja), Best-buy oprema za samogradnju (DIY)
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali

U C++-u znači imaš funkciju int main().

 

U Arduinu nisam siguran da ta funkcija postoji, a ako postoji, onda je skrivena i onda ona radi nešto u ovom stilu:

 

 

int main() {

  setup();

 

  while (1) loop();

}

 

 

Napomena: nemam pojma je li to stvarno ovako, no po ponašanju Arduina definitivno jest nešto u tom stiliu.

14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Moguće, no Arduino se piše u C-u, slično je to.

Još da pitam Suma, ako ja napravim ovakav kod, dali će Arduino čekati 50, ili 150 ms?

 

void funkcija()
{
    delay(50);
}

void loop()
{
    funkcija();
    delay(100);
}

16 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali
Dex.pwn kaže...

Moguće, no Arduino se piše u C-u, slično je to.

Još da pitam Suma, ako ja napravim ovakav kod, dali će Arduino čekati 50, ili 150 ms?

 

void funkcija()
{
    delay(50);
}

void loop()
{
    funkcija();
    delay(100);
}

Pa 150 valjda... Prvo 50 u funkcija() i onda delay(100)...

Ovaj forumaš je netolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti ugnjetavana zbog svojih glupih mišljenja.
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
Dex.pwn kaže...

Moguće, no Arduino se piše u C-u, slično je to.

Valjam se od smijeha i plačem. 

 

Daj reci koji je li ovo C ili C++:

Serial.println("Ovo je C++");

14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Mislio sam da će 100 jer funkcija je void(nema povratne vrijednosti), onda valjda računalo neće čekati da se ta funkcija izvrši do kraja, već će ju pozvati, i nastaviti dalje odrađivati kod.

To će mi stvarati problem onda.

16 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Pa i loop() je void, jel to znači da se neće čekati do kraja da se izvrši?

 

Knjigu u ruke dečko... I prouči reference lib, nema puno za čitati...

Ovaj forumaš je netolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti ugnjetavana zbog svojih glupih mišljenja.
Poruka je uređivana zadnji put uto 30.8.2016 19:26 (Sum_of_all_fears).
14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Reko bi ga je C++, ne bih znao. Ništa takvo slično nismo u školi programirali. Negdje na YT-u sam čuo da je to C.

14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali
Sum_of_all_fears kaže...

Pa i loop() je void, jel to znači da se neće čekati do kraja da se izvrši?

 

Knjigu u ruke dečko...

 

Ovo mi se ne sviđa, jer ako budem kočio, i imao uključen žmigavac, nešto će lagati, biti će kašnjenje koda. Na koji najbolji način mogu odvojiti kodove tako da ne ovise jedan o drugome?

16 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Odvajaš pametnim strukturiranjem programa - za početak, složi hodogram što želiš da program radi.

Ovaj forumaš je netolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti ugnjetavana zbog svojih glupih mišljenja.
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
Dex.pwn kaže...

Reko bi ga je C++, ne bih znao.

Dobro bi rekao. C nema objekte, tj. "strukture" (klase) s funkcijama. Arduino je zapravo nešto između.

 

Dex.pwn kaže...

Negdje na YT-u sam čuo da je to C.

To si mogao čuti samo od nekoga tko ne zna razliku između C-a i C++-a.

16 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Čim postoje "objekti" tipa Serial.nešto() odmah je jasno da nije čisti C...

Ovaj forumaš je netolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti ugnjetavana zbog svojih glupih mišljenja.
14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali
Sum_of_all_fears kaže...

Odvajaš pametnim strukturiranjem programa - za početak, složi hodogram što želiš da program radi.

 

Primjer strukture? Znam ga linearno napraviti.

16 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

kaj ti to ozbiljno? napiši što program mora raditi prvo...

Ovaj forumaš je netolerantan prema osobama svih nacionalnosti, rasa i spolnog opredjeljenja te smatra da svaka osoba ima pravo biti ugnjetavana zbog svojih glupih mišljenja.
14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Budem napisao kod tokom narednih dana.

16 godina
offline
Elektronika - pitanja, odgovori, tutoriali

Delay je najgora stvar koju mozes raditi u bilo kojem programu, to je ko da na razini asemblera radis program koji vrti petlju NOP-ova da bezveze trosi vrijeme.

 

To se radi na nacin da brojis kolko ciklusa procesor odradi u jednom loopu i imas varijablu kojoj dodajes +1 svaki ciklus i na taj nacin preko frekvencije procesora i trajanja pojedine naredbe u ciklusima mozes zakljuciti koliko loopova ti je odredeno vrijeme. Na taj nacin mjeris proteklo vrijeme a da ne pauziras procesor.

 

Arduino mozda ima i neki internal timer, ali nisam siguran posto mi jos nije trebao.

 

Inace odi ili na codeacademy ili na youtube na thenewboston ili mybringback i tamo imas odlicne c+ tutoriale.

Kada prodes sve tutoriale i sve naucis onda tek mozes reci da mozda znas nesto malo programirat.

 

I nemoj misliti da ces nakon toga znati sve napamet, googlat ces svakih 5 minuta kod nekog projekta di programiras.

Moj PC  
3 0 hvala 1
14 godina
odjavljen
offline
Elektronika - pitanja, odgovori, tutoriali

Ovo mi je prvi Arduino projekat, bitno da šljaka.

Uostalom, što ne bi koristio delay kad mogu?

 
0 0 hvala 0
16 godina
neaktivan
offline
Elektronika - pitanja, odgovori, tutoriali

S obzirom da koristiš Arduino, njihove stranice imaju relevantnih informacija na tu temu:

https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

http://playground.arduino.cc/Code/AvoidDelay

Moj PC  
1 0 hvala 1
14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Hvala, mada mi nije jasno zašto ove varijable interval, i ledPin ne zamijene makro varijablama(#define LED_PIN 13)...

16 godina
offline
Elektronika - pitanja, odgovori, tutoriali

To su const varijable, znaci konstantne i nepromjenjive.

 

Znaci isto ko i define samo sto zauzimaju mjesto u memoriji ko varijabla, a ne ko define da ga compiler samo zamjeni.

Iz toga mozemo zakljuciti da je define bolj za memoriju, ALI s const varijablama je lakse baratati kad dodemo do problema, moze se lakse dekodirati greska u kodu jer compiler javlja gresku nad odredenom varijablom, a kod define je zbunjen i daje nejasan error message.

Poruka je uređivana zadnji put sri 31.8.2016 2:26 (CroNk3r).
Moj PC  
1 0 hvala 1
17 godina
neaktivan
offline
Elektronika - pitanja, odgovori, tutoriali

Arduino sketchevi koriste biblioteke koje su pisane u C ili C++. Za točan odgovor koristi li se C ili C++ bi trebao pogledati definiciju pojedine funkcije (npr. Serial.print() ) ali je apsolutno nebitno radi li se o C ili C++. Bitno je da znaš što koja funkcija u Arduino SDK radi i kako se koristi a kako se stvari odvijaju ispod haube je nebitno.

 

Inače se za programiranje mikrokontrolera generalno preferira koristiti C zato što se može na nižoj razini baratati s mikrokontrolerom. Objekti i klase mogu dodatno trošiti resurse mikrokontrolera kad se prevedu u strojni kod i C u tim situacijama nudi veću kontrolu od C++.

Do you understand life?! Do you?!
Moj PC  
2 0 hvala 1
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
CroNk3r kaže...

To su const varijable, znaci konstantne i nepromjenjive.

 

Znaci isto ko i define samo sto zauzimaju mjesto u memoriji ko varijabla, a ne ko define da ga compiler samo zamjeni.

Iz toga mozemo zakljuciti da je define bolj za memoriju, ALI s const varijablama je lakse baratati kad dodemo do problema, moze se lakse dekodirati greska u kodu jer compiler javlja gresku nad odredenom varijablom, a kod define je zbunjen i daje nejasan error message.

Shvaćam da misliš da bi to bilo logično, da bi to tako trebalo biti, ali provjeri u praksi pa ćeš se iznenaditi.  Kod primitivnih tipova nema razlike - znači, kompajler je dovoljno pametan da const int broj... i #define broj... interpretira isto. Razlika je recimo u "stringovima", znači nizu znakova, gdje će const char* zauzeti dva bajta više zbog pointera. LOL, zaboravio sam da se string može definirati i kao char rijec[] pa ni onda nema razlike.

 

No, kod konstantnih stringova je najbolje koristiti makro F() pa se onda sadržaj iščita iz EEPROM-a samo kad treb kod ispisa, znači tipa:

 Serial.println(F("Ovo ne zauzima mjesto u RAM-u")); Naime, ako ti misliš da #define rijec "Ovo ne zauzima mjesto u RAM-u?" ne zauzima mjesto u RAM-u, grdo si se prevario!

 

Dakle: probati, testirati, provjeriti, a ne se voditi da bi to trebao biti tako kako misliš da bi trebalo biti.

 

Poruka je uređivana zadnji put sri 31.8.2016 11:57 (mbaksa).
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
i_rambo_plache kaže...

Inače se za programiranje mikrokontrolera generalno preferira koristiti C zato što se može na nižoj razini baratati s mikrokontrolerom. Objekti i klase mogu dodatno trošiti resurse mikrokontrolera kad se prevedu u strojni kod i C u tim situacijama nudi veću kontrolu od C++.

U kom smislu "veću kontrolu"?

 

U većini slučajeva praktičnost i preglednost C++ koda uvelike premašuje marginalno veću zahtjevnost za resursima, pogotovo kad je riječ o platformi poput Arduina.

 

Da ne znam bolje rekao bih da preferenca za C kod drugih mikrokontrolerskih platformi dolazi kao posljedica neznanja C++-a, nevoljkosti da se istog nauči, predrasude da C++ nije za mikrokontrolere, defaultnost C kompajlera za platformu ili možda nepostojanje C++ kompajlera u defaultnom IDE-u ili tako nešto. Jasno je ako imaš situaciju da moraš brojati svaki bajt, ali ako nemaš, izbjegavanjem C++-a si više štetiš nego da imaš od toga koristi.

17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
Dex.pwn kaže...

Uostalom, što ne bi koristio delay kad mogu?

Delay je skoro kao GOTO naredba. To se ne koristi, a ako se koristi, onda za to treba postojati prokleto dobar razlog.

 

Dobro, s delayem je stvar malo blaža jer ga je nekad jednostavnije iskoristiti a da to nema neke posljedice, umjesto da ga se pokuša izbjeći. Evo recimo onaj programčić za moju kočnicu i žmigavce. 

https://codeshare.io/NKtuN

U njemu delay ne koristim za prevenciju duplih klikova na gumbe (debouncing), ali sam ga ipak iskoristio za sempliranje hall effect senzora, za uprosječivanje vrijednosti (riječ je o ukupnom delayu kraćem od 10 ms). Mogao sam i taj delay srediti tako da umjesto njega brojim iteracije pa onda radim prosjek, ali previše posla za praktički nikakav efekt. Međutim, da sam išao raditi biblioteku za hall effect senzor, onda ne bih koristio delay.

 

 

Proz0r kaže...

S obzirom da koristiš Arduino, njihove stranice imaju relevantnih informacija na tu temu:

https://www.arduino.cc/en/Tutorial/BlinkWithoutDelay

Jao, kak me ovakav kod ljuti... Ljudi koji ne razumiju neke od osnovnih stvari kod programirnja.

 

Kaže lik:

  // if the LED is off turn it on and vice-versa:
  if(ledState ==LOW){
    ledState =HIGH;
  }else{
    ledState =LOW;
  }

 

Zar nije jednostavnije napisati:

  ledState = !ledState;

 

Ne samo da je kod brži jer nema nepotrebne usporedbe, nego je i razumljiviji - invertiraj (obrni) vrijednost varijable ledState. Također, kakve su to usporedbe s konstantom if (LOW) (ili HIGH)? Tako nešto sam počeo viđati tek kod Arduinaša. Ne sjećam se da sam vidio da programeri na desktopu uspoređuju bool varijable ili izraze s false ili true. Ako ima koji, ima da se srami.  Što fali if (ledState) ili if (!ledState)? Umjesto if (ledState == HIGH) ili if (ledState == true) ili if (ledState == LOW) ili if (ledState == false). Nikad čuli za operator !?

 

Poruka je uređivana zadnji put sri 31.8.2016 13:12 (mbaksa).
16 godina
neaktivan
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Slažem se. No, (da se ogradim zašto sam ju uopće linkao ) oprimjeren je princip korištenja timera za postizanje neblokirajućeg ekvivalenta komande delay(), a i analogijom je na pristupačan način objašnjena svrha takvog pristupa što je zgodno za početnika poput Dexa. No, nažalost, loš je kod vrlo prisutan na hrpetini stranica što čini dvostruku štetu kada bi takve stranice trebale služiti kao resurse za početnike kojima su one često prvi dodir s programiranjem uopće. Dobra je ideja prvo proći kroz neki kvalitetan C++ materijal koji nije specifičan za mikrokontrolere što kasnije omogućava prepoznavanje lošeg koda i selektivno skupljanje informacija iz dostupnih resursa. O čemu je vrlo lako ovako filozofirati, no što je, naravno, mnogo teže u praksi zbog čega nije lako biti samouk. Vrlo interesantan resurs što se tiče programiranja mikrokontrolera je Hackaday serija članaka Embed with Elliot.

14 godina
odjavljen
offline
Re: Elektronika - pitanja, odgovori, tutoriali

Dosta radim u PAWN-u, tu i tamo u PHP-u, tako da mi C leži poprilično dobro. Možda mi je ovo prvi projekat s Arduinom, ali definitivno nisam početnik. Vidim podosta stvari koje bi mogao bolje odraditi.

12 godina
neaktivan
offline
Re: Elektronika - pitanja, odgovori, tutoriali
mbaksa kaže...
Dex.pwn kaže...

Moguće, no Arduino se piše u C-u, slično je to.

Valjam se od smijeha i plačem. 

 

Daj reci koji je li ovo C ili C++:

Serial.println("Ovo je C++");

Oprosti, ali upravljanje mosfetom direktno sa Arduina nije rješenje, a nije mi to smiješno...
Ne razumijem čemu smijeh. Ukoliko osoba ne zna, lijepo ga uputiš. Također nevezano na citat komentari kao nauči osnove programiranja su vam nepotrebni. Ako je svrha foruma da na nečije pitanje odgovorite linkom onda niti ne vidim poantu foruma.
Oprostite, ali vi koji se nazivate programeri koda ste programiranjem ovladali preko noći i potpuno sami pa sad da budem iskren pametujete kaj je C ili C++... Programiranje nije samo poznavanje C il C++ il nećeg drugog već i mogućnosti hardvera te ono bitno logike. C, C++ i sl. su samo alati (jezici) da bi si čovjek neke stvari olakšao.

Kod Arduina nije samo programiranje, treba poznavati i hardver. Također ako netko nije ovladao operatorima kao što je ! ne vidim probelm. Ako se dobro sjećam poanta Arduina je svakoga u što lakšem roku naućit napravit nešto svoje. A vjerujem da je početniku tako svejedno jel je upotrijebio if else ili !, kao što je nekima svejedno dal će upravljati mosfetom na pravilan naćin ili ne, ali oboje začudo radi (samo je pitanje kolko će dugo i ispravno raditi ovo drugo)...
 

17 godina
neaktivan
offline
Re: Elektronika - pitanja, odgovori, tutoriali
mbaksa kaže...
i_rambo_plache kaže...

Inače se za programiranje mikrokontrolera generalno preferira koristiti C zato što se može na nižoj razini baratati s mikrokontrolerom. Objekti i klase mogu dodatno trošiti resurse mikrokontrolera kad se prevedu u strojni kod i C u tim situacijama nudi veću kontrolu od C++.

U kom smislu "veću kontrolu"?

 

U većini slučajeva praktičnost i preglednost C++ koda uvelike premašuje marginalno veću zahtjevnost za resursima, pogotovo kad je riječ o platformi poput Arduina.

 

Da ne znam bolje rekao bih da preferenca za C kod drugih mikrokontrolerskih platformi dolazi kao posljedica neznanja C++-a, nevoljkosti da se istog nauči, predrasude da C++ nije za mikrokontrolere, defaultnost C kompajlera za platformu ili možda nepostojanje C++ kompajlera u defaultnom IDE-u ili tako nešto. Jasno je ako imaš situaciju da moraš brojati svaki bajt, ali ako nemaš, izbjegavanjem C++-a si više štetiš nego da imaš od toga koristi.

Ovisno o kompajleru, klase i objekti su definirani u nekom memorijskom području na mikrokontroleru. Korištenjem objekata je potrebno skakati na definiciju objekta i povećava se vrijeme izvođenja a i iskorištenost memorije. Za sitne stvari nema toliko utjecaja, ali za recimo signal processing radnje (čitaj: for petlje, množenje i zbrajanje), svaki ciklus je bitan, pogotovo ako se cilja na izvedbu u stvarnom vremenu.

 

Realno gledajući, Arduino je iznimka u svijetu mikrokontrolera. Generalno mikrokontroleri out of the box dolaze s bibliotekom funkcija, manualom kako ih koristiti i pozivati i SDK-om kojim se taj set funkcija kompajlira u strojni kod. Mikrokontroler se treba inicijalizirati od izvora signala takta (kojih ima više) do inicijalizacije potrebnih dijelova mikrokontrolera, dovođenja signala takta itd. Sve se to obavlja upisom bitova u registre i ništa od toga ne dolazi predinicijalizirano. Iako ajde, jedna od boljih strana je da za inicijalizacijski dio postoji GUI u kojem je potrebno samo upisati sve željene brojeve pa ide umjesto tebe u assembleru natipka kod.

 

Super je koristiti C++, naravno. Ali pitanje je kako iskoristiti C++ kad želiš ostvariti recimo CAN komunikaciju preko digitalnih pinova na Arduinu (ajmo reći da ne želiš koristiti shield koji već postoji jer naravno da postoji :D). U tom slučaju možeš uzeti datasheet CAN protokola, fino sve srediti i imaš CAN protokol ili možeš napraviti to isto i još dodatno napraviti klase, metode i objekte za daljnju uporabu. Filozofija Arduina je raditi ovo drugo, ali problem nastaje kad želiš prebaciti kod na drugu platformu ili kad napisani kod ne zadovoljava memorijska ili vremenska ograničenja. U tim slučajevima se treba spustiti do C razine.

 

Do you understand life?! Do you?!
Poruka je uređivana zadnji put sri 31.8.2016 16:53 (i_rambo_plache).
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
Maki.el kaže...

Ako ne misliš doprinositi raspravi, onda se ne moraš ni javljati na temu nepotrebnim "filozofiranjem".

 

Sve što sam napisao na ovoj temi, napisao sam s razlogom i ekipa s kojom komuniciram zna zašto sam napisao to što sam napisao. To što ti sad raspravu gledaš izvana, izvan konteksta, to je tvoj problem. Ako si se osjetio osobno povrijeđenim ili uvrijeđenim zbog nečeg što sam napisao, moj ti je savjet da umjesto da se uvrjeđuješ, da usvojiš to novo znanje pa se moja kritika više neće odnositi i na tebe.  Zar ćemo sad hodati po jajima da se neka nježna duša nedajbože ne bi osjetila povrijeđenom?

 

Poruka je uređivana zadnji put sri 31.8.2016 17:09 (mbaksa).
17 godina
moderator
online
Re: Elektronika - pitanja, odgovori, tutoriali
i_rambo_plache kaže...
Super je koristiti C++, naravno. Ali pitanje je kako iskoristiti C++ kad želiš ostvariti recimo CAN komunikaciju preko digitalnih pinova na Arduinu (ajmo reći da ne želiš koristiti shield koji već postoji jer naravno da postoji :D). U tom slučaju možeš uzeti datasheet CAN protokola, fino sve srediti i imaš CAN protokol ili možeš napraviti to isto i još dodatno napraviti klase, metode i objekte za daljnju uporabu. Filozofija Arduina je raditi ovo drugo, ali problem nastaje kad želiš prebaciti kod na drugu platformu ili kad napisani kod ne zadovoljava memorijska ili vremenska ograničenja. U tim slučajevima se treba spustiti do C razine. 

Ako je razlika u C-u i u krnjem Arduinovom C++-u dovoljna za to da program radi ili ne radi, znači da si gadno za*ebo stvar i odabrao krivi mikrokontroler. 

14 godina
odjavljen
offline
Elektronika - pitanja, odgovori, tutoriali

Dal meni Carina može sjesti za vrat zbog nekih djelova koje uzimam? Tipa multimeter, 30m žice, itd...?

 

 
0 0 hvala 0
Ova tema je sadržajno povezana sa sljedećim temama: Uvod u elektrotehniku (istosmjerna struja), Best-buy oprema za samogradnju (DIY)
E-mail:
Lozinka:
 
vrh stranice