95 lines
1.3 KiB
C
95 lines
1.3 KiB
C
/*
|
|
* touch.c
|
|
*
|
|
* Created on: 29.05.2009
|
|
* Author: sebastian
|
|
*/
|
|
|
|
#include "touch.h"
|
|
|
|
|
|
|
|
/**
|
|
* This functions set 5V to X1 and GND to Y1,
|
|
* the voltage at X2 is measured via the ADC.
|
|
* If the ADC-Value is less then TOUCH_PRESSED_LEVEL,
|
|
* the function will return 1.
|
|
* \return 1 if pressed else 0
|
|
*/
|
|
uint8_t touch_is_pressed() {
|
|
TOUCH_DDR |= (1 << TOUCH_X1);
|
|
TOUCH_DDR |= (1 << TOUCH_Y1);
|
|
TOUCH_DDR &= ~(1 << TOUCH_X2);
|
|
|
|
TOUCH_PORT &= ~(1 << TOUCH_Y1);
|
|
TOUCH_PORT |= (1 << TOUCH_X1);
|
|
|
|
if(readADC(TOUCH_X2) < TOUCH_PRESSED_LEVEL) {
|
|
return 1;
|
|
}
|
|
else {
|
|
return 0;
|
|
}
|
|
|
|
}
|
|
/**
|
|
*
|
|
*
|
|
*/
|
|
int16_t touch_readX() {
|
|
int16_t pos;
|
|
|
|
if(touch_is_pressed()) {
|
|
|
|
TOUCH_DDR |= (1 << TOUCH_X1);
|
|
TOUCH_DDR |= (1 << TOUCH_X2);
|
|
TOUCH_DDR &= ~(1 << TOUCH_Y1);
|
|
TOUCH_DDR &= ~(1 << TOUCH_Y2);
|
|
|
|
TOUCH_PORT &= ~(1 << TOUCH_X1);
|
|
TOUCH_PORT |= (1 << TOUCH_X2);
|
|
|
|
_delay_us(10);
|
|
|
|
pos = (readADC(TOUCH_Y1) - 263) * 16 / 53;
|
|
|
|
|
|
return pos;
|
|
|
|
|
|
}
|
|
else {
|
|
return -1;
|
|
}
|
|
|
|
}
|
|
|
|
|
|
int16_t touch_readY() {
|
|
int16_t pos;
|
|
|
|
if(touch_is_pressed()) {
|
|
|
|
TOUCH_DDR |= (1 << TOUCH_Y1);
|
|
TOUCH_DDR |= (1 << TOUCH_Y2);
|
|
TOUCH_DDR &= ~(1 << TOUCH_X1);
|
|
TOUCH_DDR &= ~(1 << TOUCH_X2);
|
|
|
|
TOUCH_PORT |= (1 << TOUCH_Y1);
|
|
TOUCH_PORT &= ~(1 << TOUCH_Y2);
|
|
|
|
_delay_us(10);
|
|
|
|
pos = (readADC(TOUCH_X1) - 330) * 8 / 40;
|
|
|
|
|
|
return pos;
|
|
|
|
|
|
}
|
|
else {
|
|
return -1;
|
|
}
|
|
|
|
}
|