Прошло три года с начала старта топика. А я вот начал читать, мне понравилось и хотел бы предложить свой вариант кода для переключения состояния диода пятисекундными интервалами удержания кнопки, то есть нажатие менее пяти секунд не будет засчитываться, а более долгое удержание будет расценено как следующий интервал.
unsigned long Time=0;
void setup() {
pinMode(13, OUTPUT);
pinMode(12, INPUT);
digitalWrite(12, HIGH);
}
void loop() {
if (!Time&&!digitalRead(12)) Time=millis();
if (digitalRead(12)) Time=0;
if (Time&&(millis()-Time >5000)&&!digitalRead(12)) {
digitalWrite(13,!digitalRead(13));
Time=0;
}
}
А вот статья с теоретическими раскладками, расчетами, вариантами подключения нескольких кнопок к одному аналоговому входу Arduino - http://codius.ru/articles/221. Там же механизм отслеживания нажатий по фронту, по спаду. Как раз для новичков все разжевано.
Ну да. В примере 2 это цифровой выход. А 3,4 цифровой вход. Конечно вы можете прописать свои.Расматривайте этот скетч, как средство очень быстро написать программу для кнопок и реле.
Скачай архив с яндекс диска и распакуй. Это и есть полная программа.
Здравствуйте а прошу помощи как новечок в ардуино!делаю планшет в машину nexus7, подключил arduino micro к инкодеру для управления громкостью а можно ли ещё к этой же ардуино подключить кнопки на руле и задать им функции?
Не поможите с написанием кода, нужна простая функция:
есть две кнопки ТТР223 + Arduino + двух канальное реле, нужно при нажатии на кнопку 1 реле срабатывает на 3 сек. при нажатии на кнопку 2 срабатывает 2 реле на 3 сек., должна быть возможность работать одновременно.
Спасибо прочитал, попробывал, но это не тот вариант, здесь при нажатии происходит включение при еще нажатии выключение, а мне надо при нажатии включение на несколько секунд (одновибратор).
const int Rele = 9; // номер пина, подключенного к реле
// Variables will change:
int ReleState = LOW; // этой переменной устанавливаем состояние реле
long previousMillis = 0; // храним время последнего переключения реле
long interval = 1000; // интервал между включение/выключением реле (1 секунда)
void setup() {
// задаем режим выхода для порта, подключенного к реле
pinMode(Rele, OUTPUT);
pinMode(8,INPUT);
digitalWrite(9,1);
}
void loop()
{
if (digitalRead(8) == HIGH){
unsigned long currentMillis = millis();
//проверяем не прошел ли нужный интервал, если прошел то
if(currentMillis - previousMillis > interval) {
// сохраняем время последнего переключения
previousMillis = currentMillis;
// если реле не вкл, то включаем, и наоборот
if (ReleState == LOW)
ReleState = HIGH;
else
ReleState = LOW;
// устанавливаем состояния выхода, чтобы включить или выключить реле
digitalWrite(Rele, ReleState);
}
}
}
mihvlad, скорее всего вы ничего не поняли. Мне проще сделать сложную конструкцию на отработаных и надежных компонентах, чем писать простую программу и очень долго отлаживать(считай делать макетку заливать скетч и проводить бета- тестирование). И да регулярно примерно раз в две недели идет точно такая же задача.
Не поможите с написанием кода, нужна простая функция:
есть две кнопки ТТР223 + Arduino + двух канальное реле, нужно при нажатии на кнопку 1 реле срабатывает на 3 сек. при нажатии на кнопку 2 срабатывает 2 реле на 3 сек., должна быть возможность работать одновременно.
Кроме решения с delay ни чего сделать не могу!
Если по простому то то можно так.(Кнопка считается включеной если подать МИНУС)
Доброго времени суток.Написал скетч на основе примеров.Все вроде работает,но чувствую что-то не так.Суть задачи:при нажатии и удержании кнопки,запускается таймер на 2сек.По окончании 2сек выход отключается,но кнопка остается нажатой.При следующем нажатии цикл должен повториться.Огромная просьба проверить на ошибки.Вот код:
Вот кнопка (она так работает),скетч рабочий,но берут смутные сомнения,что что-то не так.
if(digitalRead(2)==HIGH)//если кнопка нажата ...
И что вы мне хотите этим сказать. Я к примеру давно не пишу, как втюхивают нам "нормы программирования в Ардуине", потому что меня давно взяли "смутные сомнения". Но стойкому народу "новичков Ардуины" мой код тяжкий, потому что перебороть свои смутные сомнения проще, чем начать поглубже изучать язык Си и программирование в целом.
Вот кнопка (она так работает),скетч рабочий,но берут смутные сомнения,что что-то не так.
if(digitalRead(2)==HIGH)//если кнопка нажата ...
И что вы мне хотите этим сказать. Я к примеру давно не пишу, как втюхивают нам "нормы программирования в Ардуине", потому что меня давно взяли "смутные сомнения". Но стойкому народу "новичков Ардуины" мой код тяжкий, потому что перебороть свои смутные сомнения проще, чем начать поглубже изучать язык Си и программирование в целом.
Если вам нужен рабочий , именно работающий код без глюков то возьмите этот #1150
А теперь по вашему. Ну нельзя так опрашивать механическую кнопку. Это полный идеотизм. Но пипл хавает, значит и пусть хавает дальше. Я не буду накидывать на чужой роток свой платок.
Огромное спасибо!Все работает как надо.Добавил еще две кнопки и два выхода.Делаю эту штуку для удаленного управления вкл\откл кондиционеров в кол-ве 4шт.Подпаиваюсь к кнопке on/off дистанц.пульта.получается Им
// Скетч расчитан на кнопки с подтяжкой резисторов 10к на землю
class Cl_Sys;// предварительно объявить о создании класса Sys для послед подключения к нему
//----------------Cl_LED------------------------------------------------------------
class Cl_LED {
byte pin; // нога для подключения светодиода
bool inv; // 0 светодиод горит при 1/ 1 светодиод горит при 0
bool stat_ON = 0, led = 0;
uint32_t time = 500, past = 0;
public:
//указатель на следующий компонент
Cl_LED *pnt_LED;
//конструктор
Cl_LED(Cl_Sys *Sys, byte _pin, bool _inv);
// setup()
void setup() {
pinMode(pin, OUTPUT);// подключить светодиод
led = 0;
digitalWrite(pin, led ^ inv) ; // погасить светодиод
}
// loop()
void loop() {
if (stat_ON && millis() - past >= time)OFF();
}
// включить светодиод
void ON() {
stat_ON = 0;
led = 1;
digitalWrite(pin, led ^ inv) ; // зажечь светодиод
}
// включить светодиод на время
void ON( uint32_t _time) {
time = _time;
stat_ON = 1;
past = millis();
led = 1;
digitalWrite(pin, led ^ inv) ; // зажечь светодиод
}
// выключить светодиод
void OFF() {
stat_ON = 0;
led = 0;
digitalWrite(pin, led ^ inv) ; // погасить светодиод
}
};
//----------------Cl_Mech_BTN------------------------------------------------------------
// класс на механич кнопку подкл к кнопке Ардуины.
class Cl_Mech_BTN {
byte pin; // номер ноги на кнопке
void (* Do)();// указатель на обработчик
bool btn, btn_old;
bool bounce = 0; // антидребезговый флаг
uint32_t past = 0 ;
public:
//указатель на следующий компонент
Cl_Mech_BTN *pnt_Mech_BTN;
//конструктор
Cl_Mech_BTN(Cl_Sys *Sys, byte _pin, void (* _Do)());
void setup() {
pinMode(pin, INPUT);// подключить кнопку
btn = digitalRead(pin); // прочитать реальное значение на выводе};
}
void loop () {
if (! bounce && btn != digitalRead(pin)) { // если прошел фронт изм на выводн
bounce = 1; // выставить флаг
past = millis(); // сделать временую засветку
}
else if ( bounce && millis() - past >= 5 ) { // если прошло антидребезговое время
bounce = 0; // то снять флаг
btn_old = btn ;
btn = digitalRead(pin) ; // прочитать реальное значение на выводе
if (!btn_old && btn) Do();
}
}
};
//----------------Cl_Sys------------------------------------------------------------
class Cl_Sys {
public:
// указатели на блоки однотипных классов в системе
Cl_LED * Start_LED = NULL;
Cl_Mech_BTN * Start_Mech_BTN = NULL;
void setup() {
for (Cl_LED *i = Start_LED; i != NULL; i = i->pnt_LED) i->setup();
for (Cl_Mech_BTN *i = Start_Mech_BTN; i != NULL; i = i->pnt_Mech_BTN) i->setup();
}
void loop () {
for (Cl_LED *i = Start_LED; i != NULL; i = i->pnt_LED) i->loop ();
for (Cl_Mech_BTN *i = Start_Mech_BTN; i != NULL; i = i->pnt_Mech_BTN) i->loop ();
}
};
//-----------------конструкторы классов вход в систему-------------------------------
Cl_LED::Cl_LED(Cl_Sys *Sys, byte _pin, bool _inv): pin(_pin), inv(_inv) {
pnt_LED = Sys->Start_LED;
Sys->Start_LED = this;
}
Cl_Mech_BTN::Cl_Mech_BTN(Cl_Sys *Sys, byte _pin, void (* _Do)()): pin(_pin), Do(_Do) {
pnt_Mech_BTN = Sys->Start_Mech_BTN;
Sys->Start_Mech_BTN = this;
}
//------------------компоновка-------------------------------------------------------
Cl_Sys *Sys = new Cl_Sys();
Cl_LED *LED1 = new Cl_LED(Sys,/*пин*/A0,/*инверсия*/0);// создать светодиод LED1
Cl_LED *LED2 = new Cl_LED(Sys,/*пин*/A1,/*инверсия*/0);// создать светодиод LED2
Cl_LED *LED3 = new Cl_LED(Sys,/*пин*/A2,/*инверсия*/0);// создать светодиод LED3
Cl_LED *LED4 = new Cl_LED(Sys,/*пин*/A3,/*инверсия*/0);// создать светодиод LED4
Cl_LED *LED5 = new Cl_LED(Sys,/*пин*/A4,/*инверсия*/0);// создать светодиод LED5
Cl_LED *LED6 = new Cl_LED(Sys,/*пин*/A5,/*инверсия*/0);// создать светодиод LED6
Cl_LED *LED7 = new Cl_LED(Sys,/*пин*/11,/*инверсия*/0);// создать светодиод LED7
Cl_LED *LED8 = new Cl_LED(Sys,/*пин*/12,/*инверсия*/0);// создать светодиод LED8
void Do_BTN1() {
LED1->ON(2000);
}
void Do_BTN2() {
LED2->ON(2000);
}
void Do_BTN3() {
LED3->ON(2000);
}
void Do_BTN4() {
LED4->ON(2000);
}
void Do_BTN5() {
LED5->ON(2000);
}
void Do_BTN6() {
LED6->ON(2000);
}
void Do_BTN7() {
LED7->ON(2000);
}
void Do_BTN8() {
LED8->ON(2000);
}
Cl_Mech_BTN *BTN1 = new Cl_Mech_BTN(Sys,/*пин*/2,/*обработчик*/Do_BTN1);// создать кнопку BTN1
Cl_Mech_BTN *BTN2 = new Cl_Mech_BTN(Sys,/*пин*/3,/*обработчик*/Do_BTN2);// создать кнопку BTN2
Cl_Mech_BTN *BTN3 = new Cl_Mech_BTN(Sys,/*пин*/4,/*обработчик*/Do_BTN3);// создать кнопку BTN3
Cl_Mech_BTN *BTN4 = new Cl_Mech_BTN(Sys,/*пин*/5,/*обработчик*/Do_BTN4);// создать кнопку BTN4
Cl_Mech_BTN *BTN5 = new Cl_Mech_BTN(Sys,/*пин*/6,/*обработчик*/Do_BTN5);// создать кнопку BTN5
Cl_Mech_BTN *BTN6 = new Cl_Mech_BTN(Sys,/*пин*/7,/*обработчик*/Do_BTN6);// создать кнопку BTN6
Cl_Mech_BTN *BTN7 = new Cl_Mech_BTN(Sys,/*пин*/8,/*обработчик*/Do_BTN7);// создать кнопку BTN7
Cl_Mech_BTN *BTN8 = new Cl_Mech_BTN(Sys,/*пин*/9,/*обработчик*/Do_BTN8);// создать кнопку BTN8
//------------------ main()----------------------------------------------------------
void setup() {
Sys->setup();
}
void loop() {
Sys->loop();
}
митация нажатия кнопки.
Ваш код с восьмью таймера задержки.Может кто будет тоже искать.
if (timer != timerPress) не срабатывает эта строка
&& timer <= (timerPress + 300) и эта часть
код и монитор порта прологаю версия arduino IDE 1.8.2
есть светодиод (полевик и набор из 20 шт 5730)
хочу управлять им и с пульта и с кнопки поэтому там button пульт будет задействован позже.
на пульте есть неиспользуемая кнопка... она сделана для других стран
я уже пробовал ее - работает код получен и прочее
СУТЬ! при нажатии на кнопку длительностью меньше 300 миллисекунд включает val = 255 - подаем на светодиод
при повторном нажатии меньше 300 миллисекунд подает val = 0
при удержании с выключенного положения больше 300 миллисекунд начинает прибавлять значение val (скажем прибавили до 180)
при нажатии менее 300 мс val=0
при длительном нажатии начинает убавлять(скажем 150) совсем не светит почти
и при длительном нажатии опять начинает прибавлять...
гладко было было на бумаге, да вот чет не ожидал что так сразу вспотыкаться начну... всем спасибо за конструктивные ответы
int val = 0; // создаем переменную регулировки и определяем её значение
boolean button = false; // нажатие кнопки (пульта или клацалки)
boolean flag = false; // сработка кнопки
unsigned long timer = 0; // таймер с момента включения
unsigned long timerPress = 0; // таймер удержания кнопки
int gatePin = 3; // указываем пин который будем управлять затвором
int buttonPin = 5; // указываем пин кнопки
int regim = 0; // режим
int trend = 1; //направление переключения режимов в большую или меньшую сторону
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
timer = millis();
button = digitalRead(buttonPin);
// нажатие кнопки
if (button == true) //если кнопка нажата ...
{
flag = true; //поднимаем флаг
if (timer != timerPress) // и если таймеры не равны
{
timerPress = timer; // то таймеру нажатия присваивается значение таймера
}
}
//отпускание кнопки
if (button == false && regim == 0 && flag == true && timer < (timerPress + 300) ) // если кнопка отжата и режим 0 и таймер меньше таймера нажатия на 300 мс
{
flag = false; // опускаем флаг
regim = 255; // режим равен 255
}
if (button == false && regim == 255 && flag == true && timer < (timerPress + 300) ) // если кнопка отжата и режим 255 и таймер меньше таймера нажатия на 300 мс
{
flag = false; // опускаем флаг
regim = 0; // режим равен 0
}
// ружимы
if (regim == 0) {
val = 0;
}
if (regim == 1) {
val = 180;
}
if (regim == 2) {
val = 180;
}
if (regim == 3) {
val = 190;
}
if (regim == 4) {
val = 200;
}
if (regim == 5) {
val = 200;
}
if (regim == 6) {
val = 210;
}
if (regim == 7) {
val = 220;
}
if (regim == 8) {
val = 230;
}
if (regim == 9) {
val = 240;
}
if (regim == 10) {
val = 255;
}
//вывод значения
analogWrite(gatePin , val);
//вывод в монитор
Serial.print(" timer-");
Serial.print (timer);
Serial.print(" timerPress-");
Serial.print (timerPress);
Serial.print(" button-");
Serial.print (button);
Serial.print(" flag-");
Serial.print (flag);
Serial.print(" val-");
Serial.println(val);
//делея тут не будет в итоге
delay(10);
}
суть проблемы, я держу кнопку больше 300мс отпускаю срабатывает, я она не должна срабатывать, там другая функция должна идти - регулировка света(режимы) по сути режим выбрал, отпустил, он остался, а не погас.
за свитч кейс спасибо...
и первый вопрос - почему таймеры равны? я пытаюсь посчитать время нажатия кнопки
Попробуйте проанализировать такой код (я правда не понял при каких условиях должно происходить отнимание поэтому сделал только додавание)
int val = 0; // создаем переменную регулировки и определяем её значение
boolean button = false; // нажатие кнопки (пульта или клацалки)
boolean flag = false; // сработка кнопки
unsigned long timer = 0; // таймер с момента включения
unsigned long timerPress = 0; // таймер удержания кнопки
int gatePin = 3; // указываем пин который будем управлять затвором
int buttonPin = 5; // указываем пин кнопки
int regim = 0; // режим
boolean trend = 1; //направление переключения режимов в большую или меньшую сторону
void setup() {
pinMode(buttonPin, INPUT);
Serial.begin(9600);
}
void loop() {
timer = millis();
button = digitalRead(buttonPin);
// нажатие кнопки
if (button == true && flag == false) //если кнопка нажата ...
{
flag = true; //поднимаем флаг
timerPress = timer; // то таймеру нажатия присваивается значение таймера
}
//отпускание кнопки
if (button == false && regim < 255 && flag == true ) {
if (timer < (timerPress + 300) ) // если кнопка отжата и режим 0 и таймер меньше таймера нажатия на 300 мс
{
flag = false; // опускаем флаг
if (regim > 0)regim = 0;
else regim = 10;
}
else {
regim++;
flag = false;
if (regim > 10)regim = 0;
}
}
// if (button == false && regim >0 && flag == true){
// if (timer < (timerPress + 300) ) // если кнопка отжата и режим 255 и таймер меньше таймера нажатия на 300 мс
// {
// flag = false; // опускаем флаг
// regim = 0; // режим равен 0
// }
// else regim--;
// }
// ружимы
if (regim == 0) {
val = 0;
}
if (regim == 1) {
val = 180;
}
if (regim == 2) {
val = 180;
}
if (regim == 3) {
val = 190;
}
if (regim == 4) {
val = 200;
}
if (regim == 5) {
val = 200;
}
if (regim == 6) {
val = 210;
}
if (regim == 7) {
val = 220;
}
if (regim == 8) {
val = 230;
}
if (regim == 9) {
val = 240;
}
if (regim == 10) {
val = 255;
}
//вывод значения
analogWrite(gatePin , val);
//вывод в монитор
Serial.print(" timer-");
Serial.print (timer);
Serial.print(" timerPress-");
Serial.print (timerPress);
Serial.print(" button-");
Serial.print (button);
Serial.print(" flag-");
Serial.print (flag);
Serial.print(" val-");
Serial.println(val);
//делея тут не будет в итоге
delay(10);
}
Прошло три года с начала старта топика. А я вот начал читать, мне понравилось и хотел бы предложить свой вариант кода для переключения состояния диода пятисекундными интервалами удержания кнопки, то есть нажатие менее пяти секунд не будет засчитываться, а более долгое удержание будет расценено как следующий интервал.
А вот статья с теоретическими раскладками, расчетами, вариантами подключения нескольких кнопок к одному аналоговому входу Arduino - http://codius.ru/articles/221. Там же механизм отслеживания нажатий по фронту, по спаду. Как раз для новичков все разжевано.
Если пошла такая песня. То кину рабочий интересный код. Еще интересней , собрать схему и залить скетч.
тю. класс титановый велосипед для тактовой кнопки.
digitalWrite(13,analogRead(14));
Доброго утра всем!
Уважаемые , помогите с кодом, пожалуйста , не сочтите ленивым!
Есть ардуинка уно + модуль реле 4шт. + две нефиксируемой кнопки.
Первая кнопка при нажатии может включить и отключить реле, вторая кнопка при нажатии может только отключать реле.
П.С. реле используется только одно.
Ну задача очень простая вот скетч в папке https://yadi.sk/d/oYJVN7jO397Xyf
А вот код главной части. Тем более и проблема с дребезгом решена
Благодарю!
Пины 2,3,4 - это цыфровые выходы на ардуино ?
точнее пин 2 - цыфровой выход на реле
пин 3 и 4 цыфровой выход, но в данном случае они являются цыфровыми входами для кнопок. Так ?
Ну да. В примере 2 это цифровой выход. А 3,4 цифровой вход. Конечно вы можете прописать свои.Расматривайте этот скетч, как средство очень быстро написать программу для кнопок и реле.
Скачай архив с яндекс диска и распакуй. Это и есть полная программа.
Скетч проверен, и залит.
А что делать с внешними подтягивающими резисторами для кнопок? выходит что они здесь не нужны ?
Нет, не нужны. Я прописал их в программе. Вот только кнопки подсоединять вывод и земля. Реле и так и так.
Этот класс очень поможет обладателям Nextion и аналогичным устройствам Полный скетч здесь https://yadi.sk/d/8m8Un8ZV3G8KBs
Головной выкладываю
внезапно кому интересно будет - матрица на одном аналоговом пине
http://www.avr-asm-tutorial.net/avr_en/keypad/keyboard.html
Здравствуйте а прошу помощи как новечок в ардуино!делаю планшет в машину nexus7, подключил arduino micro к инкодеру для управления громкостью а можно ли ещё к этой же ардуино подключить кнопки на руле и задать им функции?
Я не претендую на открые нового. выкладываю для однокомление . Скетч рабочий.Пакет здесь https://yadi.sk/d/7BoOge953JWQux
Головной файл
Есть такая программа https://geekelectronics.org/arduino/podklyuchenie-lcd-keypad-shield-k-arduino.html
Но мне она не очень нравится поэтому предлагаю свой аналог. Пакет здесь https://yadi.sk/d/-WBXfL8W3JX5Qw
Вот еще мой аналог переделаный из этого. http://zelectro.cc/nokia5110_module_arduino
Мой пакет https://yadi.sk/d/JOWvYoXj3JXWMF головной файл
Добрый вечер!
Не поможите с написанием кода, нужна простая функция:
есть две кнопки ТТР223 + Arduino + двух канальное реле, нужно при нажатии на кнопку 1 реле срабатывает на 3 сек. при нажатии на кнопку 2 срабатывает 2 реле на 3 сек., должна быть возможность работать одновременно.
Кроме решения с delay ни чего сделать не могу!
Кроме решения с delay ни чего сделать не могу!
Читать тоже не умеете? Тут на форуме есть чудесная тема, с оригинальным названием: "Блинк без делей"
Спасибо прочитал, попробывал, но это не тот вариант, здесь при нажатии происходит включение при еще нажатии выключение, а мне надо при нажатии включение на несколько секунд (одновибратор).
Спасибо большое!
Все работает, правда что-бы понять этот код мне нужно еще учиться и учиться! Я думал такая задача решается более простым способом!!!
mihvlad, скорее всего вы ничего не поняли. Мне проще сделать сложную конструкцию на отработаных и надежных компонентах, чем писать простую программу и очень долго отлаживать(считай делать макетку заливать скетч и проводить бета- тестирование). И да регулярно примерно раз в две недели идет точно такая же задача.
Ничего, буду разбираться, пока желание есть а там посмотрим!
Добрый вечер!
Не поможите с написанием кода, нужна простая функция:
есть две кнопки ТТР223 + Arduino + двух канальное реле, нужно при нажатии на кнопку 1 реле срабатывает на 3 сек. при нажатии на кнопку 2 срабатывает 2 реле на 3 сек., должна быть возможность работать одновременно.
Кроме решения с delay ни чего сделать не могу!
Если по простому то то можно так.(Кнопка считается включеной если подать МИНУС)
Спасибо!
Работает,вот с этим я могу разобраться:)
Доброго времени суток.Написал скетч на основе примеров.Все вроде работает,но чувствую что-то не так.Суть задачи:при нажатии и удержании кнопки,запускается таймер на 2сек.По окончании 2сек выход отключается,но кнопка остается нажатой.При следующем нажатии цикл должен повториться.Огромная просьба проверить на ошибки.Вот код:
а вставить код по нормальному тяжко)))
del
Вот кнопка (она так работает),скетч рабочий,но берут смутные сомнения,что что-то не так.
if
(digitalRead(2)==HIGH)
//если кнопка нажата ...
Вот вся конструкция.Таймеров должно быть восемь.
Вот кнопка (она так работает),скетч рабочий,но берут смутные сомнения,что что-то не так.
if
(digitalRead(2)==HIGH)
//если кнопка нажата ...
И что вы мне хотите этим сказать. Я к примеру давно не пишу, как втюхивают нам "нормы программирования в Ардуине", потому что меня давно взяли "смутные сомнения". Но стойкому народу "новичков Ардуины" мой код тяжкий, потому что перебороть свои смутные сомнения проще, чем начать поглубже изучать язык Си и программирование в целом.
Вот кнопка (она так работает),скетч рабочий,но берут смутные сомнения,что что-то не так.
if
(digitalRead(2)==HIGH)
//если кнопка нажата ...
И что вы мне хотите этим сказать. Я к примеру давно не пишу, как втюхивают нам "нормы программирования в Ардуине", потому что меня давно взяли "смутные сомнения". Но стойкому народу "новичков Ардуины" мой код тяжкий, потому что перебороть свои смутные сомнения проще, чем начать поглубже изучать язык Си и программирование в целом.
Выше написал,но не суть.
При появлении +5в на входе D2 должен включиться выход А0 и отключиться через 2сек независимо от того,что на входе D2 присутствует +5в.
Если вам нужен рабочий , именно работающий код без глюков то возьмите этот #1150
А теперь по вашему. Ну нельзя так опрашивать механическую кнопку. Это полный идеотизм. Но пипл хавает, значит и пусть хавает дальше. Я не буду накидывать на чужой роток свой платок.
Спасибо,но для меня очень сложно.Я даже не могу понять куда мне свои пины вставлять.
Раздел компоновка. Туда и вставлять. Остальное трогать не надо.
Залил ваш скетч,подходить под логику,но при отпускании кнопки выход опять включается.Как убрать это?
подключение земля-кнопка - вывод ?
Все кнопки Подключены через подтягивающий резистор на GND 10kOm
там програмное подтягивание на +5В. Ну если ваши резисторы подтягивают к питанию, то можно оставить. А зачем делать подтяжку на землю?
Код с подтяжкой на землю
Огромное спасибо!Все работает как надо.Добавил еще две кнопки и два выхода.Делаю эту штуку для удаленного управления вкл\откл кондиционеров в кол-ве 4шт.Подпаиваюсь к кнопке on/off дистанц.пульта.получается Им
митация нажатия кнопки.
Ваш код с восьмью таймера задержки.Может кто будет тоже искать.
народ, беда, помогите разобраться
if (timer != timerPress) не срабатывает эта строка
&& timer <= (timerPress + 300) и эта часть
код и монитор порта прологаю
версия arduino IDE 1.8.2
есть светодиод (полевик и набор из 20 шт 5730)
хочу управлять им и с пульта и с кнопки поэтому там button пульт будет задействован позже.
на пульте есть неиспользуемая кнопка... она сделана для других стран
я уже пробовал ее - работает код получен и прочее
СУТЬ! при нажатии на кнопку длительностью меньше 300 миллисекунд включает val = 255 - подаем на светодиод
при повторном нажатии меньше 300 миллисекунд подает val = 0
при удержании с выключенного положения больше 300 миллисекунд начинает прибавлять значение val (скажем прибавили до 180)
при нажатии менее 300 мс val=0
при длительном нажатии начинает убавлять(скажем 150) совсем не светит почти
и при длительном нажатии опять начинает прибавлять...
гладко было было на бумаге, да вот чет не ожидал что так сразу вспотыкаться начну... всем спасибо за конструктивные ответы
это получаю в монитор порта
ткните носом в косяк
это слишко мудрено. Начни с малого и потом увеличивай сложность, с каждым шагом проверяя конструкцию.
Строки 22-41 можно упростить до:
Логика абсолютно та же, но читается легче.
Строки 72-45 заменить на swich... case. Мотив тот же.
суть проблемы, я держу кнопку больше 300мс отпускаю срабатывает, я она не должна срабатывать, там другая функция должна идти - регулировка света(режимы) по сути режим выбрал, отпустил, он остался, а не погас.
за свитч кейс спасибо...
и первый вопрос - почему таймеры равны? я пытаюсь посчитать время нажатия кнопки
Попробуйте проанализировать такой код (я правда не понял при каких условиях должно происходить отнимание поэтому сделал только додавание)
да, я понял направление)) именно я с этим флагом промахнулся по месту использования))