Сенсорная клавиатура TTP 229 мультитач

saleksey
Offline
Зарегистрирован: 11.02.2017

Может быть это уже никому не интересно и давно разжевано, но я не нашел готового решения опроса клавиатуры с контролем мультитача поэтому решил допилить то что есть.

/* 
Скетч опроса кнопок сенсорной клавиатуры TTP229 с поддержкой мультитача - можно нажать сразу все 16. Используется опрос по I2C

стоят перемычки: TP2(если замкнута то используются все 16 кнопок), TP3, TP4(если замкнуты все кнопки в мультитаче)

Keypad......Arduino
VCC.........+5V
GND.........GND
SCL.........Digital pin 2
SDO.........Digital pin 3

THIS SOFTWARE IS PROVIDED "AS IS". HOBBY COMPONENTS MAKES NO WARRANTIES, 
WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING, BUT NOT LIMITED TO, IMPLIED 
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, ACCURACY OR
LACK OF NEGLIGENCE. HOBBY COMPONENTS SHALL NOT, IN ANY CIRCUMSTANCES, BE LIABLE
FOR ANY DAMAGES INCLUDING, BUT NOT LIMITED TO, SPECIAL, INCIDENTAL OR 
CONSEQUENTIAL DAMAGES FOR ANY REASON WHATSOEVER. 

PS: За основу использован скетч http://forum.hobbycomponents.com/viewtopic.php?f=73&t=1781&hilit=hcmodu0079
*/



// устанавливаем пины I2C
#define SCL_PIN 2
#define SDO_PIN 3

//массив для считанных кнопок
boolean K[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};

void setup()
{
  //инициализируем передачу по СОМ порту
  Serial.begin(9600);
  //Конфигурируем порты SCL и SDO
  pinMode(SCL_PIN, OUTPUT);  
  pinMode(SDO_PIN, INPUT); 
}


//Бесконечный цыкл
void loop()
{
  //запускаем процедуру опроса кнопок
  Read_Keypad();
  
  //Выводим в СОМ порт полученный массив
  for (int i=0; i<=15; i++)
      Serial.print(K[i]);
  Serial.print('\n');
  /* Wait a little before reading again 
     so not to flood the serial port*/
  //delay(100);
}


//Процедура считывания кнопок
byte Read_Keypad(void)
{
  byte Count;
  
  //Обнуляем массив для следующего считывания
  for (int i=1; i<=16; i++)
    K[i] = false;
  //Устанавливаем низкий уровень на тактирующем пине SCL и считываем значение на дата SDO для всех 16 кнопок
  for(Count = 0; Count <= 15; Count++)
  {
    digitalWrite(SCL_PIN, LOW); 
    
    
    //Если дата пин SDO в низком уровне кнопка №Count нажата, пишем в массив
    if (!digitalRead(SDO_PIN))
      K[Count] = true;
    digitalWrite(SCL_PIN, HIGH);
  }
  return K[Count]; 
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

молодец

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

Я не знаю, писать про пирожок или нет ?