Arduino: Button drücken wird nicht erkennt. Nur der Interrupt wird ausgelöst
hi,
ich habe hier einen attiny84 mit einem simplen taster dran:
http://www.mikrocontroller.net/wikifiles/8/8a/taster.gif
ich habe folgenden simplen code zum testen geschrieben und lasse mir das alles per serial ausgeben:
mein output in hterm sieht nun aus:
was mich nun stört ist das egal ob der schalter betätigt ist oder nicht er immer nur low ist und nie high ist. aber ich jeden interrupt auf dem pin angezeigt bekomme. mache ich falsch?
gruß kami83
ich habe hier einen attiny84 mit einem simplen taster dran:
http://www.mikrocontroller.net/wikifiles/8/8a/taster.gif
ich habe folgenden simplen code zum testen geschrieben und lasse mir das alles per serial ausgeben:
code: [select]
#include <jeelib.h>
#include <avr/sleep.h>
#include <avr/interrupt.h>
#define dio1 10 // d10
static void setprescaler (uint8_t mode) {
cli();
clkpr = bit(clkpce);
clkpr = mode;
sei();
}
int buttonstate = 0;
isr(wdt_vect) { sleepy::watchdogevent(); }
isr (pcint0_vect) {
serial.println("ubt");
}
void setup() {
setprescaler(0); // div 1, i.e. speed 8 mhz
serial.begin(38400);
serial.print("ack13 \n");
pinmode(dio1, input); //set pin input
pcmsk0 |= (1<<pcint2); // tell pin change mask listen (dio1)
digitalwrite(dio1, low);
gimsk |= (1<<pcie0); // enable pcint interrupt in general interrupt mask
//sei();
}
void loop() {
buttonstate = digitalread(dio1);
// check if pushbutton pressed.
// if is, buttonstate high:
if (buttonstate == high) {
// turn led on:
serial.print("1 \n");
}
else {
// turn led off:
serial.print("2 \n");
}
//serial.println(inttime);
delay (500);
}
mein output in hterm sieht nun aus:
code: [select]
ack13
2
2
2
2
2
2
uubt
bt
2
2
2
2
uuuuubtuubuuuuuuauubuuubt
bt
bt
t
bt
2
2
was mich nun stört ist das egal ob der schalter betätigt ist oder nicht er immer nur low ist und nie high ist. aber ich jeden interrupt auf dem pin angezeigt bekomme. mache ich falsch?
gruß kami83
du machst zwei fehler:
hier wartest du eine halbe sekunde. beim nichtstun wird ein tastendruck aber nicht erkannt.
die serielle schnittstelle in einem interrupt handler anzusprechen ist eine schlechte idee. während der ausführung des handlers sind die interrupts blockiert. falls der serielle puffer voll ist, blockiert serial.println() bis er wieder leer wird, aber nur geschehen kann, wenn der entsprechende interrupt ausgeführt wird. in diesem fall also: nie. => der arduino hängt für immer.
code: [select]
delay (500);
hier wartest du eine halbe sekunde. beim nichtstun wird ein tastendruck aber nicht erkannt.
code: [select]
isr (pcint0_vect) {
serial.println("ubt");
}
die serielle schnittstelle in einem interrupt handler anzusprechen ist eine schlechte idee. während der ausführung des handlers sind die interrupts blockiert. falls der serielle puffer voll ist, blockiert serial.println() bis er wieder leer wird, aber nur geschehen kann, wenn der entsprechende interrupt ausgeführt wird. in diesem fall also: nie. => der arduino hängt für immer.
Arduino Forum > International > Deutsch (Moderator: uwefed) > Arduino: Button drücken wird nicht erkennt. Nur der Interrupt wird ausgelöst
arduino
Comments
Post a Comment