Add calibration code
This commit is contained in:
parent
ed3c2a3c86
commit
0971859f46
|
@ -14,6 +14,18 @@ uint32_t read_capacitance(dio_t *dio) {
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint32_t calibrate(dio_t *dio) {
|
||||||
|
uint32_t max = 0;
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < 100; i++) {
|
||||||
|
uint8_t cap = read_capacitance(dio);
|
||||||
|
max = cap > max ? cap : max;
|
||||||
|
_delay_ms(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
return max;
|
||||||
|
}
|
||||||
|
|
||||||
int main(void) {
|
int main(void) {
|
||||||
dio_t sensor = (dio_t){ .ddr = &DDRB, .port = &PORTB, .pin = &PINB, .addr = 0 };
|
dio_t sensor = (dio_t){ .ddr = &DDRB, .port = &PORTB, .pin = &PINB, .addr = 0 };
|
||||||
display_t display = {
|
display_t display = {
|
||||||
|
@ -28,10 +40,6 @@ int main(void) {
|
||||||
display_enable(&display);
|
display_enable(&display);
|
||||||
display_clear(&display);
|
display_clear(&display);
|
||||||
|
|
||||||
display_set_location(&display, 0, 0);
|
|
||||||
display_write_message(&display, "Ready");
|
|
||||||
|
|
||||||
|
|
||||||
// calibration
|
// calibration
|
||||||
//
|
//
|
||||||
// 100 times:
|
// 100 times:
|
||||||
|
@ -51,12 +59,35 @@ int main(void) {
|
||||||
MCUCR |= _BV(PUD);
|
MCUCR |= _BV(PUD);
|
||||||
|
|
||||||
|
|
||||||
|
uint8_t calibration_countdown = 0;
|
||||||
|
uint32_t calibration = 0;
|
||||||
|
bool touch = false;
|
||||||
while (1) {
|
while (1) {
|
||||||
uint32_t cap = read_capacitance(&sensor);
|
if (calibration_countdown == 0 && !touch) {
|
||||||
|
calibration = calibrate(&sensor);
|
||||||
|
calibration_countdown = 100;
|
||||||
|
|
||||||
char msg[20];
|
char msg[20];
|
||||||
snprintf(msg, 20, "cap: %5ld", cap);
|
snprintf(msg, 20, "calib: %6ld", calibration);
|
||||||
display_set_location(&display, 1, 0);
|
display_set_location(&display, 0, 0);
|
||||||
display_write_message(&display, msg);
|
display_write_message(&display, msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t cap = read_capacitance(&sensor);
|
||||||
|
|
||||||
|
if (cap > calibration) {
|
||||||
|
display_set_location(&display, 1, 0);
|
||||||
|
display_write_message(&display, "touch!");
|
||||||
|
touch = true;
|
||||||
|
} else if (touch) {
|
||||||
|
display_set_location(&display, 1, 0);
|
||||||
|
display_write_message(&display, " ");
|
||||||
|
touch = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (calibration_countdown > 0) {
|
||||||
|
calibration_countdown--;
|
||||||
|
}
|
||||||
_delay_ms(100);
|
_delay_ms(100);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue