Скетч для подсчета нужного количества импульсов и выведение в сом порт ответа
- Войдите на сайт для отправки комментариев
Чт, 11/05/2017 - 19:03
Доброго времени суток , говорю сразу я новичок и столкнулся с проблемой подсчета импульсов с оптопары на ардуино уно. Суть просьбы моей в следующем есть оптрон и надо чтоб при н-количестве закрываний щели оптрона в сом порт отправлялось сообщение , но я не могу понять какого типа переменную мне задавать и как вообще это делается . уровень моего знания програмирования на уровне собаки которая понимает что ей говорят но сказать не может(((. Буду благодарен если кто покажет скетч или покажет где искать. Благодарю за понимание.
искать здесь http://arduino.ru/forumy/ishchu-ispolnitelya
Доброго времени суток , говорю сразу я новичок и столкнулся с проблемой подсчета импульсов с оптопары на ардуино уно. Суть просьбы моей в следующем есть оптрон и надо чтоб при н-количестве закрываний щели оптрона в сом порт отправлялось сообщение , но я не могу понять какого типа переменную мне задавать и как вообще это делается . уровень моего знания програмирования на уровне собаки которая понимает что ей говорят но сказать не может(((. Буду благодарен если кто покажет скетч или покажет где искать. Благодарю за понимание.
принимаете переменную для нужного вам количества импульсов, увеличиваете по приходу импульса оптопары, сравниваете с нужным вам числом, если совпало - выводите в порт
какую лучше функцию для этого использовать? Я пробовал через if но не могу сделать так чтобы на этой функции зацыклилось до момента достижения переменной требуемого количества импульсов . Также интересует момент как прописать в коде так чтобы считывалось само изменение а не состояние датчика.
какую лучше функцию для этого использовать? Я пробовал через 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; // обнуляем счётчик, хорошее дело начинай сначала } }Как то так , знаю не правильно но не могу понять куда двигатся. Прошу строго не судить.
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; // обнуляем счётчик, хорошее дело начинай сначала } }Двигаться к началу
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"); } }потому как чушь собачья с 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++; }Мне кажется вот так это самое простое, что можно придумать.
Как то так , знаю не правильно но не могу понять куда двигатся. Прошу строго не судить.
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; // обнуляем счётчик, хорошее дело начинай сначала } }потому как чушь собачья с 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++; }Мне кажется вот так это самое простое, что можно придумать.
Поправил выше, вы оператор присваивания применили, надо сравнения
.....
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)
потому как чушь собачья с 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++; }Мне кажется вот так это самое простое, что можно придумать.
спасибо , знаю знаний мало но хочется учится по принцыпу есть задача придумай решение , еще раз спасибо)
.....
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)
Зарапортоваллсси )))
Всё правильно было!!!
А, редкая конструкция