Код

 Для реализации данной задачи на Raspberry Pi с использованием библиотеки RPi.GPIO мы создадим счётчик, который будет увеличивать значение при наличии импульсов на первом пине и уменьшать значение при наличии импульсов на втором пине. Программа будет записывать все изменения показаний счётчика и остановится, когда его значение достигнет нуля.

Вот пример кода, который реализует описанную функциональность:

import RPi.GPIO as GPIO
import time

# Настройки пинов
PIN_COUNT_UP = 17  # Пин для увеличения счётчика
PIN_COUNT_DOWN = 27  # Пин для уменьшения счётчика

# Инициализация счётчика и списка для записи изменений
counter = 0
history = []  # Список для хранения изменений счётчика

# Установка режима GPIO
GPIO.setmode(GPIO.BCM)
GPIO.setup(PIN_COUNT_UP, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(PIN_COUNT_DOWN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# Функция для увеличения счётчика
def count_up(channel):
    global counter
    counter += 1
    history.append(counter)
    print(f'Импульс на пине {PIN_COUNT_UP}: Счётчик увеличен до {counter}')

# Функция для уменьшения счётчика
def count_down(channel):
    global counter
    counter -= 1
    if counter < 0:  # Ограничим минимальное значение счётчика
        counter = 0
    history.append(counter)
    print(f'Импульс на пине {PIN_COUNT_DOWN}: Счётчик уменьшен до {counter}')

# Настройка прерываний
GPIO.add_event_detect(PIN_COUNT_UP, GPIO.RISING, callback=count_up, bouncetime=200)
GPIO.add_event_detect(PIN_COUNT_DOWN, GPIO.RISING, callback=count_down, bouncetime=200)

try:
    print("Счётчик запущен. Нажмите Ctrl+C для выхода.")

    while counter >= 0:  # Остановимся, когда счётчик достигнет нуля
        time.sleep(0.1)  # Ждём некоторое время

    print("Счётчик достиг нуля. Остановка.")

finally:
    GPIO.cleanup()  # Очистка GPIO при завершении работы

Объяснение кода:

  1. Импорт библиотек: Импортируем необходимую библиотеку RPi.GPIO для работы с GPIO-пинами.

  2. Настройка пинов: Устанавливаем два пина: один для увеличения счётчика и другой для уменьшения.

  3. Инициализация переменных: Создаём переменные для счётчика и истории изменений.

  4. Настройка GPIO: Устанавливаем режим работы с пинами и подключаем их как входы.

  5. Обработчики событий: Создаём функции count_up и count_down, которые увеличивают и уменьшают счётчик соответственно. Каждое изменение записывается в список history.

  6. Настройка прерываний: Устанавливаем прерывания для обоих пинов, чтобы вызывать соответствующие функции при появлении импульса.

  7. Основной цикл: Программа работает до тех пор, пока значение счётчика не станет равным нулю.

  8. Очистка: Используем блок finally для корректной очистки GPIO-пинов при завершении программы.

Примечание:

Перед запуском программы убедитесь, что у вас установлен соответствующий модуль RPi.GPIO и вы имеете доступ к GPIO на своему Raspberry Pi. Также следите за безопасностью работы с электрическими сигналами.


Комментарии

Популярные сообщения из этого блога

Распознавание речи без библиотек

Задержка звука с Python

Усилитель на микросхеме ILA7056. - Радиолюбитель - это просто