Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| products:laboratory_iot_c:exp45 [2024/11/30 17:19] – [Программный код эксперимента] labuser30 | products:laboratory_iot_c:exp45 [2024/12/04 14:03] (текущий) – [Программный код эксперимента] labuser30 | ||
|---|---|---|---|
| Строка 16: | Строка 16: | ||
| <file arduino Exp45.ino[enable_line_numbers=" | <file arduino Exp45.ino[enable_line_numbers=" | ||
| - | from machine import Pin | + | #define LED_PIN 0 |
| - | import time | + | |
| - | _init() | + | |
| - | LedPin = 0 | + | class Button { |
| - | led = Pin(LedPin, Pin.OUT) | + | |
| + | int pin; | ||
| + | bool pressState; | ||
| + | bool oldState; | ||
| - | class Button: | + | public: |
| - | | + | |
| - | self.pin = Pin(p, Pin.IN) | + | pin = _pin; |
| - | | + | pinMode(pin, INPUT); |
| - | self.oldState = not pressSate | + | |
| - | | + | oldState = not _pressState; |
| - | def onPress(self): | + | |
| - | state = self.pin.value() | + | |
| - | if state != self.oldState: | + | |
| - | self.oldState = state | + | |
| - | if state == self.pressSate: | + | |
| - | return True | + | |
| - | return False | + | |
| + | bool onPress() { | ||
| + | bool state = digitalRead(pin); | ||
| + | if (state != oldState){ | ||
| + | oldState = state; | ||
| + | if (state == pressState) return true; | ||
| + | } | ||
| + | return false; | ||
| + | } | ||
| + | }; | ||
| - | btn = Button(16, | + | Button |
| - | while True: | + | void setup() { |
| - | if btn.onPress(): | + | |
| - | | + | } |
| - | | + | |
| - | | + | void loop() { |
| + | | ||
| + | | ||
| + | delay(1000); | ||
| + | | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| - | Разберем класс кнопки. У него есть конструктор '' | + | Разберем класс кнопки. У него есть конструктор '' |
| - | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
| - | | + | |
| - | self.pin = Pin(p, Pin.IN) | + | pin = _pin; |
| - | | + | pinMode(pin, INPUT); |
| - | self.oldState = not pressSate | + | |
| + | oldState = not _pressState; | ||
| + | } | ||
| </ | </ | ||
| Здесь настраивается вывод микроконтроллера, | Здесь настраивается вывод микроконтроллера, | ||
| И у кнопки есть метод определения факта нажатия: | И у кнопки есть метод определения факта нажатия: | ||
| - | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
| - | | + | |
| - | state = self.pin.value() | + | |
| - | if state != self.oldState: | + | if (state != oldState){ |
| - | self.oldState = state | + | oldState = state; |
| - | if state == self.pressSate: | + | if (state == pressState) |
| - | | + | } |
| - | return | + | |
| + | } | ||
| </ | </ | ||
| Здесь считывается текущее состояние кнопки и сравнивается со старым. Состояние сохраняется как старое. Проверяется соответствие состояния кнопки состоянию нажатой кнопки, | Здесь считывается текущее состояние кнопки и сравнивается со старым. Состояние сохраняется как старое. Проверяется соответствие состояния кнопки состоянию нажатой кнопки, | ||
| Создаем объект кнопки. Она на 16 выводе и нажатым будем считать состояние логической 1. | Создаем объект кнопки. Она на 16 выводе и нажатым будем считать состояние логической 1. | ||
| - | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
| - | btn = Button(16, | + | Button |
| </ | </ | ||
| - | Использование кнопки стало предельно простым. Нам больше не нужна переменная для хранения прошлого состояния кнопки и вычисление события нажатия. Все это реализовано в классе кнопки. Мы просто создали объект кнопки, | + | Использование кнопки стало предельно простым. Нам больше не нужна переменная для хранения прошлого состояния кнопки и вычисление события нажатия. Все это реализовано в классе кнопки. Мы просто создали объект кнопки, |
| - | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
| - | if btn.onPress(): | + | if (btn.onPress()) { |
| </ | </ | ||