счётчик на ардуино

pred161
Offline
Зарегистрирован: 11.02.2019

Доброго времени суток Уважаемые форумчане ! Помогите решить проблему - потребовался мне счетчик - код слепил из нескольких ! железо собрано, но проблема в том что все отрабатывает - кроме самого счётчика который зацеплен на 2 пин.. просто на считает ( от слова совсем ) ! импульсы с датчика поступают (развязано через 817) а на дисплей данные не выводятся ! помогите пожалуйста ! код прилагаю : 

#include "pitches.h"                        // заголовочный файл с названиями нот и значениями частот
#include <Wire.h>
#include <LCD_1602_RUS.h>

#define SPEAKER 11                          // вывод для подключения динамика
// массив нот
int notes[] = {


  NOTE_B7, NOTE_D6, NOTE_B7, 0,

  NOTE_B7, NOTE_D6, NOTE_B7, 0,

  NOTE_F7, NOTE_D7, NOTE_C7, NOTE_B7, NOTE_B7, NOTE_B7, NOTE_C7, NOTE_D7,

  NOTE_E7, NOTE_D6, NOTE_B7, 0

};

boolean button1WasUp = true;
boolean button2WasUp = true;

// массив длительностей звучания нот (в мс)

int times[] = {

  250, 250, 250, 250,

  250, 250, 250, 250,

  125, 125, 150, 125, 125, 125, 150, 125,

  250, 250, 250, 250

};



#include <Wire.h>
#include <LCD_1602_RUS.h>





LCD_1602_RUS lcd(0x27, 16, 2);

long  x;
long  y;
long  z;

void setup()




{
     pinMode(12, OUTPUT);
   digitalWrite(12, LOW);

   pinMode(7, INPUT_PULLUP);
   pinMode(4, INPUT_PULLUP);
  {
    lcd.init();
    lcd.backlight();

    lcd.backlight();
    lcd.setCursor(2, 0);
    lcd.print("ALC 2020");
    lcd.setCursor(4, 1);
    lcd.print("arduino.ru");


  }
  for (int i = 0; i < 20; i++)
  {
    tone(SPEAKER, notes[i], times[i]);
    delay(times[i]);



  }
  Serial.begin(9600);
  lcd.clear();
  lcd.init();
  lcd.backlight();



  x = 0;

  y = 0;

  z = 0;

  pinMode(2, INPUT);
  lcd.setCursor(0, 0);
  lcd.print("Этикеток:");
  lcd.backlight();


}





void loop()
{

   // узнаем, отпущены ли две кнопки сейчас
   boolean button1IsUp = digitalRead(7);
   boolean button2IsUp = digitalRead(4);

   // если кнопка 1 была отпущена и не отпущена
   if (button1WasUp && !button1IsUp) {

      // повторно считываем сигнал с кнопки 1
      button1IsUp = digitalRead(7);
      if (!button1IsUp) { digitalWrite(12, LOW); }
   }

   // если кнопка 2 была отпущена и не отпущена
   if (button2WasUp && !button2IsUp) {

      // повторно считываем сигнал с кнопки 2
      button2IsUp = digitalRead(4);
      if (!button2IsUp) { digitalWrite(12, HIGH); }


  {
    x = digitalRead(2);
    if (x == 0) {
      y = 1;

    }
    if (y == 1) {
      y = 1;
      if (x == 1) {
        y = 0;
        z = z + 1;
        Serial.println(z);
        lcd.setCursor(10, 0);
        lcd.print(z);



      }


      {

      }
    }
  }
   }
    }

 

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

Первое, что Вам нужно сделать - отделить мух от котлет и чётко ответить на простой вопрос:

что именно не работает: «счётчик не считает» или «на дисплей данные не выводятся»?

Для этого надо знать, что именно печатается в строке №142. Вы это скрываете от нас. Там печатается правильные значения? Они Вас устраивают? Если да, то проблема в выводе на дисплей, если нет, то забудьте пока про дисплей и добейтесь, чтобы там было всё правильно.

Ну, и кроме того, нелишне посмотреть на код. Например, что за глубокомыслие спрятано в строках №№137 и 138? Если проверка показала, что y равен 1, зачем ему ещё раз присваивать 1? Для надёжности?

Но в первую очередь, определитесь, что именно у Вас не работает.

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

Зачем так сложно ?
attachInterrupt() кто то запретил использовать ?

volatile int value=0;

void counter(){
value++;}

void setup(){
attachInterrupt(0,counter,RISING);//снимаем сигнал по высокому уровню пина 2
Serial.begin(9600);
Serial.print(value);
}

void loop(){
static int old_value=value;
if(old_value!=value){Serial.println(value);old_value=value;}
}

pred161
Offline
Зарегистрирован: 11.02.2019

сам код счётчика взял с примера на сайте ардублок. если залить только код счетчика - то все корректно работает! в написании кода я 0 ! слепил из кусков.. проблема возникла когда вставил кусок кода с кнопками и выводом реле на 12 пине... всё отрабатывает, кроме самого счетчика...

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

Kakmyc,

«Не будите спящую собаку»!

Сейчас ТС начнёт вывод на экран из программы обработки прерывания вызывать, выяснится, что I2C при закрытых прерываниях не работает. В общем, проблем появится сильно больше, чем решится. Пожалейте ТС и «не стреляйте в пианиста ...»

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

pred161 пишет:

в написании кода я 0

А в умении читать и понимать о чём Вас спрашивают?

Вам задали простой вопрос - в "строке №142 печатается то, что нужно? или нет?". Вы выдали 279 букв ни о чём, о а ответа на вопрос так и не поступило.

pred161
Offline
Зарегистрирован: 11.02.2019

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

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

Простите, но в третий раз спрашивать Вас насчёт строки №142 и что в ней печатается (то, что надо или не то)  я не буду- закончился лимит. Не хотите отвечать на вопросы - разбирайтесь сами.

pred161
Offline
Зарегистрирован: 11.02.2019

в мониторе порта вообще ничего нет.

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

Pred161, для начала разберитесь с открывающими и закрывающими скобками. Часть из них явно лишняя.
Потом посмотрите на переменную buttonwasup или как там ее - вы ее для чего завели? От состояния кнопки она не зависит. Ну далее плсмотрите, при каких условиях у вас включается счетчик. Он у вас работает далеко не всегда

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

Ну и добавлю - если в написании кода вы ноль - что вы вообще забыли на сайте программистов? Писать код за вас никто не будет

pred161
Offline
Зарегистрирован: 11.02.2019

Уважаемый ! Я и не прошу написать мне код... я понимаю что для *вас*(программистов) - тут не составит труда просто увидеть ошибки ( в коде который я приложил) - и тыкнуть носом в определенном направлении... А по коду не могу понять - почему когда убираю кусок кода с кнопками - счётчик работает ! как только вписываю его обратно - все мертво !((

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

Сделайте то, что написано в #9

pred161
Offline
Зарегистрирован: 11.02.2019

почистил внизу скобки, удалил строки 115,116,123,124.. (говорю же код слепил из нескольких не сам писал я их ) . и все заработало как нужно. Огромное спасибо за указание направления !!! 

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

pred161 пишет:

в мониторе порта вообще ничего нет.

Кто или что мешал сказать об этом, когда я дважды спрашивал что там печатается? А сейчас, простите, уже поздно.