Hi Leute,
ich habe hier folgendes Problem ich habe unter Arduino einen Attiny84 so programmiert, das er über einen simplen Schalter einen Interrupt auslöst.
Der Schalter wird nun geschlossen und geöffnet. Ich frage nur auf PinChange ab. Also beim Betätigen des Schalter wird der Interrupt gestartet.
Nun möchte ich gerne jeweils eine Ausgabe durch den Controller bekommen für folgende 2 Tätigkeiten:
- Der Schalter wird geöffnet und wieder geschlossen.
- Der Schalter wird nur geöffnet und bleibt offen stehen.
Problem dabei ist nun das der Schalter auch klappern kann, als relativ schnell auf und zu springen kann. Das soll durch den Controller nicht ausgewertet werden.
Ich habe dafür bisher folgenden Code unter Arduino geschrieben:
ISR (PCINT0_vect) {
volatile unsigned long now;
now = millis();
if (now < inttime) { return;}
inttime = now + 2000;
flag=1;
}
void setup() {
setPrescaler(0); // div 1, i.e. speed up to 8 MHz
delay(500);
ADCSRA &= ~ bit(ADEN); // disable the ADC
bitSet(PRR, PRADC); // power down the ADC
PRR = bit(PRTIM1) | bit(PRUSI) | bit(PRADC); // only keep timer 0 going
pinMode(DIO1, INPUT); //set the pin to input
digitalWrite(DIO1, HIGH); //use the internal pullup resistor
PCMSK0 |= (1<<PCINT2); // tell pin change mask to listen to (DIO1)
GIMSK |= (1<<PCIE0); // enable PCINT interrupt in the general interrupt mask
sei();
}
Der Rest des Codes ist unerheblich.
Wer hat da eine gute Idee wie man das Entprellen vernünftig wegbekommt?
Vielen Dank.
Gruß kami