Счетчик поступающих на вход Ардуино сигналов

crow62
Offline
Зарегистрирован: 18.02.2020

Плата ардуино уно, дисплей на контроллере hd44780. На вход ардуино будут поступать сигналы(подаваться питание 5 вольт от внешней независимой цепи в какой то момент времени и через определённое время пропадать, то есть импульсы длительные, более 1 секунды) каждый сигнал должен быть зарегистрирован в дисплее, то есть должна постоянно светиться цифра соответствующая количеству прошедших сигналов. Так же должна быть защита от низковольтных наводок, чтоб их не регистрировал(порог сигнала условно выбран "500")

Подскажите по синтаксису кода, что не так? почему когда надо цифра на дисплее не приращивается?( то есть когда сигнал снова превышает порог, опять записывается единица в дисплей)

 

 
mykaida
mykaida аватар
Offline
Зарегистрирован: 12.07.2018

Во первых - вставьте программу как положено, а во вторых - а с какой позиции Вы печатаете на экран? И в третьих (должно-же быть) - вставьте полную программу - то что Вы вставили не скомпилируется.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Код не смотрел, читайте #1. Но одна строчка бросилась в глаза своей бьющей наотмашь экзистенциальностью.

analogRead(A0*5./1024)

Глубоко. Я бы даже сказал, концептуально. Наверное, стоит рассмотреть это как диссонансные отношения компонентов минимального дискурса на основе сравнения их на двух уровнях субстанциональном и семантическом, что должно привести либо к аналогии, либо к парсическому диссонансу.

 

kostyamat
Offline
Зарегистрирован: 16.11.2017

ТС, шо это?
float temp(analogRead(A0*5./1024));

crow62
Offline
Зарегистрирован: 18.02.2020
/*
  LiquidCrystal Library - Hello World

 Demonstrates the use a 16x2 LCD display.  The LiquidCrystal
 library works with all LCD displays that are compatible with the
 Hitachi HD44780 driver. There are many of them out there, and you
 can usually tell them by the 16-pin interface.

 This sketch prints "Hello World!" to the LCD
 and shows the time.

  The circuit:
 * LCD RS pin to digital pin 12
 * LCD Enable pin to digital pin 11
 * LCD D4 pin to digital pin 5
 * LCD D5 pin to digital pin 4
 * LCD D6 pin to digital pin 3
 * LCD D7 pin to digital pin 2
 * LCD R/W pin to ground
 * LCD VSS pin to ground
 * LCD VCC pin to 5V
 * 10K resistor:
 * ends to +5V and ground
 * wiper to LCD VO pin (pin 3)

 Library originally added 18 Apr 2008
 by David A. Mellis
 library modified 5 Jul 2009
 by Limor Fried (http://www.ladyada.net)
 example added 9 Jul 2009
 by Tom Igoe
 modified 22 Nov 2010
 by Tom Igoe

 This example code is in the public domain.

 http://www.arduino.cc/en/Tutorial/LiquidCrystal
 */

// include the library code:
#include <LiquidCrystal.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
     
}



void loop() {
float temp(analogRead(A0*5./1024)); 
  int y=1;
  int i=0;
  boolean z= true;
  for(int x=0;x<5;x++){
    if(temp>500){
    lcd.print(y);
    delay(1000);
      i=y-1;
      z= false;
     
    } else{
      if (y-i==1 && z==false){
      y++;
      }
      else{
      continue;
       
      }
    }
  }
}
 
  
  

mykaida пишет:

Во первых - вставьте программу как положено, а во вторых - а с какой позиции Вы печатаете на экран? И в третьих (должно-же быть) - вставьте полную программу - то что Вы вставили не скомпилируется.

я не печатаю-запускаю моделирование, и изменяю значение потенциометра, то влево то вправо, и смотрю реакцию на дисплее. Может это неправильно, но напряжение на входе А0 же меняется.

crow62
Offline
Зарегистрирован: 18.02.2020

kostyamat пишет:
ТС, шо это? float temp(analogRead(A0*5./1024));

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

crow62
Offline
Зарегистрирован: 18.02.2020

ЕвгенийП пишет:

Код не смотрел, читайте #1. Но одна строчка бросилась в глаза своей бьющей наотмашь экзистенциальностью.

analogRead(A0*5./1024)

Глубоко. Я бы даже сказал, концептуально. Наверное, стоит рассмотреть это как диссонансные отношения компонентов минимального дискурса на основе сравнения их на двух уровнях субстанциональном и семантическом, что должно привести либо к аналогии, либо к парсическому диссонансу.

 

ну хватит троллить((, лучше подскажите как грамотно написать

b707
Offline
Зарегистрирован: 26.05.2017

crow62 пишет:

ну хватит троллить((, лучше подскажите как грамотно написать

Может вы для начала учебник прочитаете? потому что если вы не видите в этой строке ошибок - а они тут грубейшие и их по меньшей мере три - учить вас чему-то бессмысленно

nik182
Offline
Зарегистрирован: 04.05.2015
DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

нашкрябаешь тыщу по сусекам - приходи: 

http://arduino.ru/forum/ishchu-ispolnitelya/schetchik-vkhodnykh-signalov#comment-517490

Green
Offline
Зарегистрирован: 01.10.2015

Дед опять с утра добрый. Что бы это значило?)

test1
Offline
Зарегистрирован: 06.01.2020

crow62 пишет:

Плата ардуино уно, дисплей на контроллере hd44780. На вход ардуино будут поступать сигналы(подаваться питание 5 вольт от внешней независимой цепи в какой то момент времени и через определённое время пропадать, то есть импульсы длительные, более 1 секунды) каждый сигнал должен быть зарегистрирован в дисплее, то есть должна постоянно светиться цифра соответствующая количеству прошедших сигналов. Так же должна быть защита от низковольтных наводок, чтоб их не регистрировал(порог сигнала условно выбран "500")

Подскажите по синтаксису кода, что не так? почему когда надо цифра на дисплее не приращивается?( то есть когда сигнал снова превышает порог, опять записывается единица в дисплей)

 

 

По синтаксису кода "не так" практически всё, часть Вам уже показали - читать аналоговый сигнал со входа АЦП надо иначе. Тут есть ссыль как пользоваться функцией analogRead().

Кроме этого, стоит почитать про нумерацию и использование пинов у Ардуино .. Вы этот урок прогуляли.

Ещё Ардуина как-бы не имеет вещественной арифметики от слова совсем. Использовать вещественный числа и тем более, там где они не нужны даже по заданию - не комильфо ни разу.

И да, задание таки "подсчитать количество импульсов" .. это правильно на Ардуино делается счетным входом таймера, а вовсе не аналоговым входом АЦП.

И ещё: delay(1000) на целую секунду загоняет Ардуино в "сон", и никакой "импульс" в это время посчитан не будет. Он будет тупо пропущен.

И ещё .. сам алгоритм "подсчета" кмк, сильно как-бы это помягше .. не ожиданен. Не вникал, но не думаю что "рабочий".. наверное поэтому и "не записывается". Попробуйте с ручкой или карандашом и бумажкой пройтись по своему алгоритму как "исполнитель" и выполнить все строго как написано .. думаю будете сильно удивлены. Если справитесь.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Green пишет:

Дед опять с утра добрый. Что бы это значило?)

Чойта?  Был бы добрый - бесплатно бы выклал, а так - пить то ненашто до 25-го, вот и собираю бутылки, где придёца. 

Green
Offline
Зарегистрирован: 01.10.2015

Ну да. А тут и праздник на носу...

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Что за ардуина такая , у которой столько пинов аналоговых , что их нумерация только во float влезает ?
На таких можно свою Матрицу замутить.

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

у меня есть вторая часть кода, на прерывании, первой нету, это используя компаратор ардуины привести сигнал к требуемым параметрам, можно поставить внешний LM393... получится цепочка: формирователь сигнала - программный счётчик

volatile unsigned long impulse = 0;

void Summ(void){ 
  impulse++;
      }
      
void setup() {
    attachInterrupt(1, Summ, RISING );
}

void loop() {
 }