prvo, kada stavljas source stavljaj ga u [ code ] tag tako da se sacuva tabulacija
drugo, nisi ti izleda savladao prve korake ..
svaki c/c++ program ima main funkciju koja je glavna funkcija u programu i koja poziva sve ostalo. kod arduino-a ona je sakrivena ali i dalje postoji i izgleda otprilike ovako:
Code:
int main(void){
init();
setup();
while (1) loop();
return 0;
}
init() funkcija je definisana u opisu hardwera i razlicita je u zavisnosti od toga sta odaberes kao board (kada pravis novi board ti moras da napises implementaciju za init) a od tebe kao arduino programera se ocekuje da implementiras setup() i loop(). setup ce biti (kao sto vidis u sorsu main-a) pozvan jednom i onda ce loop() biti pozivan u beskonacnoj petlji.
tvoj setup() deluje ok jedino ne kapiram cemu ti sluzi serial ovde posto ti za tvoj projekat i nije bas potreban no ne smeta
loop() funkcija kod tebe je malo nelogicna a kompletno sintaksno neispravna
Citat:
Code:
void loop() {
if (digitalRead (dugme) == HIGH);
x++;
{ if (digitalRead (dugme2) == HIGH);
y--;
Serial.println(x);
}
}
tackazarez posle if ce ti obezbediti da se NE DESI NISTA, potpuno je nebitno da li je high ili low ti neces uraditi nista. procitaj C/C++ sintaksu za IF. isti ti je problem u oba if-a (i za dugme i za dugme2).
stavljanje if dugme2 u dodatni blok je tek potpuno beskorisno, taj blok ne sluzi nicemu
i trece, cak i da se izbace ove sintaksne greske cemu ti sluzi Y ? povecavas X a smanjujes Y ?! valjda istu varijablu treba da povecas na jedno dugme a smanjis na drugo, a ne jednu povecavas a drugu smanjujes ...
i sad pazi trik pitanje, cemu sluzi start() funkcija?! ko je startuje? odakle? kada? cemu ?
ovo tvoje bi bilo zgodno odraditi sa interaptom, i to u interaptu citas tastere i u interaptu palis/gasis led .. al recimo da pisemo linearno za pocetnike to bi bilo nesto tipa
Code:
int led = 13;
int dugmeUpaljenoPlus = 12;
int dugmeUpaljenoMinus = 11;
int dugmeUgasenoPlus = 10;
int dugmeUgasenoMinus = 9;
int vremeUpaljeno;
int vremeUgaseno;
void setup() {
pinMode(dugme,INPUT);
pinMode(dugme2,INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
vreme = 0;
}
void loop() {
if (digitalRead (dugmeUpaljenoPlus ) == HIGH) vremeUpaljeno++;
if (digitalRead (dugmeUpaljenoMinus ) == HIGH) vremeUpaljeno--;
if (digitalRead (dugmeUgasenoPlus ) == HIGH) vremeUgaseno++;
if (digitalRead (dugmeUgasenoMinus ) == HIGH) vremeUgaseno--;
digitalWrite(led, HIGH);
delay(vremeUpaljeno);
digitalWrite(led, LOW);
delay(vremeUgaseno);
Serial.print("Upaljeno: ");
Serial.print(vremeUpaljeno);
Serial.print(" Ugaseno: ");
Serial.println(vremeUgaseno);
}
problem sa ovim pristupm je ako navrtis npr vreme na sekund, tek jednom u sekundi ce da ti dozvoli da promenis za 1 vreme ovo i ono .. dakle trebace ti cuku vremena da drzis dugme - da bi smanjio to sa 10sec recimo na 0.2sec ... zato rekoh bolje sa interaptom, tu ima sad druga, seljacka varijanta:
Code:
int led = 13;
int dugmeUpaljenoPlus = 12;
int dugmeUpaljenoMinus = 11;
int dugmeUgasenoPlus = 10;
int dugmeUgasenoMinus = 9;
int vremeUpaljeno;
int vremeUgaseno;
int i;
void setup() {
pinMode(dugme,INPUT);
pinMode(dugme2,INPUT);
pinMode(led, OUTPUT);
Serial.begin(9600);
vreme = 0;
}
void loop() {
digitalWrite(led, HIGH);
for (i=0;i<vremeUpaljeno;i++){
delay(1);
if (digitalRead (dugmeUpaljenoPlus ) == HIGH) vremeUpaljeno++;
if (digitalRead (dugmeUpaljenoMinus ) == HIGH) vremeUpaljeno--;
if (digitalRead (dugmeUgasenoPlus ) == HIGH) vremeUgaseno++;
if (digitalRead (dugmeUgasenoMinus ) == HIGH) vremeUgaseno--;
}
digitalWrite(led, LOW);
for (i=0;i<vremeUgaseno;i++){
delay(1);
if (digitalRead (dugmeUpaljenoPlus ) == HIGH) vremeUpaljeno++;
if (digitalRead (dugmeUpaljenoMinus ) == HIGH) vremeUpaljeno--;
if (digitalRead (dugmeUgasenoPlus ) == HIGH) vremeUgaseno++;
if (digitalRead (dugmeUgasenoMinus ) == HIGH) vremeUgaseno--;
}
Serial.print("Upaljeno: ");
Serial.print(vremeUpaljeno);
Serial.print(" Ugaseno: ");
Serial.println(vremeUgaseno);
}
ovde na seljacki nacin umesto da uradis delay od 100ms npr ti uradis 100 puta delay od 1ms i svaki put na svakih 1ms ti uradis proveru dal su stisnuti tasteri.
obrati paznju da i jedna i druga varijanta nisu 100% tacne, dakle vremena ce realno biti uvek nesto preko zadatog vremena, dakle ako ti zadas 10ms to nece biti 10ms nego 10ms + 10x vreme da se izvrsi pozivanje digitalRead() uporedi izlaz .. jedini nacin da nemas tu gresku je da imas interapte... no to ostavljam tebi da napises, od mene dosta