Прерывании Ардуино и Nextion
- Войдите на сайт для отправки комментариев
Вс, 25/03/2018 - 02:30
Здравствуйте друзя. Вот уже второй день ломаю голову над одной головоломкой. Суть в следующем: cделал диммер на ардуине из книги.
#include <CyberLib.h> //Библиотека от Cyber-Place.ru
volatile uint8_t tic, Dimmer = 255;
void setup()
{
D3_Out; //Настраиваем порт на выход
D3_Low; //установить на выходе низкий уровень сигнала
//настраиваем порт на вход для отслеживания прохождения сигнала через ноль
D2_In;
// настроить срабатывание прерывания interrupt0 на pin 2 на низкий уровень
attachInterrupt(0, detect_up, LOW);
StartTimer1(halfcycle, 40); //время для одного разряда ШИМ
StopTimer1(); //остановить таймер
Serial.begin(57600); //инициализация порта
}
// обработчики прерываний
void halfcycle() { //прерывания таймера
tic++; //счетчик
if(Dimmer < tic ) D3_High; //управляем выходом
}
void detect_up() { // обработка внешнего прерывания. Сработает по переднему фронту
tic=0; //обнулить счетчик
ResumeTimer1(); //запустить таймер
// перепрограммировать прерывание на другой обработчик
attachInterrupt(0, detect_down, HIGH);
}
void detect_down(){ // обработка внешнего прерывания. Сработает по заднему фронту
StopTimer1(); //остановить таймер
D3_Low; //логический ноль на выходы
tic=0; //обнулить счетчик
//перепрограммировать прерывание на другой обработчик
attachInterrupt(0, detect_up, LOW);
}
void loop(){
if(Serial.available() > 0){
Dimmer = Serial.parseInt();
Serial.println(Dimmer);
}
}
Как видите она работает на прерывании через каждый раз когда синус проходить через ноль. То есть прерывание срабатывает 50-60 раз в секунду.
Также купил тач дисплей Nextion. Нашел в интернете очень удобную библиотеку ссылка
Все кто знаком с Nextion знает что для создание обмена данных между ардуино надо писать очень большой код. А это библиотека работает очень интересно. Есть у нее в примерах "ReceiveMessages". При нажатии кнопки на дисплее шлется ID этой кнопки в COM порт в виде строки . Идея у меня было банально проста. Если на порт приходить определенная стока от дисплея делать действе которое заранее продумано для этой кнопкой Но радость у меня было не долгой, когда я узнал что из за прерывание ардуино не может прочитать порт. Чтобы удостоверится я даже удалял часть кода в сетапе ( attachInterrupt(0, detect_up, LOW) ) и значение в порт приходили. Помогите и посоветуйте как решит проблему. может есть какой нибудь способ для хранение значений в буфере для их дальнейшего прочтение по завершению прерывание