Показаны различия между двумя версиями страницы.
Следующая версия | Предыдущая версия | ||
products:laboratory_iot_c:exp45 [2024/11/30 11:48] – создано labuser30 | products:laboratory_iot_c:exp45 [2024/12/04 14:03] (текущий) – [Программный код эксперимента] labuser30 | ||
---|---|---|---|
Строка 15: | Строка 15: | ||
Теперь напишем программный код. | Теперь напишем программный код. | ||
- | < | + | < |
- | 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); | ||
+ | | ||
+ | } | ||
+ | } | ||
</ | </ | ||
- | Разберем класс кнопки. У него есть конструктор '' | + | Разберем класс кнопки. У него есть конструктор '' |
- | < | + | < |
- | | + | |
- | self.pin = Pin(p, Pin.IN) | + | pin = _pin; |
- | | + | pinMode(pin, INPUT); |
- | self.oldState = not pressSate | + | |
+ | oldState = not _pressState; | ||
+ | } | ||
</ | </ | ||
Здесь настраивается вывод микроконтроллера, | Здесь настраивается вывод микроконтроллера, | ||
И у кнопки есть метод определения факта нажатия: | И у кнопки есть метод определения факта нажатия: | ||
- | < | + | < |
- | | + | |
- | 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. | ||
- | < | + | < |
- | btn = Button(16, 1) | + | Button |
</ | </ | ||
- | Использование кнопки стало предельно простым. Нам больше не нужна переменная для хранения прошлого состояния кнопки и вычисление события нажатия. Все это реализовано в классе кнопки. Мы просто создали объект кнопки, | + | Использование кнопки стало предельно простым. Нам больше не нужна переменная для хранения прошлого состояния кнопки и вычисление события нажатия. Все это реализовано в классе кнопки. Мы просто создали объект кнопки, |
- | < | + | < |
- | if btn.onPress(): | + | if (btn.onPress()) { |
</ | </ | ||