Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
mpt:доработка_скетча_с_веб-панелью [14.06.2019 08:35] buh [Доработка скетча с веб-панелью.] |
mpt:доработка_скетча_с_веб-панелью [18.06.2019 09:16] (текущий) buh |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Доработка скетча с веб-панелью. ====== | ||
- | --- //[[admin@artonit.ru|Бухаров А.В.]] 2019/06/14 08:24// | ||
- | [[https://all-arduino.ru/arduino-dlya-nachinayushhih-urok-14-preryvaniya/]] - тут пример обработки аппаратного прерывания INT0 (в этой статье и про дребезг контактов написано). | + | ====== Про прерывания от W5500, которых нет ====== |
- | <code> | + | --- //[[admin@artonit.ru|Бухаров А.В.]] 2019/06/18 09:08// |
- | // Назначение прерывания | + | |
- | int buttonInt = 0; | + | |
- | + | ||
- | // Переменные с пинами светодиодов | + | |
- | int yellowLed = 11; | + | |
- | int redLed = 10; | + | |
- | int greenLed = 9; | + | |
- | int nullLed = 6; | + | |
- | volatile int selectedLed = greenLed; | + | |
- | + | ||
- | // Инфракрасный дальномер | + | |
- | int distPin = 0; | + | |
- | + | ||
- | void setup () { | + | |
- | // Устанавливаем режимы пинов | + | |
- | pinMode(redLed, OUTPUT); | + | |
- | pinMode(greenLed, OUTPUT); | + | |
- | pinMode(yellowLed, OUTPUT); | + | |
- | pinMode(nullLed, OUTPUT); | + | |
- | + | ||
- | // Устанавливаем прерывание | + | |
- | attachInterrupt(buttonInt, swap, RISING); | + | |
- | + | ||
- | } | + | |
- | + | ||
- | // Обработчик прерывания | + | |
- | void swap() { | + | |
- | if(selectedLed == greenLed) | + | |
- | selectedLed = redLed; | + | |
- | else if(selectedLed == redLed) | + | |
- | selectedLed = yellowLed; | + | |
- | else if(selectedLed == yellowLed) | + | |
- | selectedLed = nullLed; | + | |
- | else | + | |
- | selectedLed = greenLed; | + | |
- | } | + | |
- | + | ||
- | void loop () { | + | |
- | // Получаем данные с дальномера | + | |
- | int dist = analogRead(distPin); | + | |
- | int brightness = map(dist, 0, 1023, 0, 255); | + | |
- | + | ||
- | // Управляем яркостью | + | |
- | analogWrite(selectedLed, brightness); | + | |
- | } | + | |
- | Необходимо использовать ключевое слово «volatile» перед объявлением переменной значение которой будет изменяться в обработчике прерывания.</code> | + | В ходе проведенных опытов мы выяснили, что прерывание от W5500 нет. |
+ | |||
+ | В этой статье http://www.cyberforum.ru/digital-signal-processing/thread2094151.html указано, что для получения прерываний необходимо перевести сокеты в состояние listen().\\ Хотя описание дано для W5100, я думаю, что и для W5500 оно тоже подойдет. | ||
+ | |||
+ | Надо проверить. | ||
+ | Но как? | ||
+ | Вот тут приведено описание библиотеки ethernet: https://doc.arduino.ua/ru/prog/Ethernet | ||
+ | |||
+ | Про listen() нет ни слова. Кирилл! Надо разбираться. | ||
+ | |||
+ | |||
+ | ---- | ||
+ | ====== Доработка скетча с веб-панелью. ====== | ||
+ | --- //[[admin@artonit.ru|Бухаров А.В.]] 2019/06/14 08:24// | ||
Строка 62: | Строка 28: | ||
Именно этот код работал на презентации. | Именно этот код работал на презентации. | ||
+ | |||
+ | ---- | ||