Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Arduino - tutorijali, pitanja, primjeri i projekti
Koju knjigu za C/C++ preporučujete za početnike,ako valja neka od ponuđenih od InfoElektronike ?
Reply
Mogu da preporucim jednu malo stariju knjigu koja vrlo sazeto opisuje stvari u vezi C-a (ne bavi sa C++), ima lep uvod oko osnovnih stvari (pravila i sintaksa) i posle se prelazi na PIC i neke konkretne stvari oko njega (pozajmio sam nekome moj primerak).
https://www.infoelektronika.net/knjiga-p...ntrolere-1
Na zalost rasprodata je ta knjiga ali @npejcic je bio ukljucuen oko te knjige, mozda ima negde PDF da podeli ...

Ima i ova:
https://www.infoelektronika.net/knjiga-p...ziku-c-193

I ova (tu imam evo prelistavam, nije losa)
https://cet.rs/proizvod/programski-jezik-c/
Reply
Da pitam i ja nesto uvezi ovog koda sa diodicama.Radi sve kako treba i posle par minuta diode pocnu da se pale bezveze,neke ostanu non stop upaljene i kad resetujem arduino ponovo radi normalno i onda pocne da se glupira.

int Pin;
int timer = 1000;
int ledPins[] = {4, 5, 6, 7, 8,0,};




int pinCount = sizeof(ledPins)/sizeof(int);

void setup() {

for (Pin = 0; Pin < pinCount; Pin++) {
pinMode(ledPins, OUTPUT);
}
}

void loop() {

for (Pin = 0; Pin < pinCount; Pin++) {

digitalWrite(ledPins[Pin], HIGH);
delay(timer);

digitalWrite(ledPins[Pin], LOW);
//delay(timer);
}


for (int Pin = pinCount; Pin >= 0; Pin--) {

digitalWrite(ledPins[Pin], HIGH);
delay(timer);

digitalWrite(ledPins[Pin], LOW);
//delay(timer);
}
Reply
(08-15-2021, 08:59 PM)MILANNN Wrote: Da pitam i ja nesto uvezi ovog koda sa diodicama.Radi sve kako treba i posle par minuta diode pocnu da se pale bezveze,neke ostanu non stop upaljene i kad resetujem arduino ponovo radi normalno i onda pocne da se glupira.

int Pin;
int timer = 1000;         
int ledPins[] = {4, 5, 6, 7, 8,0,}; 

int pinCount = sizeof(ledPins)/sizeof(int);

void setup() {

  for (Pin = 0; Pin < pinCount; Pin++) {
    pinMode(ledPins, OUTPUT);
  }
}

void loop() {

  for (Pin = 0; Pin < pinCount; Pin++) {
 
    digitalWrite(ledPins[Pin], HIGH);
    delay(timer);
 
    digitalWrite(ledPins[Pin], LOW);
  //delay(timer);
  }

  for (int Pin = pinCount; Pin >= 0; Pin--) {
 
    digitalWrite(ledPins[Pin], HIGH);
    delay(timer);
   
    digitalWrite(ledPins[Pin], LOW);
  //delay(timer);
  }

Ako zelis da svaki od tih pinova u nizu proglasis izlaznim (OUTPUT) onda umesto ovog :
Code:
for (Pin = 0; Pin < pinCount; Pin++) {
    pinMode(ledPins, OUTPUT);
  }

Treba da napisese ovako :
Code:
for (Pin = 0; Pin < pinCount; Pin++) {
   pinMode(ledPins[Pin], OUTPUT);
}

E sad da li je to izvor tvog problema ne znam ali svakako je greska.


p.s. ispravi i ovo :
Code:
int ledPins[] = {4, 5, 6, 7, 8,0,};

u ovo :
Code:
int ledPins[] = {4, 5, 6, 7, 8,0};


Mozda bi ovo moglo biti taj tvoj problem.
Reply
Probacu sutra.Uglavnom normalno radi par minuta i onda pocne da se glupira.Sutra cim stignem sposla izmenicu kod i probacu.
Reply
Nedostaje ti vitičasta zagrada na kraju loop()
Reply
(08-15-2021, 09:38 PM)me[R]a Wrote: p.s. ispravi i ovo :
Code:
int ledPins[] = {4, 5, 6, 7, 8,0,};

u ovo :
Code:
int ledPins[] = {4, 5, 6, 7, 8,0};


Mozda bi ovo moglo biti taj tvoj problem.

Tehnicki ovo nije greska, kompajler to sve skonta i optimizuje bez problema.
Postoje drugi rigorozniji profili za prevodioce gde se takve stvari trebaju poprave od stane korisnika ali za Arduino to nije problem, kod njih je malo "opustenija" situacija.
Reply
To sam i ja primetio jos sinoc medjutim ne verujem da je to u pitanju posto arduino IDE nece da kompajlira ako sintaksno nije ispravno. Bez te zagrade javlja gresku tako da verujem da ona fali samo kada je copy/paste ovde na forumu. Ono sto je @me[R]a korigovao bi trebalo da bude ono sto pravi problem, pogotovu deo oko definicije izlaznih pinova.
Linux is like a wigwam NO Windows NO Gates and an Apache inside
Reply
Nije dobar setup. Ovaj deo
Code:
pinMode(ledPins, OUTPUT);


Treba:

Code:
void setup() {


for (Pin = 0; Pin < pinCount; Pin++) {
pinMode(ledPins[Pin], OUTPUT);
}
}
Reply
Pisem sposla nabrzinu. Zaboravio sam da kazem, nekad diode svetle slabijim sjajem a nekad bljesne bas jako. Probacu sve sto ste mi napisali ali izgleda da je do pogresno definisanja činova. Desilo mi se nesto slicno zbog toga da umesto PWM koji treba da bude cetvrtke ja sam dobio jednu zaobljene ivicu.
Reply
(08-16-2021, 10:13 AM)mikikg Wrote:
(08-15-2021, 09:38 PM)me[R]a Wrote: p.s. ispravi i ovo :
Code:
int ledPins[] = {4, 5, 6, 7, 8,0,};

u ovo :
Code:
int ledPins[] = {4, 5, 6, 7, 8,0};


Mozda bi ovo moglo biti taj tvoj problem.

Tehnicki ovo nije greska, kompajler to sve skonta i optimizuje bez problema.
Postoje drugi rigorozniji profili za prevodioce gde se takve stvari trebaju poprave od stane korisnika ali za Arduino to nije problem, kod njih je malo "opustenija" situacija.

Jeste za arduino nije sintaksna greska ali po meni taj niz onda ima jedan element vise nego sto se ocekuje.
Reply
Kako god ...

[Image: attachment.php?aid=36186]


Attached Files Thumbnail(s)

Reply
(08-16-2021, 12:41 PM)MILANNN Wrote: ali izgleda da je do pogresno definisanja pinova.

O tome se radi.
Kad napišeš:

Code:
for (Pin = 0; Pin < pinCount; Pin++) {

pinMode(ledPins, OUTPUT);

}

Inicializovao si samo prvi član niza (pin 4) kao izlazni. Ostali su pinovi u default stanju nakon power up.

Ovo je ono što ti želiš:
Code:
for (Pin = 0; Pin < pinCount; Pin++) {

pinMode(ledPins[Pin], OUTPUT);

}
Reply
(08-16-2021, 01:47 PM)mikikg Wrote: Kako god ...

Da u pravu si.....

[Image: attachment.php?aid=36187]

Reply
Evo kako radi.Koliko sam ja razumeo ono sto sam citao niz se zaustavlja kad naidje na nulu,alp je nema ide dalje dok je ne nadje,mada sam ja nesiguran u sebe ali probao sam ovako int pinCount = 8; i deveti je nula gde staje sto mi bilo isto i ovako
int pinCount = sizeof(ledPins)/sizeof(int)-1; gde -1 zaustavi.Neznam koliko sam u pravu ali ovako radi bez greske.



int Pin = 0;
int timer = 200;
int ledPins[] = {5,6,7,8,9,10,11,12,0};

//int pinCount = 8;//----------------------------------------RADI OVAKO
int pinCount = sizeof(ledPins)/sizeof(int)-1;//------------------------------ I OVAKO

void setup() {

for (Pin = 0; Pin < pinCount; Pin++) {
pinMode(ledPins[Pin], OUTPUT); //---------------------------------------[Pin]
delay(1);
}
}

void loop() {

for (Pin = 0; Pin < pinCount; Pin++) {

digitalWrite(ledPins[Pin], HIGH);
delay(timer);

digitalWrite(ledPins[Pin], LOW);

}


for (int Pin = pinCount; Pin > 0; Pin--) {

digitalWrite(ledPins[Pin], HIGH);
delay(timer);

digitalWrite(ledPins[Pin], LOW);


}
}
Reply
(08-16-2021, 05:14 PM)MILANNN Wrote: Evo kako radi.Koliko sam ja razumeo ono sto sam citao niz se zaustavlja kad naidje na nulu,alp je nema ide dalje dok je ne nadje,mada sam ja nesiguran u sebe ali probao sam ovako  int pinCount = 8;  i deveti je nula gde staje sto mi bilo isto i ovako
int pinCount = sizeof(ledPins)/sizeof(int)-1;  gde -1 zaustavi.Neznam koliko sam u pravu ali ovako radi bez greske.



int Pin = 0;
int timer = 200;
int ledPins[] = {5,6,7,8,9,10,11,12,0};

//int pinCount = 8;//----------------------------------------RADI OVAKO
int pinCount = sizeof(ledPins)/sizeof(int)-1;//------------------------------ I OVAKO

void setup() {

for (Pin = 0; Pin < pinCount; Pin++) {
pinMode(ledPins[Pin], OUTPUT); //---------------------------------------[Pin]
delay(1);
}
}

void loop() {

for (Pin = 0; Pin < pinCount; Pin++) {

digitalWrite(ledPins[Pin], HIGH);
delay(timer);

digitalWrite(ledPins[Pin], LOW);

}


for (int Pin = pinCount; Pin > 0; Pin--) {

digitalWrite(ledPins[Pin], HIGH);
delay(timer);

digitalWrite(ledPins[Pin], LOW);


}
}

Sa ovim
Code:
int pinCount = sizeof(ledPins)/sizeof(int)-1;//------------------------------ I OVAKO

izbegavas tu 0 (nulu) koja je u zadnji element niza.

Ali ipak si ovo ispravio kako treba, a ja sam ti u prvom odgovoru to i napoemnuo kao mogucu gresku

Code:
for (Pin = 0; Pin < pinCount; Pin++) {
pinMode(ledPins[Pin], OUTPUT); //---------------------------------------[Pin]
delay(1);
}

p.s. u buduce deo koda treba staviti pod tagove "code /code" radi lakseg pracenja unutar poruke
Reply
Nisam ja neki poznavalac programiranja, samo mi je slucajno palo napamet da ovako - int pinCount = sizeof(ledPins)/sizeof(int)- neoduzima tu nulu pa ajde da probam sa - 1 i ispade da radi.
Reply
Pa sa tom aritmetickom operacijom int pinCount = sizeof(ledPins)/sizeof(int) ti ustvari odredjujes broj elemenata niza, koji je u tvom slucaju 9.

sizeof(int) odredjuje koliko zauzaima memorije jedan int i to je u c++  uvek 4 bajta, e sad posto ti imas niz koji je tipa int on u memoriji zauzima onoliko bajtova koliki je broj elemenata * 4 bajta i u tvom slucaju 9*4 = 36 bytes.  Sad  tom aritmet. op. pinCount = sizeof(ledPins)/sizeof(int) tj. 36/4 = 9 ti si ustvari odredio broj elemenata niza. Posto ga ti umanjujes sa -1 tada ce for petlja da cita samo prvih 8 elemenata tog niza tj. ta 0 (nula) kao zadnji element niza nece se uzimati u obradu u daljem delu programa...
Reply
Da tako ispada da se nula necita i ispade da radi bez greske.Koliko sam ja shvatio da bi se niz zaustavio treba da naidje na 0 da nebi produzio dalje,ovo-1 je izgleda to sprecilo.Stvarno neznam,slucajno mi je palo napamer i ispade da bez tog -1 program posle nekog vremena pocne da se glupira i proradi tek kad resetujem arduino.
Reply
Ako na pr stavimo int pinCount = 8; radi bez greske a ako uzmemo i nulu int pinCount = 9; onda ponovo isti slucaj sa greskom pa mi je tako palo napamet da probam sa -1
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)