Touchscreen от Nintendo DS и Arduino

Внезапно заказал себе маленький тачскринчик от 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 комментария:

  1. или просто так, или потом для чего нибудь пригодиться... сначало тоже думал "зачем?", а сейчас думаю что неплохое управление будет у трикоптера, только еще одни тач надо докупить и совсем хорошо бы экранчик под него =)

    ОтветитьУдалить