#76 Re: Програмування Arduino » Математика. » 2016-10-15 11:01:55

нужно сравнивать числа и если одно из них более  другого  на константу или переменную то истина

#77 Програмування Arduino » Математика. » 2016-10-15 01:13:42

goodspeedmen
відповідей: 6

Имеется в виду тема общая делиться опытом, аргументы операторов и прочее... 

К примеру? мне нужен аргумент для двух переменных равенство которых было если вторая больше первой на 3(константу) или переменную

if ((x = y) = (y>3)) получается равенство но что то я не уверен sad

#78 Програмування Arduino » Lcd » 2016-10-15 00:45:22

goodspeedmen
відповідей: 22

Ребята объясните как отображают число с запятой на экране. Я использую переменную int (000 - 999 сотни) и byte (0 - 9 десятичную) но проблема в том что когда счётчик переходит через 100.0 а потом возвращается назад получается 99.90 как с этим бороться какие алгоритмы используете вы.

#79 Re: Програмування Arduino » энкодер » 2016-10-13 15:39:14

Спасибо за помощь сейчас нет времени заняться но наша эпопея не закончена smile

#80 Re: Програмування Arduino » энкодер » 2016-10-03 18:35:26

У меня не было этого кода, хотя по сути он не чем не отличается, только нет защит от дребезжания на энкодоре. Ради интереса залью сейчас посмотрю что получится wink Обновление два раза в секунду маловато neutral
Опробовал:
Да как я и сказал нет защиты от вибрации на валу енкодера? стоя на месте от вибрации счет уменьшается или прибавляется.

Не понятно как работает эта функция?
enc_B_pin от куда он берет аргумент из прерывания на 0. То есть если 0 по ++ если нет то --?
значит если нет {} в операторе if  то он берет аргумент из главной функции?

void scan_enc() {                                           // функция работающая по прерыванию 0 подсчет импульсов
  if(digitalRead(enc_B_pin))place_enc++;
  else place_enc--;
    }

#81 Програмування Arduino » энкодер » 2016-10-03 16:47:08

goodspeedmen
відповідей: 5

#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ришлась городить вот эти двойные опросы. Но проблема не только в этом, она в том? что энкодер считает только в плюс? я просто в недоумении в чем проблема sad

Підвал форуму