Добрый день.
Есть идея сделать контроллер для тач скрина из arduino (примерно так ).
Хочется просто получать координаты точки нажатия на панель.
Буду признателен за любую помощь или совет по реализации.
Интересует принципиальная схема подключения и алгоритм считывания координат.
01.04.2010, 20:24
Chip
Вложений: 1
Re: Arduino и тач скрин
Немного теории.
Когда на сенсорный экран нажимают, панель и мембрана замыкаются, и контроллер с помощью аналогово-цифрового преобразователя делает изменение сопротивления и преобразует его в координаты X и Y. Алгоритм считывания таков:
На верхний электрод подаётся логический уровень +5В, нижний подтягивается к земле. Левый с правым соединяются накоротко и проверяется напряжение на них. Это напряжение соответствует Y-координате экрана.
Аналогично на левый и правый электрод подаётся логический уровень +5В и «земля», а с верхнего и нижнего считывается X-координата. Вложение 8214
void loop() { pinMode(x1,OUTPUT); pinMode(x2,OUTPUT); digitalWrite(x1,LOW); digitalWrite(x2,HIGH); //подключаем к пластине Х напряжение +5в и GND digitalWrite(y1,LOW); digitalWrite(y2,LOW); //разряжаем емкость pinMode(y1,INPUT); pinMode(y2,INPUT); delay(10); x=analogRead(3); //считываем значение с пластины Х
pinMode(y1,OUTPUT); pinMode(y2,OUTPUT); digitalWrite(y1,LOW); digitalWrite(y2,HIGH); //подключаем к пластине У напряжение +5в и GND digitalWrite(x1,LOW); digitalWrite(x2,LOW); //разряжаем емкость pinMode(x1,INPUT); pinMode(x2,INPUT); delay(10); y=analogRead(0); //считываем значение с пластины У
if( x > 20 && y > 20 ) { bytes[0] = x & 255; // преобразовать x в 2-байта bytes[1] = (x & 768) >> 8; bytes[2] = y & 255; // преобразовать y в 2-байта bytes[3] = (y & 768) >> 8; Serial.write( bytes,4); oldX=x; oldY=y; } }
void loop() { pinMode(x1,OUTPUT); pinMode(x2,OUTPUT); digitalWrite(x1,LOW); digitalWrite(x2,HIGH); //подключаем к пластине Х напряжение +5в и GND digitalWrite(y1,LOW); digitalWrite(y2,LOW); //разряжаем емкость pinMode(y1,INPUT); pinMode(y2,INPUT); delay(10); x=analogRead(3); //считываем значение с пластины Х
pinMode(y1,OUTPUT); pinMode(y2,OUTPUT); digitalWrite(y1,LOW); digitalWrite(y2,HIGH); //подключаем к пластине У напряжение +5в и GND digitalWrite(x1,LOW); digitalWrite(x2,LOW); //разряжаем емкость pinMode(x1,INPUT); pinMode(x2,INPUT); delay(10); y=analogRead(0); //считываем значение с пластины У
if( x > 20 && y > 20 ) { Serial.print(x,DEC); Serial.print(","); Serial.println(y,DEC); oldX=x; oldY=y; } }
Тест работы Ардуино с тачь скрином можно посмотреть на видео.
Под рукой была Touch панель 10" , пришлось ее использовать для опытов :)
01.04.2010, 23:37
delach
Re: Arduino и Touch Screen
Эдуард, огромное спасибо за оперативный и развернутый ответ!
Все работает отлично :)
02.04.2010, 18:48
Chip
Re: TouchScreen контроллер на Arduino.
Подправил схему, код и выложил свое видео , теперь можно использовать вместо контроллера тачь панели :), быстродействия хватает, мышка бегает как настоящая :) Осталось реализовать нажатие правой кнопки и калибровку
04.04.2010, 00:25
delach
Re: TouchScreen контроллер на Arduino.
Здорово :) а чем была плоха схема с 4 резисторами по 10К? Я принципиальной разницы не заметил...
04.04.2010, 00:29
Chip
Re: TouchScreen контроллер на Arduino.
С двумя резисторами проще и линейность лучше
06.04.2010, 02:49
Chip
Re: TouchScreen контроллер на Arduino.
Написал драйвер Тача, теперь все отлично работает как настоящий Touch Screen. После калибровки требуется перезапуск.
06.04.2010, 03:58
xDriver
Re: TouchScreen контроллер на Arduino.
Ну Эдик, ты даешь !
Так скоро блок питания на Arduino появится :D
Молодец.
06.04.2010, 11:08
Chip
Re: TouchScreen контроллер на Arduino.
Я делал на нем ШИМ стабилизатор с обратной связью , но есть опасение что при неконтролируемых моментах(сброс) может полностью открытся ключь и тогда не стабиллизирование питание будет на выходе.