Прерывании Ардуино и Nextion

Нет ответов
Aklay
Offline
Зарегистрирован: 17.03.2018

Здравствуйте друзя. Вот уже второй день ломаю голову над одной головоломкой. Суть в следующем: 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)  ) и значение в порт приходили. Помогите и посоветуйте как решит проблему. может есть какой нибудь способ для хранение значений в буфере для их дальнейшего прочтение по завершению прерывание