01-26-2018, 12:57 PM
Probao sam i taj kod i on radi kako si opisao, samo čini mi se da će biti malo teže ispisati kombinacije komandi kad se tu doda 20-tak ulaznih tastera?
Da li bih trebao koristiti interrupt u kodu ili da ne koristim, mislim kolika je sigurnost od blokiranja MCU-a sem spoljašnjih smetnji, pretpostavljam da se malo poboljša rad sa interrupt-om, ili ipak griješim?
Dobro si pomenuo to kada nije aktivna ni jedna komanda da pošalje samo jednom "0", mislim da meni to ovde nije potrebno jer će se po završetku korištenja odmah gasiti daljinski.
Ja sam pokušavao ovako:
samo sam morao flag = false prebaciti u ISR jer ako ostavim da se poništava u "if" petlji onda dobijem blinkanje, a i delay(30) da usporim malo zbog slanja komande i onda radi kako treba bez kašnjenja, e sad koliko je ovo pouzdano, da se ne bi desilo blokiranje MCU-a (zbog koda) i da se mora trčati do centralne jedinice da se ugasi?
Što se tiče PCB-a, znači da koristim Megu i da izbjegnem ekspandere.?
Da li bih trebao koristiti interrupt u kodu ili da ne koristim, mislim kolika je sigurnost od blokiranja MCU-a sem spoljašnjih smetnji, pretpostavljam da se malo poboljša rad sa interrupt-om, ili ipak griješim?
Dobro si pomenuo to kada nije aktivna ni jedna komanda da pošalje samo jednom "0", mislim da meni to ovde nije potrebno jer će se po završetku korištenja odmah gasiti daljinski.
Ja sam pokušavao ovako:
Code:
int LED = 12;
int taster1 = 8;
int taster2 = 9;
unsigned char taster1test = 0;
unsigned char taster2test = 0;
boolean flag1 = false;
boolean flag2 = false;
void setup() {
pinMode(LED, OUTPUT);
pinMode(taster1, INPUT);
pinMode(taster2, INPUT);
Serial.begin(9600);
// initialize Timer1
noInterrupts(); // disable all interrupts
//cli();
TCCR1A = 0;
TCCR1B = 0;
TCNT1 = 62535;//49536;//62437;//34286; // preload timer 65536-16MHz/256/2Hz
TCCR1B |= (0 << CS10 ) | (0 << CS11) | (1 << CS12); //256
TIMSK1 |= (1 << TOIE1); // enable timer overflow interrupt
interrupts(); // enable all interrupts
//sei();
}
ISR(TIMER1_OVF_vect) // interrupt service routine that wraps a user defined function supplied by attachInterrupt
{
TCNT1 = 62535; // preload timer
if(digitalRead(8) == HIGH){
taster1test++;
if(taster1test > 3){
flag1 = true;
digitalWrite(LED, HIGH);
}
}
else{
taster1test = 0;
flag1 = false;
digitalWrite(LED, LOW);
}
if(digitalRead(9) == HIGH){
taster2test++;
if(taster2test > 3){
flag2 = true;
}
}
else{
taster2test = 0;
flag2 = false;
}
}
void loop() {
if(flag1){
digitalWrite(LED, HIGH);
Serial.println(1111);
}
else{
digitalWrite(LED, LOW);
Serial.println(0000);
}
if(flag2){
Serial.println(2222);
}
else{
Serial.println(3333);
}
delay(30);
}
Što se tiče PCB-a, znači da koristim Megu i da izbjegnem ekspandere.?