Урок №11 Управление светодиодом сенсорной кнопкой.
В данном уроке мы научимся соединять исполнитель (светодиод на плате) и датчик ( емкостной датчик касания).
Что нам понадобится?
Достаньте и подготовьте необходимые детали из коробки.
Arduino Uno
Мозг нашей схемы
Популярный микроконтроллер, его мощности достаточно пока нам для начальных экспериментов
Светодиод
Любого цвета
Длинная ножка на положительно заряженный, короткая на отрицательно
Макетная плата
на 400 точек
Соединения идут параллельно, плата разделена на 2 части горизонтальной линией
Резистор
На 10 кОм
О резисторах подробно мы подробно поговорим чуть ниже в разделе "Базовые знания"
1. Соединяем GND с минусами

2. 5V с плюсами

3. GND на датчике соединяем с минусом на макетной плате

4. VCC ( от фр. Volt en courant continu - вольт постоянного тока ) соединяем с плюсом

5. SIG (Signal) или I\O ( англ. Input/output - ввода-вывода) соединяем с платой в пине № 21 ( это последний пин по верхней части, на схеме немного неверно указано)

Освежите свои знания и просмотрите еще раз урок 3 и урок 9 в них описана работа светодиода и датчика касания, которую мы сегодня будем использовать как кнопку.

И кнопка, и плата ESP32 поставляются в комплекте с контактами, которые надо спаять самостоятельно. Как это делать вы можете посмотреть видео на StemKit.kz



Код
* 3 урок. Сенсорная кнопка. 
 * Включаем и выключаем светодиод через сенсорную кнопку и вывод на экран

#include "SSD1306.h" 
#define SDA_PIN 4// GPIO4 -> SDA
#define SCL_PIN 15// GPIO15 -> SCL
#define SSD_ADDRESS 0x3c
SSD1306  display(SSD_ADDRESS, SDA_PIN, SCL_PIN);

#define ctsPin 21 // пин для емкостного датчика касания ttp223

int ledPin = 2; // пин для светодиода

void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);
  pinMode(ctsPin, INPUT);

  /*Настройка и включение экрана*/
  pinMode(16,OUTPUT); 
  digitalWrite(16, LOW);    
  delay(50); 
  digitalWrite(16, HIGH); 
  display.init();
  display.flipScreenVertically();
  display.setTextAlignment(TEXT_ALIGN_LEFT);
  display.setFont(ArialMT_Plain_10); // установка шрифта варианты 10, 16, 24
  /*---------------------------*/
}

void loop() {
  int ctsValue = digitalRead(ctsPin);
  if (ctsValue == HIGH){
    display.clear();   // Очистка дисплея
    display.drawString(0, 0,  "Led ON");
    display.display();   // Отображение данных на экрaне из буфера
    digitalWrite(ledPin, HIGH);
    Serial.println("TOUCHED");
  } else{
    display.clear();   // Очистка дисплея
    display.drawString(0, 0,  "Led OFF");
    display.display();   // Отображение данных на экране из буфера
    digitalWrite(ledPin,LOW);
    Serial.println("not touched");
  }
delay(10);
}
Программирование
Как работает наш код:

1. Инициализирует работу экрана.

2. Определяет рабочие пины – сегодня у нас это №21 – для датчика касания и №2 – это встроенный на плате светодиод горящий синим цветом.

3. Также мы видим команды Serial.begin и Serial.PrintIn – мы их помним по урокам с Ардуино. Они отвечают за вывод текстовой информации на монитор порта. Так что откройте еще монитор порта и проверьте какой текст появляется.

И команды display как обычно отвечают за отображение текста на экране ESP32: display.clear(); // Очистка дисплея

display.drawString(0, 0, "Led ON"); // первые 2 цифры это координаты, в кавычках текст для вывода.

display.display(); // команда для платы вывести на экран информацию

Итак, ЕСЛИ ctsPin (датчик касания) HIGH (включен)то:

1. На экране монитора появляется надпись Led ON

2. На ledPin ( это встроенный светодиод) подается высокое напряжение

3. На экран порта выводится текст «TOUCHED»

Вопросы и задания
1. Опишите что происходит, когда кнопка не нажата.

2. Поменяйте текст на Light\Dark

3. Сделайте так, чтобы текст появлялся в центре.