Освой Arduino играючи

Сайт Александра Климова

Шкодим

/* Моя кошка замечательно разбирается в программировании. Стоит мне объяснить проблему ей - и все становится ясно. */
John Robbins, Debugging Applications, Microsoft Press, 2000

ESP32: Touch-выводы

У платы ESP32 есть несколько выводов, которые могут использоваться в качестве тач-выводов, способных обнаруживать касания рукой. Список выводов приводится ниже. Программно выводы начинаются с символа T. С правой стороны находятся три вывода, слева - шесть (версия платы на 30 выводов)


D4  = T0
D2  = T2
D15 = T3
#
D13 = T4
D12 = T5
D14 = T6
D27 = T7
D33 = T8
D32 = T9

У платы с 36-ю выводами есть ещё один тач-вывод GPIO0 = T1.

На некоторых платах может наблюдаться чехарда с пинами при работе в Arduino IDE, так GPIO 33 и GPIO 32 перепутаны местами. Поэтому в коде к ним лучше обращаться как T9 и T8 соответственно. Если у вас такой ошибки нет, то просто не обращайте внимания на данный абзац.

Вставим провод в вывод D4 (T0), второй конец провода оставим свободным. Вывод 18 соединим с длинной ножкой светодиода, а вывод GND с короткой ножкой светодиода. Не забываем про резистор.

ESP32 Touch pin

Получить значение тач-вывода можно через функцию touchRead(GPIO), указав используемый вывод.

Напишем сначала простейший скетч, включая светодиод при касании провода рукой.


/*****************************************************
* ESP32 Touch Test
*****************************************************/

#define TOUTCH_PIN T0 // ESP32 Pin D4
#define LED_PIN 18
int touch_value = 100;

void setup()
{
	Serial.begin(115200);
	delay(1000);
	Serial.println("ESP32 Touch Test");
	pinMode(LED_PIN, OUTPUT);
	digitalWrite(LED_PIN, LOW);
}

void loop()
{
	touch_value = touchRead(TOUTCH_PIN);
	Serial.println(touch_value);  // get value using T0 
	if (touch_value < 50)
	{
		digitalWrite(LED_PIN, HIGH);
	}
	else
	{
		digitalWrite(LED_PIN, LOW);
	}
	delay(1000);
}

Напишем другой скетч, используя плавное включение светодиода при помощи функций ledc....


/*
   ESP32 Touch Controled LED, using PWM
   Board: ESP32 Dev Module
 */

uint8_t led = 18;

int buff(int pin)                                       // Function to handle the touch raw sensor data
{
	int out = (50 - touchRead(pin));                    //  Scale by n, value very sensitive currently
	// change to adjust sensitivity as required
	if (out > 0)
	{
		return (out + 2);
	}
	else
	{
		return 0;
	}
}

void setup()
{
	ledcAttachPin(led, 1);    //Configure variable led, pin 18 to channel 1
	ledcSetup(1, 12000, 8);   // 12 kHz PWM and 8 bit resolution
	ledcWrite(1, 100);        // Write a test value of 100 to channel 1
	Serial.begin(115200);
	Serial.println("Testing ledc 12 channel 1");
}
void loop()
{
	Serial.print("Touch sensor value:");
	Serial.println(buff(T0));

	{
		ledcWrite(1, (buff(T0)));                 // Using T0 for touch data
	}

	delay(100);
}

Берёмся рукой за свободный вывод и наблюдаем, как светодиод светится с разной силой.

Для удобства можно сделать площадку из фольги и прикрепить её к выводу.

Реклама