Работа с емкостным датчиком прикосновения на arduino
Автор: Sysaninмая 2
Как сделать емкостный датчик и физические основы его использования я описывал в статье http://formata.net/elektronika/emkostnyj-datchik-prikosnoveniya/ . Здесь приведу код для arduino с комментариями:
int defaultReactionC = 0; //переменная в которой храним длительность заряда без прикосновения
void setup() {
pinMode(8, OUTPUT);//выход для подачи высокого уровня (вход XT1 на рис. 1 из прошлой статьи)
pinMode(9, INPUT);//вход для определения заряда кондера(вход XT2 на рис. 1 из прошлой статьи)
pinMode(13, OUTPUT); //используем статусный светодиод, он будет загораться когда есть прикосновение
}
void loop() {
//при включении МК определяем время заряда кондера без прикосновения
if (defaultReactionC = 0) {
inicialize_c();
}
//начинаем заряжать конденсатор и считаем через сколько высокий уровень будет на 9м входе
digitalWrite(8, HIGH);
int timeC = pulseIn(9, LOW);
digitalWrite(8, LOW);
//если измереное время больше, чем в два раза, то считаем,
//что есть касание (у меня на практике оно было обычно раз в 5-10 больше)
if (timeC > 2 * defaultReactionC) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
//тут можно делать что-то полезное, главное дать время разрядиться конденсатору, перед следующим циклом заряда
delay(20);
}
void inicialize_c() {
digitalWrite(8, HIGH);
defaultReactionC = pulseIn(9, LOW);
digitalWrite(8, LOW);
delay(40);
}
void setup() {
pinMode(8, OUTPUT);//выход для подачи высокого уровня (вход XT1 на рис. 1 из прошлой статьи)
pinMode(9, INPUT);//вход для определения заряда кондера(вход XT2 на рис. 1 из прошлой статьи)
pinMode(13, OUTPUT); //используем статусный светодиод, он будет загораться когда есть прикосновение
}
void loop() {
//при включении МК определяем время заряда кондера без прикосновения
if (defaultReactionC = 0) {
inicialize_c();
}
//начинаем заряжать конденсатор и считаем через сколько высокий уровень будет на 9м входе
digitalWrite(8, HIGH);
int timeC = pulseIn(9, LOW);
digitalWrite(8, LOW);
//если измереное время больше, чем в два раза, то считаем,
//что есть касание (у меня на практике оно было обычно раз в 5-10 больше)
if (timeC > 2 * defaultReactionC) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
//тут можно делать что-то полезное, главное дать время разрядиться конденсатору, перед следующим циклом заряда
delay(20);
}
void inicialize_c() {
digitalWrite(8, HIGH);
defaultReactionC = pulseIn(9, LOW);
digitalWrite(8, LOW);
delay(40);
}
Нет комментариев