Плата Arduino Rich Uno проявляет свои сильные стороны том, что содержит на борту различные датчики и модули. Это позволяет опционально подключать/отключать их по мере необходимости. В этот раз, наш тест будет задействовать тач панель из 4-х сенсорных контактных площадок(далее падов). Эти четыре пада, в дальнейшем можно использовать в качестве элементов управления, которыми можно настраивать, вводить, корректировать различные уставки и параметры в выполняемой контроллером программе. 

         Итак, чтобы освоить и понять как работает тач панель нужно провести два теста. В первом тесте, события нажатий(касаний) падов будут выводиться в монитор порта, это будет стандартный базовый тест, так сказать основа для построения будущих алгоритмов, использующих данные элементы управления. Второй тест, это усложненная версия первого теста, в нём события нажатий(касаний) падов будут уже выводиться на дисплей TM1637, входящий в состав оборудования, установленного на плате Arduino Rich Uno. Ну и конечно же, задействуя нужные модули, нужно не забывать про установку DIP переключателей. Это позволит избежать лишней траты времени на поиски возможных ошибок при тестировании. Что же, можно начинать, для начала установим DIP переключатели подключения всех 4-х контактных площадок тач панели в положение ON, вот так это выглядит:

 

 

         В первом тестовом скетче, как уже было сказано выводим касания падов в монитор порта. Этот тест удобен тем, что, вся его работа проходит как бы в отладочном режиме. Скетч можно просто скопировать из окна браузера, в окно среды разработки Arduino IDE.

#include "RichUNOTouchSensor.h"

#define TOUCH_PAD1 3
#define TOUCH_PAD2 4
#define TOUCH_PAD3 5
#define TOUCH_PAD4 6

/*Создаем объект Pad класса TouchSensor, указываем пины*/

/*к которым привязаны контактные площадки тач модуля*/

TouchSensor Pad(TOUCH_PAD1, TOUCH_PAD2, TOUCH_PAD3, TOUCH_PAD4);

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

void loop()
{
  /*Проверяем нажатие 1-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD1)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD1)
      Serial.println("Нажатие контактной площадки 1");
    while(Pad.get() == TOUCH_PAD1);
  }
  /*Проверяем нажатие 2-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD2)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD2)
      Serial.println("Нажатие контактной площадки 2");
    while(Pad.get() == TOUCH_PAD2);
  }
  /*Проверяем нажатие 3-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD3)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD3)
      Serial.println("Нажатие контактной площадки 3");
    while(Pad.get() == TOUCH_PAD3);
  }
  /*Проверяем нажатие 4-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD4)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD4)
      Serial.println("Нажатие контактной площадки 4");
    while(Pad.get() == TOUCH_PAD4);
  }
}

         Перед тем как начинать второй тест, нужно подключить модуль дисплея TM1637 при помощи той же группы DIP переключателей, как это выглядит, смотрите фото ниже:

 

 

         Второй тестовый скетч выводит события касаний на дисплей TM1637, причем нумерация падов тач панели напрямую взаимосвязана с нумерацией знакомест дисплея. То есть нажав на первый пад, на дисплее можно увидеть отрисовку цифры 1 в первом знакоместе(если считать слева). Нажав на второй пад, соответственно видим отрисовку цифры 2 во втором знакоместе дисплея и так далее. В скетче активно задействуется библиотека TimerOne.h, и это не просто так. После касания, первый таймер контроллера Atmega328 отсчиывает две секунды, прежде чем очистить и погасить дисплей. Получается первый таймер тактирует событие гашения и очистки дисплея, так, чтобы при тестировании дисплей постоянно обновлялся, делая тест наглядным. Использованию первого таймера(TimerOne) контроллера Atmega328 посвящена отдельная статья на нашем сайте. Ну и в конце статьи есть обзорное видео, в нём показано как работают эти два тестовых скетча. Ну а пока, тестовый скетч №2:

#include "TimerOne.h"
#include "RichUNOTouchSensor.h"
#include "RichUNOTM1637.h"

#define ON 1
#define OFF 0

/*Пин CLK модуля TM1637 подключен к пину D10 платы Rich Uno*/
#define CLK 10
/*Пин DIO модуля TM1637 подключен к пину D11 платы Rich Uno*/
#define DIO 11

TM1637 Display(CLK, DIO);

#define TOUCH_PAD1 3
#define TOUCH_PAD2 4
#define TOUCH_PAD3 5
#define TOUCH_PAD4 6

TouchSensor Pad(TOUCH_PAD1, TOUCH_PAD2, TOUCH_PAD3, TOUCH_PAD4);

/*Массив для вывода на дисплей*/
int8_t ListDisplay[4] = {0x7E, 0x7E, 0x7E, 0x7E};

/*Переменные для работы первого таймера*/
unsigned char halfsecond = 0;
unsigned char ClockPoint = 1;
unsigned char Update;

void setup()
{
  /*Инициализация дисплея*/
  Display.init();

  /*Запускаем тактирование первого таймера*/
  Timer1.initialize(500000);
  Timer1.attachInterrupt(TimingISR);
}

void loop()
{
  /*Каждые полсекунды обновляем дисплей*/
  if(Update == ON)
    DispUpdate();
  /*Проверяем нажатие 1-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD1)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD1)
    {
      ListDisplay[0] = 1;
      halfsecond = 0;
    }
    while(Pad.get() == TOUCH_PAD1);
  }
  /*Проверяем нажатие 2-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD2)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD2)
    {
      ListDisplay[1] = 2;
      halfsecond = 0;
    }
    while(Pad.get() == TOUCH_PAD2);
  }
  /*Проверяем нажатие 3-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD3)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD3)
    {
      ListDisplay[2] = 3;
      halfsecond = 0;
    }
    while(Pad.get() == TOUCH_PAD3);
  }
  /*Проверяем нажатие 4-й контактной площадки*/
  if(Pad.get() == TOUCH_PAD4)
  {
    delay(10);
    if(Pad.get() == TOUCH_PAD4)
    {
      ListDisplay[3] = 4;
      halfsecond = 0;
    }
    while(Pad.get() == TOUCH_PAD4);
  }
}

void DispUpdate()
{
  Display.display(ListDisplay);
  Update = OFF;
}

void TimingISR()
{
  halfsecond ++;
  Update = ON;
  if(halfsecond == 4)
  {
    halfsecond = 0;
    /*Если прошло две секунды - очищаем массив выводимый на дисплей*/
    for(int j = 0; j < 4; j ++)
      ListDisplay[j] = 0x7E;
  }
  ClockPoint = !ClockPoint;
}

         Все необходимые библиотеки для тестирования можно скачать по следующим ссылкам:

  Внимание, если возникают какие либо вопросы по принципам работы тестовых скетчей, вы можете напрямую задать их автору статьи на мейл Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.. Ну и как было обещано, обзорное видео по статье, всем приятного просмотра.