Arduino и Nintendo DS Touch Screen


Това е тъч скрийн панел, който е направен за конзолата Nintendo DS, но може да се използва с всеки LCD дисплей.

При допир панелът променя съпротивлението си за всяка ос. Ако се захрани с 5V на два от пиновете, при допир ще се промени и изходното напрежение за съответната ос. X и Y координатите на точката, в която е натиснат се получават чрез свързване на панела по две различни схеми.

За получаване на стойности по оста X, пин 4 се свързва към 5V, а пин 2 към маса. Пин 3 се свързва към аналогов вход на микроконтролер, който задава числена стойност на получения сигнал.

Стойностите по оста Y се получават като пин 1 се свързва към 5V, пин 3 към маса, а пин 4 към аналогов вход на микроконтролер.

Работата с лентовият кабел на панела е трудна за любители и затова от SparkFun са предвидили брейкаут борд с запоен за него конектор.

Пример

Даденият по-долу код получава X и Y координатите на точката, в която е натиснат панела и ги извежда в Serial Monitor. Координатите на точката в най-горния ляв ъгъл е 0,0 а на точката в най-долния десен ъгъл е 800,770.

Панелът се свързва с Arduino чрез брейкаут платката. Черната част на конектора леко се издърпва навън, лентовият кабел се поставя в него с пистите обърнати нагоре и се прибира за да захване кабела. За по-добър контакт, на гърба на лентовия кабел могат да залепят две лентички тиксо.

Брейкаут борда се закача към Arduino по следния начин:

 y1 -> A0
 x2 -> A1 
 y2 -> A2 
 x1 -> A3 

Кода който трябва да се зареди на Arduino е следният:

/*

 Описание:
 * Извежда в Serial Monitor координатите на точката,
 в която е докоснат тъч-скрийн панела за Nintendo DS. 


 Свързване:
 y1 -> A0
 x2 -> A1 
 y2 -> A2 
 x1 -> A3 

 Tihomir Trifonov (09-2011)
 email:tisho@inbox.com

 с подкрепата на Robotev.com

*/

//// Аналогови входове
int y1 = A0;
int x2 = A1; 
int y2 = A2; 
int x1 = A3; 

void setup() { // начални инициализации

  Serial.begin(9600); // започва серийна комуникация
} 

int readX(){// прочита X координата

  pinMode(y1, INPUT); // Y1 вход
  pinMode(x2, OUTPUT);// X2 изход
  pinMode(y2, INPUT); // Y2 вход
  pinMode(x1, OUTPUT);// X1 изход

  digitalWrite(x2, LOW);// GND 
  digitalWrite(x1, HIGH);// 5V

  delay(5); // изчаква 5ms 

  return analogRead(y1); // връща стойността за X
}

int readY(){// прочита Y координата

  pinMode(y1, OUTPUT); // Y1 изход
  pinMode(x2, INPUT);  // X2 вход
  pinMode(y2, OUTPUT); // Y2 изход 
  pinMode(x1, INPUT);  // X1 вход

  digitalWrite(y1, LOW); // GND
  digitalWrite(y2, HIGH);// 5V

  delay(5); // изчаква 5ms 

  return analogRead(x2); // връща стойността за Y
}

void loop()// програмен цикъл
{
  int x = readX();// чете X
  int y = readY();// чете Y

  if(x < 1000 & y < 1000){

    Serial.print("x: ");// извежда X
    Serial.print(x-100);
    Serial.print(" - y: ");// извежда Y
    Serial.println(y- 130);
  }

  delay(100); // 100ms закъснение
}

Ако при натиск в Serial Monitor не се изписва нищо, опитайте с другата страна на панела или проверете контакта на лентовия кабел с конектора.

Share