#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
//volatile boolean flag
volatile boolean flag_CW = 0; // переменные тригерра направления.
volatile boolean flag_CWW = 0; // переменные тригерра направления.
boolean enc_A = 2; //переменные входа фазы A.
boolean enc_B = 3; //переменные входа фазы B.
unsigned int update_lcd = 0; //переменная обновления экрана. своеобразное прерывание.
volatile int place_enc; // переменная.
void setup()
{
pinMode(6, INPUT_PULLUP); // настройка пина кнопки на вход, включае поддяжку.
pinMode(enc_A, INPUT);
pinMode(enc_B, INPUT);
attachInterrupt(0, scan_enc, FALLING); //прерывание INT0. 1>0
attachInterrupt(1, flag_reset, RISING); //прерывание INT1. 0>1
lcd.begin(16, 2); //старт lcd.
}
void loop()
{
if (digitalRead(6)==0) //сброс.
{
place_enc = 0;
}
if (update_lcd==0)
{
lcd.setCursor(0,0); //курсор.
lcd.print("Place="); //выводит текст.
lcd.print(place_enc); //выводит значение переменной P.
lcd.print(" "); //выводит выводит пробел.
update_lcd = 2048;
}
update_lcd = update_lcd-1;
}
void scan_enc()
{
if(flag_CW == 1){goto exit;}
if((digitalRead(enc_B)==1))
{
place_enc ++;
flag_CW = 1;
flag_CWW = 0;
}
if(flag_CWW == 1){goto exit;}
if((digitalRead(enc_B)==0))
{
place_enc --;
flag_CWW = 1;
flag_CW = 0;
}
exit:;
}
void flag_reset()
{
if ((digitalRead(enc_A)==1) && (flag_CW = 1))
{
flag_CW = 0;
}
if ((digitalRead(enc_A)==0) && (flag_CWW = 1))
{
flag_CWW = 0;
}
//flag_CW = 0;
}
=================
Ардуино приводит меня в ступор, есть код опроса энкодера у меня он на 1250 импульсов на оборот, он взять из программы написанной на СИ и на Tiny2313 работает без проблем он немного не такой там нет флагов flag_CW flag_CWW там просто есть флаг flag который устраняет ложное срабатывание от тряски на одном месте при большом количестве импульсов это актуально. Но ардуино не пропускает этот код:
======
Arduino: 1.6.9 (Windows XP), Плата:"Arduino Nano, ATmega328"
collect2.exe: error: ld returned 5 exit status
exit status 1
Ошибка компиляции для платы Arduino Nano.
======
Пришлась городить вот эти двойные опросы. Но проблема не только в этом, она в том, что энкодер считает только в плюс? я просто в недоумении в чем проблема sad


