Доброго!
Не могу понять поведение программы. Имею 3 сенсорные площадки, подключены к пинам Ардуины 4,5,6 с подтяжкой к плюсу через мегаомный резистор. Дальше по стандарту: пин на землю, потом на вход, жду появления логической единички, замеряю время. В момент опознания тыкания пальца, на пин 3 вывожу кратковременный “BEEP”. И в итоге, с каждого входного сенсора, имею разную длительность этого BEEPа. Задуманная работа идет только по пину 5. с 4 длительность в два раза больше, с 6-го ещё больше, изменчива. Пробовал менять местами площадки - тоже самое. Изначально работал с портами напрямую, ситуация не меняется. Буду рад мыслям. Второй вечер ковыряю. Было всё на ESP32, штатными функциями, но надо перевести на Дуню, неохота корпус ломать, кнопки ставить.
bool buzz;
uint32_t buzz_timer, stimer;
uint16_t ReadSensor(uint8_t pin)
{
uint16_t count = 0;
pinMode(pin, OUTPUT);
digitalWrite(pin, LOW);
noInterrupts();
pinMode(pin, INPUT);
while ((digitalRead(pin) == LOW) && (count != 1024))
{
count++;
}
interrupts();
return count;
}
uint16_t GetSensor(uint8_t pin)
{
uint32_t ctimer = millis();
uint16_t value;
uint8_t count = 0;
while(millis() - ctimer < 100) {
value = ReadSensor(pin);
if (value > 100) count++;
if (count > 3) break;
}
return count;
}
void setup()
{
pinMode(3, OUTPUT);
}
void loop()
{
for (uint8_t n = 4; n < 7; n++){
if (GetSensor(n) > 3) {
buzz = true;
buzz_timer = millis();
digitalWrite(3, HIGH);
}
}
if (buzz && millis() - buzz_timer > 50){
buzz = false;
digitalWrite(3, LOW);
}
}