счётчик на ардуино
- Войдите на сайт для отправки комментариев
Пт, 03/07/2020 - 11:51
Доброго времени суток Уважаемые форумчане ! Помогите решить проблему - потребовался мне счетчик - код слепил из нескольких ! железо собрано, но проблема в том что все отрабатывает - кроме самого счётчика который зацеплен на 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); } { } } } } }
Первое, что Вам нужно сделать - отделить мух от котлет и чётко ответить на простой вопрос:
что именно не работает: «счётчик не считает» или «на дисплей данные не выводятся»?
Для этого надо знать, что именно печатается в строке №142. Вы это скрываете от нас. Там печатается правильные значения? Они Вас устраивают? Если да, то проблема в выводе на дисплей, если нет, то забудьте пока про дисплей и добейтесь, чтобы там было всё правильно.
Ну, и кроме того, нелишне посмотреть на код. Например, что за глубокомыслие спрятано в строках №№137 и 138? Если проверка показала, что y равен 1, зачем ему ещё раз присваивать 1? Для надёжности?
Но в первую очередь, определитесь, что именно у Вас не работает.
Зачем так сложно ?
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;}
}
сам код счётчика взял с примера на сайте ардублок. если залить только код счетчика - то все корректно работает! в написании кода я 0 ! слепил из кусков.. проблема возникла когда вставил кусок кода с кнопками и выводом реле на 12 пине... всё отрабатывает, кроме самого счетчика...
Kakmyc,
«Не будите спящую собаку»!
Сейчас ТС начнёт вывод на экран из программы обработки прерывания вызывать, выяснится, что I2C при закрытых прерываниях не работает. В общем, проблем появится сильно больше, чем решится. Пожалейте ТС и «не стреляйте в пианиста ...»
в написании кода я 0
А в умении читать и понимать о чём Вас спрашивают?
Вам задали простой вопрос - в "строке №142 печатается то, что нужно? или нет?". Вы выдали 279 букв ни о чём, о а ответа на вопрос так и не поступило.
до того момента как вставил кусок кода с кнопками -да, на дисплее отображалось количество импульсов.. а теперь же там просто пусто... хотя сигнал приходит..
Простите, но в третий раз спрашивать Вас насчёт строки №142 и что в ней печатается (то, что надо или не то) я не буду- закончился лимит. Не хотите отвечать на вопросы - разбирайтесь сами.
в мониторе порта вообще ничего нет.
Pred161, для начала разберитесь с открывающими и закрывающими скобками. Часть из них явно лишняя.
Потом посмотрите на переменную buttonwasup или как там ее - вы ее для чего завели? От состояния кнопки она не зависит. Ну далее плсмотрите, при каких условиях у вас включается счетчик. Он у вас работает далеко не всегда
Ну и добавлю - если в написании кода вы ноль - что вы вообще забыли на сайте программистов? Писать код за вас никто не будет
Уважаемый ! Я и не прошу написать мне код... я понимаю что для *вас*(программистов) - тут не составит труда просто увидеть ошибки ( в коде который я приложил) - и тыкнуть носом в определенном направлении... А по коду не могу понять - почему когда убираю кусок кода с кнопками - счётчик работает ! как только вписываю его обратно - все мертво !((
Сделайте то, что написано в #9
почистил внизу скобки, удалил строки 115,116,123,124.. (говорю же код слепил из нескольких не сам писал я их ) . и все заработало как нужно. Огромное спасибо за указание направления !!!
в мониторе порта вообще ничего нет.
Кто или что мешал сказать об этом, когда я дважды спрашивал что там печатается? А сейчас, простите, уже поздно.