2015-03-30 4 views
0

Я использую простую схему сигнализации лазерного луча, похожую на http://2.bp.blogspot.com/-DlpGa_yyJ0Y/U ... iagram.pngбиблиотека pigpio и дребезг

Я взял входной сигнал от этой схемы к Pi, используя 4K7 резистор вместо зуммера и захватывать изображения, когда пучок затрудняется. Я использовал pigpio функцию обратного вызова библиотеки для захвата изображения, как

import pigpio 
import os 
pi=pigpio.pi() 
pi.set_mode(4,pigpio.INPUT) 
pi.set_pull_up_down(4,pigpio.PUD_DOWN) 
i=0 
def capture(gpio,level,ticks): 
    global i 
    i=i+1 
    os.system(("raspistill -o img%s.png -md 6 -t 500")%i) 

callf=pi.callback(4, pigpio.RISING_EDGE, capture) 
while True: 
    pass 

но вопрос иногда захватить несколько изображений для одного Obstruct. Я узнал, что дебют - это решение для подобных ситуаций. Как использовать debouncing с библиотекой pigpio.

ответ

0

Моя рекомендация для вас не содержит объяснения обработки debounce в pigpio, поскольку у меня есть схожие вопросы и по этому поводу.

Однако, один из способов исправить вашу проблему состоит в том, чтобы функция обратного вызова прерывания выполняла только одну из двух быстрых задач.

  1. Проверьте глобальный флаг (назовем его «ImageCaptureRequested»), и если этот флаг уже установлен, ничего не делайте в обратном вызове, а возвращайте. Это означает, что выполняется предыдущий захват изображения.
  2. Если флаг не установлен в значение True, просто установите его значение True и вернитесь от прерывания. Это позволяет быстро и быстро выполнить обратный вызов прерывания. Другая часть процесса будет состоять в том, чтобы иметь основной цикл (или поток), который следит за глобальным флагом и когда он будет установлен, вызовите вызов системы или вызов библиотеки, чтобы сделать ваш захват изображения. Как только это изображение будет сохранено, вы можете очистить глобальный флаг, чтобы ваша программа была готова к следующему прерыванию. Поскольку флаг предотвращает дублирование операций в прерывании, вы больше не должны получать множественные снимки с одним изменением gpio.

Я надеюсь, что это полезно, хотя я знаю, что он не отвечает на связанный с этим вопрос об аппаратном отказе в библиотеке классов pigpio. Я ищу документацию или помощь по этой проблеме для проекта, над которым я работаю. Это было легко сделать в RPIO, и я предполагаю, что это легко и в pigpio, как только кто-то «в курсе» проливает на него некоторый свет.

Marty C

+0

Отличный ответ, но его очень трудно прочитать. Можете ли вы изменить его, чтобы быть более понятным? :) –

+0

Пол - ваш вход хорошо принят и правда. Надеюсь, отредактированный ответ более ясен. Tnx! Marty C –

+2

Эй @marty - я имел в виду, что все это в одном абзаце. Попробуйте использовать некоторые инструменты форматирования, чтобы сделать некоторые жирные точки, списки или просто разделить его на заголовки :) –