Здесь показаны различия между двумя версиями данной страницы.
| Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
|
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: | ||
| Именно этот код работал на презентации. | Именно этот код работал на презентации. | ||
| + | |||
| + | ---- | ||