01-17-2018, 08:52 PM
(01-17-2018, 08:28 PM)Makso Wrote: @vojinilic
Da li si mislio na nešto ovako?
Code:int taster = 10; //taster
int tastertest; //promjenljiva za taster
void setup()
{
pinMode(taster, INPUT);
// initialize Timer1
noInterrupts(); // disable all interrupts
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 62437;
TCCR1B |= (0 << CS10 ) | (0 << CS11) | (1 << CS12); //256
TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt
interrupts(); // enable all interrupts
}
ISR(Timer1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt
{
TCNT1 = 62437; // preload timer
if(digitalRead(10) = HIGH){
tastertest++
if(tasterttest > 3){
//poruka koja se šalje kao komanda
}
}
else // !!!!if(digitalRead(10) == LOW){ !!!!
tastertest = 0;
}
}
void loop()
{
}
Makso,
to je interapt tmr debounce. Samo jedna mala ispravka. Pogleda u kodu. Prvo ispitujes da li je taster pritisnut i ako jeste, onda inkrementiras brojac. Posle toga ispitujes da li je taster otpusten preko if. Nemoj tako, nego samo ubaci else. I zaboravio si da inicijalizujes promenljivu tastertest na nulu.
Jos jedan savet. Posto sada prelazis na ozbiljniji nivo programiranja, evo jos par saveta koji mozda sada ovde nisu bitni, ali ce u kompleksnijim projektima svakako da ti pomognu.
Ti si definisao dve promenljive taster i tastertest. Obe promenljive su tipa int, tj. zauzimaju po dva bajta. Tebi je max vrednost promenljive tastertest 3, sto znaci da je dovoljno da promenljiva bude tipa unsigned char. Ista je prica i za promeljnivu taster.
Takodje si postavio da je promenljiva int, sto znaci da da njena vrednost moze da se krece od -32768 - +32767 (ove granice pisem iz glave. Zbir treba da bude 65535.). Problem moze da bude sledeci. Ako npr. definises promenljivu tipa int, kao npr int Brojac = 0. I u svakom interaptu je povecas za 1 i ispitujes da li je ona veca od 40000. Ako jeste onda nesto uradi. Evo primer:
int Brojac = 0;
isr TMR()
{
Brojac++;
if(Brojac > 40000)
{// Ovde se onda radi neka logika
}
}
Progrma nikada nece da izvrsi deo koda u if-u. To je zbog toga jer je promeljniva oznacena, tj. kada predje onih 32767, onda na sledeci inkrement ona dobija vrednost -1. Zbog toga se mora voditi racuna i o tome, tj. da li neka promeljniva treba da bude oznacena ili neoznacena.
Nastavi samo dalje i pitaj sta god treba.
Samo napred.