Как мне рассчитывать на кирку?

Я пытаюсь подсчитать, сколько раз была нажата кнопка на входном контакте 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, прочитайте раздел руководства о том, как байтовые и словесные переменные связаны друг с другом, что может быть неочевидно.

Другие вопросы по тегам