Официальный сайт компании Arduino по адресу arduino.cc
Помогите со скетчем для ардуино
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Чт, 19/12/2019 - 22:08
#include <Wire.h> #include <DS3231.h> #include <TFT.h> #include <SPI.h> #define cs 10 #define dc 9//(A0 на текстолите) #define rst 8 #define Ox A6 #define Oy A7 #define button 3 TFT TFTscreen = TFT(cs, dc, rst); DS3231 clock; RTCDateTime dt; void setup() { pinMode(3, INPUT_PULLUP); TFTscreen.begin(); attachInterrupt(1, menu, FALLING); clock.begin(); //при сетапе выходит блок меню (самый нижний), от этого нужно избавиться } void loop() { TFTscreen.background(0, 0, 0); dt = clock.getDateTime(); TFTscreen.stroke(255,255,255); TFTscreen.setTextSize(5); TFTscreen.text(clock.dateFormat("H:i", dt),7,10); TFTscreen.setTextSize(2); TFTscreen.stroke(242, 133, 7); TFTscreen.text(clock.dateFormat("d.m.Y", dt),20,110); delay(30000); } void menu() { TFTscreen.background(0,0,0); TFTscreen.stroke(255,255,255); TFTscreen.setTextSize(2); TFTscreen.text("Alarm",10,10); TFTscreen.text("Date",110,10); TFTscreen.text("Time",110,27); TFTscreen.text("Exit",60,100); }
И да, почему это происходит???
(Nano 328p, ST7735)
И еще, как заставить мк при вызове функции menu сидеть на ней и ждать следующих действий? (типа если кнопка снова нажата то обратно в loop а если что-то другое, например уровень наклона джойстика по какой-либо оси, то переход в другое меню)
Ну, во-перых прерывание по изменению пина рекомендуется назначать так:
Во-вторых в прерывании не надо обращаться к библиотекам. В большинстве случае это приводит к полной или частичной неработаоспобноси. В прерывании лучше устанавливать флаг, а потом в loop() на него реагировать.
А происходит это потому, что срабатывает прерывание. Как у вас кнопка подключена?
И да, почему это происходит???
Мля, что происходит?
Почему здесь появляются вопрошающие с секретными вопросами, типа тебя?
Да, хрен вас знает, откуда вы берётесь!
Помогите со скетчем для ардуино
Завтра поможем, как раз пятница!
еще один решил, что "многозадачность" делается через прерывания...
На что только не идут лентяя. лишь бы не изучать миллис...
Без схемы трудно понять "что происходит", но похоже, что кнопка подключена неправильно.
еще один решил, что "многозадачность" делается через прерывания...
Во всех "больших" ОС типа BSD, Linux, Windows многозадачность делается как раз через прерывания.
Дак у них есть поддержка со стороны проца, с его таблицами LDT, сегментами TSS и прочей хней. У малышей такова щастья нет.
Дак у них есть поддержка со стороны проца, с его таблицами LDT, сегментами TSS и прочей хней. У малышей такова щастья нет.
У FreeRTOS, которая и на АВР-ах может запускаться, тоже на прерываниях многозадачность устроена. Да и твой таймер лист на них же.
Да и твой таймер лист на них же.
И не поспоришь ведь. :)
Извиняюсь,
И да, почему это происходит???
Мля, что происходит?
Почему здесь появляются вопрошающие с секретными вопросами, типа тебя?
Да, хрен вас знает, откуда вы берётесь!
Тьфу ты! Точно!) (там в комментарии в коде написана проблема, от которой я хочу избавиться) Когда код выполняется, перед включением дисплея пробегает та самая менюшка, где написано "Выход, Дата время, Будильник". Просто не совсем понятно почему при начале работы скетча выходит самая последняя функция, хотя вроде как этого не должно быть
Сдаётся мне, что на кнопке выход SEL подтянут резистором к земле, поэтому прерывание и срабатывает. Посмотрите на модуле кнопки, что там к этому выходу вкорячено?
Сдаётся мне, что на кнопке выход SEL подтянут резистором к земле, поэтому прерывание и срабатывает. Посмотрите на модуле кнопки, что там к этому выходу вкорячено?
Да ничего вроде, от SEL идет к 3-му пину на нано
Ну, во-перых прерывание по изменению пина рекомендуется назначать так:
Во-вторых в прерывании не надо обращаться к библиотекам. В большинстве случае это приводит к полной или частичной неработаоспобноси. В прерывании лучше устанавливать флаг, а потом в loop() на него реагировать.
А происходит это потому, что срабатывает прерывание. Как у вас кнопка подключена?
Компилятор выделяет этот участок
и не хочет с ним никак взаимодействовать
зачем вам вообще прерывание для работы с меню?
Сдаётся мне, что на кнопке выход SEL подтянут резистором к земле, поэтому прерывание и срабатывает. Посмотрите на модуле кнопки, что там к этому выходу вкорячено?
Да ничего вроде, от SEL идет к 3-му пину на нано
НА ПЛАТЕ кнопки смотрите по дорожкам. Ещё раз: СКОРЕЕ ВСЕГО, выход SEL АППАРАТНО притянут к земле резистором, и слабенькая встроенная подтяжка к питанию, которая INPUT_PULLUP - мимо кассы. Проверить - просто: подключите кнопку к питанию - и посмотрите уровень на SEL при ненажатой кнопке.
Сдаётся мне, что на кнопке выход SEL подтянут резистором к земле, поэтому прерывание и срабатывает. Посмотрите на модуле кнопки, что там к этому выходу вкорячено?
Да ничего вроде, от SEL идет к 3-му пину на нано
НА ПЛАТЕ кнопки смотрите по дорожкам. Ещё раз: СКОРЕЕ ВСЕГО, выход SEL АППАРАТНО притянут к земле резистором, и слабенькая встроенная подтяжка к питанию, которая INPUT_PULLUP - мимо кассы. Проверить - просто: подключите кнопку к питанию - и посмотрите уровень на SEL при ненажатой кнопке.
да на плате, на плате. Никуда не идет, просто под металлический экран, дальше ничего нет, не знаю
да на плате, на плате. Никуда не идет, просто под металлический экран, дальше ничего нет, не знаю
Ок, третий заход: взять мультиметр, подать питание на плату кнопки, и померять уровень на выходе SEL - это ОЧЕНь СЛОЖНО? Если между GND и SEL при поданном на плату кнопки питании будет 0В - поздравляю, у вас выход притянут к земле, поэтому при старте срабатывает прерывание, поэтому и такое поведение.
Проверить также можно, поменяв в коде INPUT_PULLUP на INPUT, а FALLING на RISING.
да на плате, на плате. Никуда не идет, просто под металлический экран, дальше ничего нет, не знаю
Ок, третий заход: взять мультиметр, подать питание на плату кнопки, и померять уровень на выходе SEL - это ОЧЕНь СЛОЖНО? Если между GND и SEL при поданном на плату кнопки питании будет 0В - поздравляю, у вас выход притянут к земле, поэтому при старте срабатывает прерывание, поэтому и такое поведение.
Проверить также можно, поменяв в коде INPUT_PULLUP на INPUT, а FALLING на RISING.
Ладно, тут мой жесткий косяк. Я сразу проверил, 4.20v, поэтому и написал, что ничего нет
Ладно, тут мой жесткий косяк. Я сразу проверил, 4.20v, поэтому и написал, что ничего нет
Ок, а что будет, ели физически отключить выход SEL от пина 3 ардуины?
Ладно, тут мой жесткий косяк. Я сразу проверил, 4.20v, поэтому и написал, что ничего нет
Ок, а что будет, ели физически отключить выход SEL от пина 3 ардуины?
нуль
Ладно, тут мой жесткий косяк. Я сразу проверил, 4.20v, поэтому и написал, что ничего нет
Ок, а что будет, ели физически отключить выход SEL от пина 3 ардуины?
нуль
Что - нуль? Функция menu не отрабатывает? Прям клещами вытягиваю из вас инфу, как будто это мне надо проблему решить.
нет, там 0 вольт, INPUT_PULLUP жеж )))
нет, там 0 вольт, INPUT_PULLUP жеж )))
Да я примерно так и догадался, что мерялось при подключенном контакте к пину 3. Но начальника транспортного цеха послушать таки хотелось бы :))
Ладно, тут мой жесткий косяк. Я сразу проверил, 4.20v, поэтому и написал, что ничего нет
Ок, а что будет, ели физически отключить выход SEL от пина 3 ардуины?
нуль
Что - нуль? Функция menu не отрабатывает? Прям клещами вытягиваю из вас инфу, как будто это мне надо проблему решить.
Ну я хз, тогда поконкретнее, я все еще о напряжении. Ноль вольт, меню перед началом работы все равно выскакивает, я уже пробовал различные вариации. И с джойстиком, и без, и менял местами вызовы, ставил перед ними delay, все бестолку.
а должно быть +5 вольт, куда всадил 3 пин, признавайся )))
Ну я хз, тогда поконкретнее, я все еще о напряжении. Ноль вольт,
Если при отключенном от пина 3 выводе SEL и подаче питания на плату кнопки, между выводом SEL и выводом GND платы кнопки - напряжение 0В, то это значит, что этот вывод подтянут к земле. Отсюда и сработка прерывания при старте. Проблема решена.
Ну я хз, тогда поконкретнее, я все еще о напряжении. Ноль вольт,
Если при отключенном от пина 3 выводе SEL и подаче питания на плату кнопки, между выводом SEL и выводом GND платы кнопки - напряжение 0В, то это значит, что этот вывод подтянут к земле. Отсюда и сработка прерывания при старте. Проблема решена.
Огромное спасибо! (посылаю энергетические волны светлой ауры в вашу сторону)