Я пытался настроить под свою задачу,но не получилось.
Нужно:Все реле выключены (на выходе 0)При появлении на входе (к примеру 2) логической единицы +5в,выход А0(реле) включается 1 (время не считается),как только лог.ед +5в исчезает начинается отсчет времени.По окончании заданного времени выход(реле) отключается.Все восемь таймеров(и два контроль ЛЕД) работают одинаково,за исключением задержки отключения по времени.Подтяжка всех входов резисторами к земле 10Ком.
Не могу понять в чем проблема, подключил два энкодера через триггер шмидта, при вращении все отлично работает. Но не могу разобраться с нажатием, вроде бы стандартный пример скетча на кнопку, при первом нажатии должен включится светодиод, при повторном выключится. Без нажатия он мигает с высокой частотой, а при нажатии просто гаснет, или стабильно светится..
Nik777,первая и главная проблема в том что вы пишете код для оккупантов. Это как дороги, чем хуже дороги, тем тяжелее до вас добраться. А то что из-за плохих дорог идет масса неудобств, так а вдруг война. Но я отвлекся не пишите так код. Даже если это тестовый. Так вам тяжелей разобраться в глюках. Или вы думаете, что на форуме вашу херню будут читать. Так что почистил ваш код.
ПС: перевыложил код.
/*
*/
//------------------------------------------------
//----Компоновка--------------------------------------------
const byte LedPin =/*пин светодиода*/13;
bool Led;
const byte swithPin =/*пин кнопки*/ 3;
bool old_Btn;
//-----mail-------------------------------------------
void setup() {
pinMode (swithPin, INPUT_PULLUP);
old_Btn = digitalRead(swithPin);
digitalWrite(LedPin, Led = 0);
pinMode(LedPin, OUTPUT);
}
void loop() {
bool newBtn = digitalRead(swithPin);
if ( !newBtn && old_Btn) {
old_Btn = 0;
digitalWrite(LedPin, Led = 1);
}
if (newBtn && !old_Btn) {
old_Btn = 1;
digitalWrite(LedPin, Led = 0);
}
}
/*Скетч использует 972 байт (3%) памяти устройства. Всего доступно 32256 байт.
Глобальные переменные используют 11 байт (0%) динамической памяти, оставляя 2037 байт для локальных переменных. Максимум: 2048 байт.
*/
Спасибо за помощь, ваш код сто раз изучил, вроде все логично) Но походу у меня аппаратная проблема, с этим кодом светодиод постоянно горит, а при нажатии или удержании гаснет, при том на обоих энкодерах(
Спасибо за помощь, ваш код сто раз изучил, вроде все логично) Но походу у меня аппаратная проблема, с этим кодом светодиод постоянно горит, а при нажатии или удержании гаснет, при том на обоих энкодерах(
Закинул элементарный код, с кнопки все идеально работает, судя по логу с ком порта, при нажатии приходят единицы, у меня просто мозг разрывается, что я делаю не так?
void setup() {
// put your setup code here, to run once:
pinMode (3, INPUT);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
Serial.println(digitalRead(3));
}
Проблема оказалась все таки в коде, сразу заработал этот пример, единственное убрал защиту от дребезга
#define BUTTON_PIN 3
#define LED_PIN 13
boolean buttonWasUp = true; // была ли кнопка отпущена?
boolean ledEnabled = false; // включен ли свет?
void setup()
{
pinMode(LED_PIN, OUTPUT);
pinMode(BUTTON_PIN, INPUT_PULLUP);
}
void loop()
{
// определить момент «клика» несколько сложнее, чем факт того,
// что кнопка сейчас просто нажата. Для определения клика мы
// сначала понимаем, отпущена ли кнопка прямо сейчас...
boolean buttonIsUp = digitalRead(BUTTON_PIN);
// ...если «кнопка была отпущена и (&&) не отпущена сейчас»...
if (buttonWasUp && !buttonIsUp) {
// ...может это «клик», а может и ложный сигнал (дребезг),
// возникающий в момент замыкания/размыкания пластин кнопки,
// поэтому даём кнопке полностью «успокоиться»...
delay(10);
// ...и считываем сигнал снова
buttonIsUp = digitalRead(BUTTON_PIN);
if (!buttonIsUp) { // если она всё ещё нажата...
// ...это клик! Переворачиваем сигнал светодиода
ledEnabled = !ledEnabled;
digitalWrite(LED_PIN, ledEnabled);
}
}
// запоминаем последнее состояние кнопки для новой итерации
buttonWasUp = buttonIsUp;
}
Если вы чего-то в инете не можете найти, то или смысла в существовании этого нет, или вы не доросли до этого. И да я могу написать это, но смысла в существовании этого я не вижу.
кнопка 1 имеет наивысший приоритет (то есть если нажта эта кнопка остальные кнопки игнгрируются) если нажата 2 кнопка игнгрируется кнопка 3, 4 (при совмесном нажатии кнопок 2, 3 и 4) нри нажатии 3 кнопки (при выключены 1, 2 и наатых 3 и 4)она и срабатывает При нажатии 4 работает только она
Здесь скетч составленый (именно составленый а не написаный) в FLProg
Уши у меня уже повяли до того как мне что нибудь ответят на мой вопрос. Хотя я его есче не задал
А Клапауций опять вспомнит дохлую лошадку и скажет что єто за пони я привел к Вам на форум
А вопрос но больше просьба показать правильно написаный скетч по такому заданию
А вопрос но больше просьба показать правильно написаный скетч по такому заданию
что значит я я бывают разные https://www.youtube.com/watch?v=rwxUqJ12SdA. Вот так и с правильно написаными скетчами. И еще у кнопок нет приоритета. Приоритет бывает только у запускающих их обработчиков. Которые запускаются при переходе отжато-нажато и обратно. А вот для чисто нажать -держать и отжать-отойти не часто применяют.
Ну у меня такое условие запуска обработчиков будет использоватся для последовательного заполнения бочек с водой на даче.
На железе пока не проверял но в Протеусе работает даже на одном (4 кнопки) аналговом входе
Сегодня увидел как в одном проэкте (Умный дом) автору проэкта его женой было поставлено условие "или будет в первую очередь включена плита или хана всем твоим проэктам"при этом было кроме плиты есче три датчика Стиральная машина, Эл котел и бойлер
так что такое влючение может біть как и редким так и метким
Прошу прощение в скетче который я отправлял раньше ошибка (я его выдрал из общей программы а там Q была переменной а не выходом) далее предлагаю нормальный скетч который проверен на Протеусе
Q1-Q4 выоды ардуино уно
Q1 pin6
Q2 pin7
Q3pin8
Q4 pin9
Скетч использует 1804 байт (5%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 101 байт (4%) динамической памяти, оставляя 1947 байт для локальных переменных. Максимум: 2048 байт.
Как я заметил у меня скетч занимает меньше памяти хотя и включены програмно Защита от дребезга и подтягивающий резистор
А без подтягивающи резисторов и защиты от дребезга
Скетч использует 1452 (4%) байт памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 83 байт (4%) динамической памяти,
Даже не знаю стоит просить помочь или нет. На другом сайте сразу... дайте денег, а то нееее...... Я бы и дал, только это не умный дом и не управление для пром. оборудования. И проще тогда уж, за эти же деньги 2ю нану купить сделать с Daleyями и на таймер припаять ))).
А теперь по сути. Есть проблема в цикле нельзя использовать Delay. Таймер, кнопка, фиксированное время пусть 5 мин, нажимаем на кнопту включается таймер после, мигает светодиод и выдаётся ТОН скажем на 10сек. Нельзя с Delay, потому что ещё 2 потока работают. Пока Я дошёл только до такого.
///////////////// Таймер ////////////////////
// если кнопка нажата впервые
if((digitalRead(key5Pin) == HIGH) && !flag) {
flag = 1; // устанавливаем флаг при первом нажатии
moment = millis(); // запоминаем момент времени
digitalWrite(outtimerPin, HIGH); // включаем светодиод
}
// если прошло время
if (millis() - moment >= 10000) {
flag = 0; // сбрасываем флаг
moment = 2^32 - 1; // устанавливаем максимальное значение
digitalWrite(outtimerPin, LOW); // выключаем светодиод
}
if((digitalRead(outtimerPin) == LOW) && !flag2) {
flag2 = 1; // устанавливаем флаг при первом нажатии
moment2 = millis(); // запоминаем момент времени
digitalWrite(LED8, HIGH); // включаем светодиод
}
// если прошло время
if (millis() - moment2 >= 2000) {
flag2 = 0; // сбрасываем флаг
moment2 = 2^32 - 1; // устанавливаем максимальное значение
digitalWrite(LED8, LOW); // выключаем светодиод
}
}
Пока всё на светодиодах, с тоном сложнее. В этом варианте лэд8 сразу мигает, при нажатии кнопки 1й таймер работает лэд8 тухнет на указанное время и опять мигает.
Всем привет. Задумал зделать скрытую кнопку в машине (отключение бензонасоса и тп.), а потом решил усложнить задачу. И здесь мне нужна помощь бывалых)). Итак допустим есть нано пару реле и три нефиксирующихся кнопки, если я нажму на первую 1раз, на вторую 2 раза на третью 1раз и только в такой последовательности реле замкнеться и в путь. После выключения зажигания нужно процедуру повторять заново. Если кто поможет со скетчем и консультацией буду благодарен.
GKV. Вот код. В работе не проверял.
Уважаемый qwone.Также отключаются выходы по истечении времени,хотя на входе присутствует +5в
Уважаемый qwone.Также отключаются выходы по истечении времени,хотя на входе присутствует +5в
Я уже запутался. Что вам надо. Задайте ТЗ(техническую задачу) с начала. Что с чем соединяется и что делает.
Набросал еще один . Вот только вы попытаейтесь настроить под свою работу
Я пытался настроить под свою задачу,но не получилось.
Нужно:Все реле выключены (на выходе 0)При появлении на входе (к примеру 2) логической единицы +5в,выход А0(реле) включается 1 (время не считается),как только лог.ед +5в исчезает начинается отсчет времени.По окончании заданного времени выход(реле) отключается.Все восемь таймеров(и два контроль ЛЕД) работают одинаково,за исключением задержки отключения по времени.Подтяжка всех входов резисторами к земле 10Ком.
НЕ могу сообразить.ВСе равно при наличии на входе 2 лог ед. +5в выход А0(реле) через 2 сек отключается.
Вот только интересно. А что если задерка не закончилась а единица на вход пришла. Продолжать задержку или отменять?
Отменять задержку, включить выход опять "навсегда",ожидать отжатия кнопки.
шо это такое?
GKV
Огромное спасибо за код,все которые нарыл в интернете-глючные.
Не могу понять в чем проблема, подключил два энкодера через триггер шмидта, при вращении все отлично работает. Но не могу разобраться с нажатием, вроде бы стандартный пример скетча на кнопку, при первом нажатии должен включится светодиод, при повторном выключится. Без нажатия он мигает с высокой частотой, а при нажатии просто гаснет, или стабильно светится..
Nik777,первая и главная проблема в том что вы пишете код для оккупантов. Это как дороги, чем хуже дороги, тем тяжелее до вас добраться. А то что из-за плохих дорог идет масса неудобств, так а вдруг война. Но я отвлекся не пишите так код. Даже если это тестовый. Так вам тяжелей разобраться в глюках. Или вы думаете, что на форуме вашу херню будут читать. Так что почистил ваш код.
ПС: перевыложил код.
Спасибо за помощь, ваш код сто раз изучил, вроде все логично) Но походу у меня аппаратная проблема, с этим кодом светодиод постоянно горит, а при нажатии или удержании гаснет, при том на обоих энкодерах(
Спасибо за помощь, ваш код сто раз изучил, вроде все логично) Но походу у меня аппаратная проблема, с этим кодом светодиод постоянно горит, а при нажатии или удержании гаснет, при том на обоих энкодерах(
Ну да так и есть. А вы какой алгоритм хотели?
Я надеялся, что где-то в коде есть моя ошибка, аппартно несколько сложнее устранять, поскольку схема уже собрана.
Я надеялся, что где-то в коде есть моя ошибка, аппартно несколько сложнее устранять, поскольку схема уже собрана.
И да там нет отработки дрезезга. А у вас точно дребезг есть на кнопке.
Эм, дрезбезг в моей схеме сключен (в теории), схема собрана на тригере шмидта, со всем обвесом, энкодер работает идиально кроме нажатия кнопки
Закинул элементарный код, с кнопки все идеально работает, судя по логу с ком порта, при нажатии приходят единицы, у меня просто мозг разрывается, что я делаю не так?
Вы наверно забыли подтяжку. Она должна быть или к земле или к питанию. Если к питанию, то можно сделать программно.
Проблема оказалась все таки в коде, сразу заработал этот пример, единственное убрал защиту от дребезга
Люди добрые подскажите код. Нужно три раза нажать кнопку в течение 3 сек, только тогда произойдет действие.
Люди добрые подскажите код. Нужно три раза нажать кнопку в течение 3 сек, только тогда произойдет действие.
Люди добрые подскажите код. Нужно три раза нажать кнопку в течение 3 сек, только тогда произойдет действие.
а если я три раза за секунду нажму - это считается?
Да считаеться.Главное чтоб после 3 секунд счет нажатий занового происходил
ну вот как то так я бы написал, с учетом дребезка контактов
т.е. на кнопку надо жать от 50 до 100 мс
Спасибо
Люди, здравствуйте!
Подскажите пож. что не так:
Собрал эксперимент мерзкое пианино...
http://wiki.amperka.ru/%D0%BA%D0%BE%D0%BD%D1%81%D0%BF%D0%B5%D0%BA%D1%82-arduino:%D0%BC%D0%B5%D1%80%D0%B7%D0%BA%D0%BE%D0%B5-%D0%BF%D0%B8%D0%B0%D0%BD%D0%B8%D0%BD%D0%BE
Задумал сделать чтоб, у каждой клавиши звук настраивался отдельно (произвольно), а не с определенным шагом. Написал ...
Но звук тихий с дребезгом, не красивый.
если пишешь для одного пина, напр. 4 звук чистый как в эксперименте...
Сделал так, все равно звук не красивый...
Перед всеми if, кроме первого, поставь else.
сделал так:
звук все равно дребезжащий...
интересно, что еще 4 кнопки (не задействованные в коде) тоже пищат, но одинаково.
Переделал так:
И все ЗАРАБОТАЛО!!!
Если вы чего-то в инете не можете найти, то или смысла в существовании этого нет, или вы не доросли до этого. И да я могу написать это, но смысла в существовании этого я не вижу.
Есть задача 4 кнопки фиксированые 1, 2, 3, 4
кнопка 1 имеет наивысший приоритет (то есть если нажта эта кнопка остальные кнопки игнгрируются) если нажата 2 кнопка игнгрируется кнопка 3, 4 (при совмесном нажатии кнопок 2, 3 и 4) нри нажатии 3 кнопки (при выключены 1, 2 и наатых 3 и 4)она и срабатывает При нажатии 4 работает только она
Здесь скетч составленый (именно составленый а не написаный) в FLProg
Уши у меня уже повяли до того как мне что нибудь ответят на мой вопрос. Хотя я его есче не задал
А Клапауций опять вспомнит дохлую лошадку и скажет что єто за пони я привел к Вам на форум
А вопрос но больше просьба показать правильно написаный скетч по такому заданию
что значит я я бывают разные https://www.youtube.com/watch?v=rwxUqJ12SdA. Вот так и с правильно написаными скетчами. И еще у кнопок нет приоритета. Приоритет бывает только у запускающих их обработчиков. Которые запускаются при переходе отжато-нажато и обратно. А вот для чисто нажать -держать и отжать-отойти не часто применяют.
Ну у меня такое условие запуска обработчиков будет использоватся для последовательного заполнения бочек с водой на даче.
На железе пока не проверял но в Протеусе работает даже на одном (4 кнопки) аналговом входе
Сегодня увидел как в одном проэкте (Умный дом) автору проэкта его женой было поставлено условие "или будет в первую очередь включена плита или хана всем твоим проэктам"при этом было кроме плиты есче три датчика Стиральная машина, Эл котел и бойлер
так что такое влючение может біть как и редким так и метким
Где-то так на мой взгляд. Но кнопки подключаются на вывод и землю. Подтяжка кнопки на питание программное.Код в железе не тестировал
Посмотрите так, если я правильно понял задачу
vosara,скорее так. Но хорошо дело на бумаге, да забыли про коряги.
ПС: извини похоже у нас одинаково.
Прошу прощение в скетче который я отправлял раньше ошибка (я его выдрал из общей программы а там Q была переменной а не выходом) далее предлагаю нормальный скетч который проверен на Протеусе
Q1-Q4 выоды ардуино уно
Q1 pin6
Q2 pin7
Q3pin8
Q4 pin9
Скетч использует 1804 байт (5%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 101 байт (4%) динамической памяти, оставляя 1947 байт для локальных переменных. Максимум: 2048 байт.
Как я заметил у меня скетч занимает меньше памяти хотя и включены програмно Защита от дребезга и подтягивающий резистор
А без подтягивающи резисторов и защиты от дребезга
Скетч использует 1452 (4%) байт памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 83 байт (4%) динамической памяти,
Даже не знаю стоит просить помочь или нет. На другом сайте сразу... дайте денег, а то нееее...... Я бы и дал, только это не умный дом и не управление для пром. оборудования. И проще тогда уж, за эти же деньги 2ю нану купить сделать с Daleyями и на таймер припаять ))).
А теперь по сути. Есть проблема в цикле нельзя использовать Delay. Таймер, кнопка, фиксированное время пусть 5 мин, нажимаем на кнопту включается таймер после, мигает светодиод и выдаётся ТОН скажем на 10сек. Нельзя с Delay, потому что ещё 2 потока работают. Пока Я дошёл только до такого.
Пока всё на светодиодах, с тоном сложнее. В этом варианте лэд8 сразу мигает, при нажатии кнопки 1й таймер работает лэд8 тухнет на указанное время и опять мигает.
Один добрый, но в начале очень вредный человек помог. Спасибо ему конечно. Вот код, основной отрывок ком надо.
Хотелось бы вместе с 2х секундной отработкой будильника сделать ТОН, только на основе милис, ни каких Delayев. Поможет кто?? Спасибо.
Ну могу предложить такой код. Нажал на кнопку загорелся светодиод на 0,5 сек. Туда можно и тоне вставить.
Мигать светодиодом в зависимости от поворота потенциометра через менеджер.
// Поток 3
void timer_() {
if((digitalRead(key4Pin) == HIGH) && !flag) {
flag = 1; // устанавливаем флаг при первом нажатии
moment = millis(); // запоминаем момент времени
digitalWrite(outtimerPin, HIGH); // включаем светодиод
}
// если прошло время
if ((millis() - moment >= 20000) && flag) { // 20000 Это 2 минуты
flag = 0; // сбрасываем флаг
flag3 = 1; // устанавливаем флаг 3
//moment = 2^32 - 1; // устанавливаем максимальное значение - это лишнее
digitalWrite(outtimerPin, LOW);
}
if( flag3 && (!flag2)) {
flag2 = 1;
flag3 = 0;
moment2 = millis();
digitalWrite(outtimerPin2, HIGH);
}
// если прошло время
if ((millis() - moment2 >= 10000) && flag2) {
flag2 = 0;
digitalWrite(outtimerPin2, LOW);
}
else if(digitalRead(outtimerPin2)== HIGH)
{
tone(buzzPin, ton); // включаем сирену на "ton" Гц
if (ton <= 1200) { // до частоты 1200 Гц
ton += 30; // увеличиваем тональность сирены
}
else
{ // по достижении 400 Гц
ton = 400; // сбрасываем тональность до 400 Гц
}
}
else if(digitalRead(outtimerPin2)== LOW)
{
noTone(buzzPin);
}
}
Вот так вроде работает, может что то можно улучшить??
Вот так вроде работает, может что то можно улучшить??
Можно, научиться код вставлять по людски, а то у вас ошибка в 35 строке.
Там флаги надо объявить. И пины в сетап, это основная часть. Для понимания. Почему он так вставился сверху, только всевышний знает.
Всем привет. Задумал зделать скрытую кнопку в машине (отключение бензонасоса и тп.), а потом решил усложнить задачу. И здесь мне нужна помощь бывалых)). Итак допустим есть нано пару реле и три нефиксирующихся кнопки, если я нажму на первую 1раз, на вторую 2 раза на третью 1раз и только в такой последовательности реле замкнеться и в путь. После выключения зажигания нужно процедуру повторять заново. Если кто поможет со скетчем и консультацией буду благодарен.