Скетч для подсчета нужного количества импульсов и выведение в сом порт ответа

taras.pinchuk.1997
Offline
Зарегистрирован: 05.05.2017

Доброго времени суток , говорю сразу я новичок и столкнулся с проблемой подсчета импульсов с оптопары  на ардуино уно. Суть просьбы моей в следующем есть оптрон и надо чтоб при н-количестве закрываний щели оптрона в сом порт отправлялось сообщение , но я не могу понять какого типа переменную мне задавать и как вообще это делается . уровень моего знания програмирования на уровне собаки которая понимает что ей говорят но сказать не может(((. Буду благодарен если кто покажет скетч или покажет где искать. Благодарю за понимание.

renoshnik
Offline
Зарегистрирован: 11.04.2013
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

taras.pinchuk.1997 пишет:

Доброго времени суток , говорю сразу я новичок и столкнулся с проблемой подсчета импульсов с оптопары  на ардуино уно. Суть просьбы моей в следующем есть оптрон и надо чтоб при н-количестве закрываний щели оптрона в сом порт отправлялось сообщение , но я не могу понять какого типа переменную мне задавать и как вообще это делается . уровень моего знания програмирования на уровне собаки которая понимает что ей говорят но сказать не может(((. Буду благодарен если кто покажет скетч или покажет где искать. Благодарю за понимание.


принимаете переменную для нужного вам количества импульсов, увеличиваете по приходу импульса оптопары, сравниваете с нужным вам числом, если совпало - выводите в порт

taras.pinchuk.1997
Offline
Зарегистрирован: 05.05.2017

какую лучше функцию для этого использовать? Я пробовал через if но не могу сделать так чтобы на этой функции зацыклилось до момента достижения переменной требуемого количества импульсов . Также интересует момент как прописать в коде так чтобы считывалось само изменение а не состояние датчика. 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

taras.pinchuk.1997 пишет:

какую лучше функцию для этого использовать? Я пробовал через if но не могу сделать так чтобы на этой функции зацыклилось до момента достижения переменной требуемого количества импульсов . Также интересует момент как прописать в коде так чтобы считывалось само изменение а не состояние датчика. 

Скидывайте код, тут помогут поправить
Я помогу начать )))
 

unsigned int schetchik = 0;
unsigned int data_s = 500;  // при числе импульсов не более 65535

void read_optron()
{
  // здесь считываем импульсы, функция не возвращает значения но изменяет глобальную переменную
  // ГУРУ поправят, как надо делать по учебнику )))
}
void setup() {
  Serial.begin(9600); // настроим скорость порта
  
}

void loop() {
  read_optron();
  if(schetchik>=data_s){
    Serial.println(" ваше сообщение в порт");
    schetchik = 0;        // обнуляем счётчик, хорошее дело начинай сначала
  }
}

 

taras.pinchuk.1997
Offline
Зарегистрирован: 05.05.2017

Как то так , знаю не правильно но не могу понять куда двигатся. Прошу строго не судить.

unsigned int schetchik = 3;
unsigned int data_s = 3;  // при числе импульсов не более 65535

void read_optron()
{
 pinMode (schetchik,INPUT); // здесь считываем импульсы, функция не возвращает значения но изменяет глобальную переменную
  // ГУРУ поправят, как надо делать по учебнику )))
}
void setup() {
  Serial.begin(9600); // настроим скорость порта
  
}

void loop() {
  read_optron();
  if(schetchik>=data_s){
    Serial.println(" ваше сообщение в порт");
    schetchik = 0;        // обнуляем счётчик, хорошее дело начинай сначала
  }
}

 

okta
Offline
Зарегистрирован: 10.01.2015

Двигаться к началу

taras.pinchuk.1997
Offline
Зарегистрирован: 05.05.2017

ua6em , не разобрался в вашем скетче попробывал вот так но в порт все ремя вылетает ок 

int ar = 3; // нужный пин 
int a = 0; // переменная
int b = 5; // нужное число импульсов
void setup() {

pinMode (ar,INPUT);
Serial.begin(9600);
}

void loop() {

if (a != b){
if (digitalRead(ar) == HIGH)
{
  if (digitalRead(ar)== LOW)
  {a+1;
    }
  }
  Serial.println ("ok");
  }
}

 

kasper007
Offline
Зарегистрирован: 23.05.2016

потому как чушь собачья с 13 по 16 строку. а 16 строчка так вообще ноу-хау

volatile int a = 0; // переменная
int b = 5; // нужное число импульсов
int ar = 3; // нужный пин

 
 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(digitalPinToInterrupt(ar), imp_detect, RISING);
 }

 void loop()
 {
   if (a == b)  { 
      Serial.println ("ok");
      a = 0;
      }
 }

 void imp_detect()
 {
   a++;
 }

Мне кажется вот так это самое простое, что можно придумать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

taras.pinchuk.1997 пишет:

Как то так , знаю не правильно но не могу понять куда двигатся. Прошу строго не судить.

unsigned int schetchik = 3;
unsigned int data_s = 3;  // при числе импульсов не более 65535

void read_optron()
{
 pinMode (schetchik,INPUT); // здесь считываем импульсы, функция не возвращает значения но изменяет глобальную переменную
  // ГУРУ поправят, как надо делать по учебнику )))
}
void setup() {
  Serial.begin(9600); // настроим скорость порта
  
}

void loop() {
  read_optron();
  if(schetchik>=data_s){
    Serial.println(" ваше сообщение в порт");
    schetchik = 0;        // обнуляем счётчик, хорошее дело начинай сначала
  }
}

строка 6 конечно неправильная, schetchik это не номер пина к которому подключен датчик, это переменная в которой хранится значение считываемое с этого счетчика

int Pin_schetchik = 3;
unsigned int schetchik = 3;

unsigned int data_s = 3;  // при числе импульсов не более 65535

void read_optron()
{
//digitalRead();
// здесь считываем импульсы, функция не возвращает значения но изменяет глобальную переменную
// ГУРУ поправят, как надо делать по учебнику )))
}
void setup() {
  Serial.begin(9600); // настроим скорость порта
  pinMode (Pin_schetchik,INPUT);
  
}

void loop() {
  read_optron();
  if(schetchik>=data_s){
    Serial.println(" ваше сообщение в порт");
    schetchik = 0;        // обнуляем счётчик, хорошее дело начинай сначала
  }
}
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kasper007 пишет:

потому как чушь собачья с 13 по 16 строку. а 16 строчка так вообще ноу-хау

volatile int a = 0; // переменная
int b = 5; // нужное число импульсов
int ar = 3; // нужный пин

 
 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(digitalPinToInterrupt(ar), imp_detect, RISING);
 }

 void loop()
 {
   if (a >= b)  { 
      Serial.println ("ok");
      a = 0;
      }
 }

 void imp_detect()
 {
   a++;
 }

Мне кажется вот так это самое простое, что можно придумать.

Поправил выше, вы оператор присваивания применили, надо сравнения

kasper007
Offline
Зарегистрирован: 23.05.2016

ua6em пишет:

kasper007 пишет:

.....

   if (a >= b)  { 

.....

Поправил выше, вы оператор присваивания применили, надо сравнения

Да вроде все верно было у меня:

a == b - это сравнение ведь????  присваивание было бы a=b

Операторы сравнения

x == y (x равно y)

 x != y (x не равно y)

 x < y (x меньше чем y) 

 x > y (x больше чем y)

 x <= y (x меньше чем или равно y)

 x >= y (x больше чем или равно y)

taras.pinchuk.1997
Offline
Зарегистрирован: 05.05.2017

kasper007 пишет:

потому как чушь собачья с 13 по 16 строку. а 16 строчка так вообще ноу-хау

volatile int a = 0; // переменная
int b = 5; // нужное число импульсов
int ar = 3; // нужный пин

 
 void setup()
 {
   Serial.begin(9600);
   attachInterrupt(digitalPinToInterrupt(ar), imp_detect, RISING);
 }

 void loop()
 {
   if (a == b)  { 
      Serial.println ("ok");
      a = 0;
      }
 }

 void imp_detect()
 {
   a++;
 }

Мне кажется вот так это самое простое, что можно придумать.

спасибо , знаю знаний мало но хочется учится по принцыпу есть задача придумай решение , еще раз спасибо)

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

kasper007 пишет:

ua6em пишет:

kasper007 пишет:

.....

   if (a >= b)  { 

.....

Поправил выше, вы оператор присваивания применили, надо сравнения

Да вроде все верно было у меня:

a == b - это сравнение ведь????  присваивание было бы a=b

Операторы сравнения

x == y (x равно y)

 x != y (x не равно y)

 x < y (x меньше чем y) 

 x > y (x больше чем y)

 x <= y (x меньше чем или равно y)

 x >= y (x больше чем или равно y)

Зарапортоваллсси )))
Всё правильно было!!!
А, редкая конструкция