Ви не увійшли.
нужно сравнивать числа и если одно из них более другого на константу или переменную то истина
Имеется в виду тема общая делиться опытом, аргументы операторов и прочее...
К примеру? мне нужен аргумент для двух переменных равенство которых было если вторая больше первой на 3(константу) или переменную
if ((x = y) = (y>3)) получается равенство но что то я не уверен
Ребята объясните как отображают число с запятой на экране. Я использую переменную int (000 - 999 сотни) и byte (0 - 9 десятичную) но проблема в том что когда счётчик переходит через 100.0 а потом возвращается назад получается 99.90 как с этим бороться какие алгоритмы используете вы.
Спасибо за помощь сейчас нет времени заняться но наша эпопея не закончена
У меня не было этого кода, хотя по сути он не чем не отличается, только нет защит от дребезжания на энкодоре. Ради интереса залью сейчас посмотрю что получится Обновление два раза в секунду маловато
Опробовал:
Да как я и сказал нет защиты от вибрации на валу енкодера? стоя на месте от вибрации счет уменьшается или прибавляется.
Не понятно как работает эта функция?
enc_B_pin от куда он берет аргумент из прерывания на 0. То есть если 0 по ++ если нет то --?
значит если нет {} в операторе if то он берет аргумент из главной функции?
void scan_enc() { // функция работающая по прерыванию 0 подсчет импульсов
if(digitalRead(enc_B_pin))place_enc++;
else place_enc--;
}
#include <Wire.h>
#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.
============================================================
Gришлась городить вот эти двойные опросы. Но проблема не только в этом, она в том? что энкодер считает только в плюс? я просто в недоумении в чем проблема