Как мне рассчитывать на кирку?
Я пытаюсь подсчитать, сколько раз была нажата кнопка на входном контакте C.4 на пикосе 14M2. Затем я хотел бы иметь "режим", который устанавливает высокий уровень b.4 на 5 секунд, а затем низкий. Этот "режим" должен повторять количество раз, когда вы нажимаете кнопку перед рукой.
Если это имеет смысл, как бы я это сделал?
Вот что у меня так далеко...
init:
let b0 = 0
main:
low B.1
low B.2
low B.3
low B.4
low B.5
if pinC.4 = 1
let b0 = b0 +1
goto mode
Endif
goto main
mode:
high B.4
wait 5
low B.4
goto main
1 ответ
Если я понимаю ваш вопрос, вы хотите сначала посчитать количество нажатий кнопок, а затем вывести это количество 5-секундных импульсов. Но как ваша программа решит, что вы завершили серию нажатий кнопок и хотите, чтобы она продолжала и генерировала последовательность импульсов?
Вот возможное решение, но вам придется решить, подходит ли оно, и адаптировать его, если нет:
b0 = 0 ' initialise counting variable
w1 = 0 ' initialise timing variable (a 2-byte word)
countpresses:
pause 10 ' wait for 10 ms
w1 = w1 + 1 ' increment the timing variable
if pinC.4 = 0 then countpresses ' loop until button pressed
wait_release:
pause 10
w1 = w1 + 1 ' increment the timing variable
if pinC.4 = 1 then wait_release ' loop until button released
b0 = b0 + 1 ' increment the counter
if w1 < 200 then countpresses ' keep counting until 4 seconds have elapsed
if b0 > 0 then
for b1 = 1 to b0
high B.4
pause 5000 ' take B.4 high for 5 seconds
low B.4
pause 1000 ' and low for 1 second between pulses
next b1
endif
Это будет подсчитывать, сколько раз вы нажимаете кнопку в течение 4 секунд (200 х 20 мс), а затем выводите это количество импульсов. Операторы паузы гарантируют, что вы не учитываете "отскоки" контактов переключателя, которые могут произойти через несколько миллисекунд после нажатия или отпускания кнопки, а второй цикл гарантирует, что вы учитываете только один раз для каждого нажатия, а не приращения так быстро, как PICAXE может двигаться, пока вы удерживаете кнопку нажатой! Вы не сказали, как долго должен понижаться уровень B.4 между 5-секундными импульсами - в приведенном выше коде я сделал эту 1 секунду.
Если это не совсем то, что вам нужно, тогда не составит труда выяснить, как его изменить, например, подождать несколько секунд после того, как вы в последний раз отпустите кнопку.
Я использовал переменную слова для счетчика времени, чтобы максимальное время ожидания не ограничивалось 255 счетами - вы можете изменить 200 в коде на любое значение до 65535, если хотите (но вы должны подумать о том, что может произойти, если он достигнет этого значения). Если вы новичок в PICAXE, прочитайте раздел руководства о том, как байтовые и словесные переменные связаны друг с другом, что может быть неочевидно.