0 / 0 / 0
Регистрация: 30.11.2021
Сообщений: 9

Микроконтроллер и датчик

29.04.2023, 11:42. Показов 1195. Ответов 3

Студворк — интернет-сервис помощи студентам
Микроконтроллер и датчик соединены между собой информационном каналом посредством протокола IIC.

На вход разрабатываемой функции приходит последовательность битов, зафиксированных на линии SDA во время передачи данных от датчика (в режиме ведомого) к контроллеру (в режиме ведущего). Известно, что метеодатчик отправляет данные о температуре, влажности и давлении в виде чисел в беззнаковом целом представлении, объемом 2 байта каждое. Также, в последовательности содержится номер датчика.Необходимо произвести дешифрацию последовательности. На выходе ожидается номер датчика и 3 числа, характеризующие температуру, влажность и давление, разделенных пробелом.
Sample Input:
0100101000110101110101010000010101010011 010100001101000110001000
Sample Output:
[74, 55208, 21866, 13508]


сделал код но выдает значения [74, 13781, 1363, 20689]

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def decode_bit_sequence(bit_sequence):
    byte_sequence = [int(bit_sequence[i:i+8], 2) for i in range(0, len(bit_sequence), 8)]
    sensor_number = byte_sequence[0]
    temperature = ((byte_sequence[1] << 8) | byte_sequence[2]) & 0xFFFF
    humidity = ((byte_sequence[3] << 8) | byte_sequence[4]) & 0xFFFF
    pressure = ((byte_sequence[5] << 8) | byte_sequence[6]) & 0xFFFF
    return sensor_number, temperature, humidity, pressure
 
def process_bit_sequence(bit_sequence):
    sensor_number, temperature, humidity, pressure = decode_bit_sequence(bit_sequence)
    return [sensor_number, temperature, humidity, pressure]
 
test_input = input()
result = process_bit_sequence(test_input)
print(result)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
29.04.2023, 11:42
Ответы с готовыми решениями:

Микроконтроллер 8-разрядный это тоже самое что 8-битный микроконтроллер?
Здравствуйте ! Подскажите пожалуйста, небольшой вопрос , касающийся терминологии . Микроконтроллер 8- разрядный это ...

Подключение к Arduino UNO 4-х вентиляторов + датчик воды + датчик грунта
Добрый день. Прошу помочь. Требуется подключить к Arduino UNO 4 вентилятора (куллер комп. 50х50), датчик воды, датчик грунта и...

Помогите со схемой.Нужен датчик удара и датчик прикосновения
Купил дешёвую сигнализацию, время попользовался, теперь хочется доработать. В электроники я так сказать нуб, но немного понимаю. Знаю что...

3
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.04.2023, 13:42
bestaim, дык спецификацию протокола нужно почитать. Или плюнуть на лысину тому, кто такие условия составляет.
Вот тебе основная идея, окультуришь сам тогда
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
test_input = '0100101000110101110101010000010101010011010100001101000110001000'
# фактический пакет передачи по протоколу IIC
# 01001010 0 0 11010111 0 10101000 0 01010101 0 01101010 0 00110100 0 11000100 0
 
# первый байт это адрес, плюс ОДИН БИТ НАПРВЛЕНИЯ ПЕРЕДАЧИ, плюс БИТ - статус передачи
address = test_input[:10]
# выкидываем их
address = int(address[:-2], 2)
print(f'address: {address}')
 
# далее идут пакеты по однуму байту ПЛЮС ОДИН БИТ - статус передачи (0-успех)
high = test_input[9: 10 + 9]
low = test_input[10 + 9: 10 + 9 + 9]
# собираем два байта, откинув биты статуса
temperature = int(high[:-1] + low[:-1], 2)
print(f'temperature: {temperature}')
 
# address: 74
# temperature: 55208
Можно расколхозить это дело регулярками например
Python
1
2
3
4
5
6
7
8
test = re.sub(r'(?<=\d\d)0(?=(\d{9})+$)', ' ', test_input)
print(test)
test = list(map(lambda x: x[:8], test.split()))
print(test)
print(int(test[0], 2))
print(int(test[1] + test[2], 2))
print(int(test[3] + test[4], 2))
print(int(test[5] + test[6], 2))
Кликните здесь для просмотра всего текста
Code
1
2
3
4
5
6
010010100 11010111 10101000 01010101 01101010 00110100 110001000
['01001010', '11010111', '10101000', '01010101', '01101010', '00110100', '11000100']
74
55208
21866
13508


Добавлено через 1 минуту

Не по теме:

Кстати, что за такие значения немыслимые?

2
1 / 1 / 0
Регистрация: 27.06.2023
Сообщений: 22
28.06.2023, 09:30
Что значит re.sub в pycharme подсвечивает красным говорит не найдено имя
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
28.06.2023, 09:31
import re
Внезапно
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.06.2023, 09:31
Помогаю со студенческими работами здесь

Подключение SIM800l, датчик вибрации SW-420, pir-датчик
Приветствую. Хотел подключить на breadboardе данные датчики к Arduino, однако, не совсем понятен принцип. Вот я собрал все на одно...

СМ Bosch wtb86211 oe/ 01, Определить датчик влажности и датчик температуры
Добрый день. СМ пытался сделать какой то мастер и исчез вместе с датчиком влажности и датчиком температуры. Подскажите пожалуйста какие...

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

Оптический датчик перемещения (датчик мыши)
Коллеги, может быть кто-то посоветует доставаемый и документированный оптический датчик перемещения, примерно такой, какой ставится на...

NCV1124 и датчик холла и индуктивный датчик
Добрый день! Есть такая замечательная микросхема NCV1124 (даташит тут и аппноут тут). Она предназначена для автомобильной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru