2024-12-14 19:16:40] Раис Габдуллин: Написать код

Считывается информация попеременно с двух пинов Rasberru pi с частотой 100 гц. Запускается процесс от сигнала на первом пине, количество импульсов суммируется и записывается до появления сигнала на втором пине которые суммируются и записываются. Цикл повторяется при появлении сигнала на первом пине.

Цикл заканчивается когда количество импульсов на первом и втором пине сравняются. Затем начинается новый цикл после появления сигнала на первом пине. Сигналы с первого пина записываются как единица а со второго как нуль. Полученный бинарный код преобразуем в равномерный подсчитывая количество единиц и нулей в каждой пачке единиц и нулей, которые затем отобразить наглядным графиком. 


[2024-12-14 19:16:40] Chat GPT: Для реализации этой задачи на Raspberry Pi можно использовать библиотеку `RPi.GPIO` для работы с GPIO-пинами и `matplotlib` для построения графиков. Вот пример кода, который выполняет описанные вами задачи:


```python

import RPi.GPIO as GPIO

import time

import numpy as np

import matplotlib.pyplot as plt


# Настройка пинов

PIN_1 = 17 # Пин для первого сигнала

PIN_2 = 18 # Пин для второго сигнала


# Настройка GPIO

GPIO.setmode(GPIO.BCM)

GPIO.setup(PIN_1, GPIO.IN)

GPIO.setup(PIN_2, GPIO.IN)


def count_pulses(pin):

    count = 0

    start_time = time.time()

    while True:

        # Ждем сигнала на первом пине

        if GPIO.input(PIN_1) == GPIO.HIGH:

            break

    while True:

        # Считываем пульсы с первого пина до появления сигнала на втором

        while GPIO.input(pin) == GPIO.HIGH:

            count += 1

            time.sleep(0.01) # Пауза для обеспечения чтения 100 Гц

        if GPIO.input(PIN_2) == GPIO.HIGH:

            break

    return count


def main():

    binary_code = []


    while True:

        print("Ожидание сигнала на первом пине...")

        # Ждем сигнала на первом пине

        GPIO.wait_for_edge(PIN_1, GPIO.RISING)

        

        pulse_count_1 = count_pulses(PIN_1)

        print(f"Количество импульсов на первом пине: {pulse_count_1}")


        pulse_count_2 = count_pulses(PIN_2)

        print(f"Количество импульсов на втором пине: {pulse_count_2}")

        

        # Сохраняем результаты в бинарном коде

        binary_code += [1] * pulse_count_1

        binary_code += [0] * pulse_count_2


        # Проверяем условие выхода из цикла

        if pulse_count_1 == pulse_count_2:

            print("Количество импульсов сравнялось. Начинаем новый цикл.")

        

        # Визуализация

        display_data(binary_code)


def display_data(data):

    # Преобразование в пачки

    counts = []

    current_value = data[0]

    count = 0


    for bit in data:

        if bit == current_value:

            count += 1

        else:

            counts.append((current_value, count))

            current_value = bit

            count = 1


    # Добавление последнего значения

    if count > 0:

        counts.append((current_value, count))


    print("Пачки:", counts)


    # Визуализация

    labels, sizes = zip(*counts)

    plt.bar(range(len(counts)), sizes, tick_label=[f'{label}' for label in labels])

    plt.ylabel('Количество')

    plt.xlabel('Значение')

    plt.title('Пачки единиц и нулей')

    plt.show()


try:

    main()

except KeyboardInterrupt:

    print("Завершение программы.")

finally:

    GPIO.cleanup()

```


### Пояснения к коду:

1. Код использует библиотеку `RPi.GPIO` для работы сGPIO-пинами Raspberry Pi.

2. Запускается основной цикл, который ждет, пока не получит сигнал на первом пине.

3. Функция `count_pulses` считает количество импульсов на заданном пине до появления сигнала на другом пине.

4. Сохраненные данные кодируются в бинарный массив, где 1 — это импульсы с первого пина, а 0 — с второго.

5. После окончания отслеживания импульсов выполняется визуализация с помощью `matplotlib`, где высота столбиков показывает количество подряд идущих единиц и нулей.


### Зависимости:

Чтобы запустить этот код, вам понадобятся следующие библиотеки:

```bash

pip install matplotlib numpy RPi.GPIO

```


### Примечание:

- Перед запуском кода обязательно проверьте, правильно ли подключены пины и нет ли в этом конфликта. Тестируйте программу осторожно, чтобы не повредить оборудование.

- Убедитесь, что вы запустили скрипт с правами администратора, поскольку работа с GPIO требует этого.




Комментарии

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

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

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