Pull to refresh

Touchscreen от Nintendo DS и Arduino

Reading time 2 min
Views 10K
Внезапно заказал себе маленький тачскринчик от Nintendo DS и захотелось его подключить к Arduino, о том что же получилось…
touchscreen nds


Проблема


Первая же проблема — как подключить, так как разъема нет, выковырять такой неоткуда, а покупать дорого (около 4-5$, при цене экрана 2-3$). Итак, берем скальпель, лезвие или маленькие ножнички и аккуратно режем шлейф вдоль, после чего довольно легко можно подпаять проводки, главное изолировать их, например сделав так:
touchscreen nds


Подключение и программирование


Вольный перевод с форума Arduino:
Смотрим на экран так, чтобы шлейф был снизу справа, тогда контакты идут в следующем порядке:
TOP | LEFT | BOTTOM | RIGHT

Подсоединяем к Arduino

LEFT к цифровому выходу 2
BOTTOM к цифровому выходу 3
RIGHT к цифровому выходу 4
TOP к цифровому выходу 5

а так же подсоединяем 2 проводка к аналоговым входам:
TOP к аналоговому входу 3 (проводок от цифрового 5)
RIGHT к аналоговому входу 4 (проводок от цифрового 4)

touchscreen nds arduino


Скетч

Модифицированный код от Robin Whitfield и Marco Nicolato (код самого тачскрина)
#define Lo 2 // LEFT к цифровому выходу 2
#define Bo 3 // BOTTOM к цифровому выходу 3
#define Ro 4 // RIGHT к цифровому выходу 4
#define To 5 // TOP к цифровому выходу 5

#define Ti 3 // TOP к аналоговому входу 3 (проводок от цифрового 5)
#define Ri 4 // RIGHT к аналоговому входу 4 (проводок от цифрового 4)

// установим координаты прикосновения
int touchX = 0;
int touchY = 0;

void setup() {
Serial.begin(9600);
}

void loop() {
if (touched()) {
// выводим координаты в порт/консоль
Serial.print(touchX);
Serial.print(",");
Serial.print(touchY);
Serial.println();
delay(100);
}
}

boolean touched() {
boolean touch = false;
pinMode(Lo, OUTPUT);
digitalWrite(Lo, LOW);
pinMode(Ro, OUTPUT);
digitalWrite(Ro, HIGH);
pinMode(To, INPUT);
pinMode(Bo, INPUT);
delay(10);
touchX = analogRead(Ti);
pinMode(Bo, OUTPUT);
digitalWrite(Bo, LOW);
pinMode(To, OUTPUT);
digitalWrite(To, HIGH);
pinMode(Ro, INPUT);
pinMode(Lo, INPUT);
delay(10);
touchY = analogRead(Ri);
if(touchX < 1000 and touchX > 0 and touchY < 1000 and touchY > 0)
touch = true;
return touch;
}

Итог


В итоге после запуска в консоль/терминал/ваш_обработчик вываливаются координаты точки нажатия, погрешность +-2 точки, по обоим осям значение от 100 до 900, но видимо зависит от модельки экрана, на форумах пишут и от 0 до 1000, и от 200 до 500

UPD: tronixstuff.wordpress.com/2010/12/29/tutorial-arduino-and-the-ds-touch-screen — еще более простой вариант подключения
Tags:
Hubs:
+59
Comments 86
Comments Comments 86

Articles