Yeah, I can use doublequotes, but I usually forget to do that. What will be the next great name? 'Arduino And'? 'Arduino The'? Or even better, 'Arduino Sex'? (Actually, that leads to interesting results in Google already). I am already pissed off with that misplaced connector problem (as I described few days ago), and I am more and more believing that those Italians should stick with what they do best (ice cream and pizza), and for gossake don't mess with electronics! (Just kidding, I still like Arduino).
Anyway. I spent a few hours adding button support, or better said debouncing, and using the button to switch between different screens on the display. I tried to use regular Bounce2 library, but that does not compile, and I didn't want to mess with the library. The easiest solution was to use my old debouncing code that also supports autorepeat. The code isn't mine, I found it years ago, and works like a treat. Just call this piece of code in regular intervals, like 10ms, and tweak the constants according to how often the code is being called.
#define DELAY_DEBOUNCE 10
#define DELAY_REPEAT_START 40
#define DELAY_REPEAT 25
void UpdateButtons (void) {GetButtons() returns what buttons are pressed in form of bitmap. Global variable Buttons contains a bitmap of pressed buttons. When you process particular button, clear the corresponding bit in Buttons. The constants above are fine when calling the function every 10ms.
static byte id = 0x00;
static word key_counter = 0;
byte c;
c = GetButtons ();
if (c == 0) { // No key pressed
id = 0;
key_counter = 0;
} else if (c != id) { // New key differs from previous one
id = c;
key_counter = 0;
} else { // New key is the same as previous
key_counter++;
}
if (key_counter == DELAY_DEBOUNCE) { // Debouncing complete
Buttons = id;
} else if (key_counter == DELAY_REPEAT_START) { // Repeated key
Buttons = id;
key_counter -= DELAY_REPEAT;
}
}
(I just looked up in my old sources that it's based on algorithm by guy KimmoHop from avrfreaks.org)
I reviewed the CR2032 node and noticed that there's a potential short circuit that might ground the analog input of the battery voltage measurement when wet. I fixed that, and will give it a try overnight. The voltage is 2890mV right now (it has changed a little after I cut the traces that were likely causing the problems, which suggests they actually had some conductance... or not?)
Žádné komentáře:
Okomentovat