Я имею дело с аналоговыми датчиками. У меня есть простая плата Arduino Lilypad только с 4 аналоговыми входами. Теперь мне нужны еще два датчика, и я нашел в сети эту схему:
Но я не понимаю, может ли это добавить задержки в мой проект, потому что я контролирую аудио-видео материалы, и нужно избегать любых задержек.
Затем по ссылке я прочитал это:
Можно рассчитать фактическое сопротивление по показаниям, но, к сожалению, различия в плате IDE и Arduino сделают его несовместимым. Имейте в виду, что если вы меняете версии ОС IDE, или используете Arduino 3,3 В вместо 5 В, или переходите с Arduino 16 МГц на 8 МГц (например, lilypad), могут быть различия из-за того, сколько времени требуется для чтения. стоимость булавки. Обычно это не имеет большого значения, но может затруднить отладку вашего проекта, если вы этого не ожидаете!
Я не большой специалист по ардуино и не понимаю, что мне нужно изменить для lilypad.
Любой совет может быть оценен!
Это, безусловно, добавит задержки, поскольку вы опрашиваете контакт в цикле блокировки.
while (digitalRead(RCpin) == LOW) { // count how long it takes to rise up to HIGH
reading++; // increment to keep track of time
if (reading == 30000) {
// if we got this far, the resistance is so high
// its likely that nothing is connected!
break; // leave the loop
}
Предполагая, что ваш компилятор может чрезвычайно эффективно оптимизировать код, этот цикл займет около 4 строк кода для выполнения, так как вы должны прочитать вывод, затем сравнить его со значением, а затем перейти на основе результата (я был бы очень впечатлен, если бы вы можете получить несколько инструкций). Далее предположим, что выполнение каждой из этих инструкций занимает всего 1 такт (вероятно, это также займет больше времени, но это поможет решить проблему). Эта процедура может занять не более :
но я предполагаю, что это займет немного больше из-за вышеупомянутых пособий.
Причина, по которой он не добавляет задержек при использовании АЦП, заключается в том, что периферийное устройство может быть настроено для генерации прерываний, и вы будете уведомлены только после завершения чтения АЦП. Время, необходимое АЦП для завершения измерения, составляет конечное число тактов, поэтому в примечании к приложению, на которое вы ссылаетесь, указывается, что если вы снизите тактовую частоту, АЦП по-прежнему будет выполнять такое же количество тактов, чтобы завершите измерение, ваше измерение займет больше времени, потому что часы медленнее.
На первый взгляд по вашей картинке в сочетании с тем фактом, что вы упомянули звук, я подумал, что вы измеряете вход микрофона. Однако похоже, что вы просто используете чувствительный к силе резистор (FSR), который является просто датчиком давления. Если вам не нужно знать количество давления, а только то, что оно было нажато, вам не нужно преодолевать все трудности с поиском точного показания. Вы можете просто использовать любой цифровой вход, генерирующий прерывания, если вы выберете правильное значение резистора (вместо конденсатора). Вы просто установите цифровой вывод для генерации прерываний по переднему фронту и выберите резистор, который даст вам изменение состояния (низкое/высокое) с желаемой силой для вашего прикосновения. Тогда вы будете знать каждый раз, когда был отправлен FSR, и сможете обрабатывать его без блокировки, обеспечивая наименьшую возможную задержку.
Я никогда не работал с Arduino, но у большинства микроконтроллеров есть контакты прерывания, поэтому у Arduino они тоже должны быть. Если вы используете контакт прерывания, чтобы обнаружить, что конденсатор заряжен до порогового уровня, то у вас не будет задержек, и ваша программа сможет работать нормально, пока происходит измерение. Вам просто нужно использовать контакт, который позволяет прерывание.
Джиппи
Джоэл Б.