Срочно! Нужна помощи написания скетча
- Войдите на сайт для отправки комментариев
Втр, 16/04/2019 - 08:53
Здравствуйте!
Помогите пожалуйста новичку написать скетч. Необходимо к плате MEGA 2560 подключить 10 кнопок с выходом на 10 реле (у каждой кнопкий свое реле) с таймером на каждом канале 60 сек. Что бы при включении кнопки №1 запускалось реле №1 и через 60 сек выключалось, и при нажатии на эту или другую кнопку таймер (60 сек.) обновлялся и запускалось только то реле которое привязано к кнопке.
Правильно ли я понимаю:
1. Если нажали на ту же кнопку, что уже нажимали менее минуты назад, то с реле не происходит ничего, а отсчёт 60 сек начинается с нуля (т.е. мы просто продлеваем работу реле).
2. Если нажали на другую кнопку, то включённое в данный момент реле выключается, а включается на минуту реле, соответсвующее нажатой кнопке?
Правильно ли я понимаю, что перед сдачей курсовой булки уже даже не подгорают, а горят прям ярким пламенем?
Правильно ли я понимаю:
1. Если нажали на ту же кнопку, что уже нажимали менее минуты назад, то с реле не происходит ничего, а отсчёт 60 сек начинается с нуля (т.е. мы просто продлеваем работу реле).
2. Если нажали на другую кнопку, то включённое в данный момент реле выключается, а включается на минуту реле, соответсвующее нажатой кнопке?
Да, все верно.
Да, все верно.
Дед, да какая это курсовая? Это максимум - домашка на одном и самых первых занятий. Но ТС в правильный раздел обратился. Кто-нить сделает (если Ворота не устроит срач и тему не снесут).
не, на первом только светодиодики, а тут кнопки и таймеры.... - где то второе или даже третье.
тс не указал почту, куда ему программу скинут.
ну, срочно спасать чужие булки - дело очень недешевое. думаю, тыщ в 8 тебе абайдёца.
Не, 8 это только за кнопки, за реле, со скидкой, по 300 за штуку, плюс таймеры посчитать, наерна по 10 руб за кажную секунду. От. Уговорили, берусь за 15 тыров. Тока 2560 у меня нет, предлагаю на 168 или покупка за счет ТС.
Младший у меня студент ....
Птичку жалко :(
// ноги кнопок #define KEY_PIN_0 10 #define KEY_PIN_1 11 #define KEY_PIN_2 12 #define KEY_PIN_3 13 #define KEY_PIN_4 14 #define KEY_PIN_5 15 #define KEY_PIN_6 16 #define KEY_PIN_7 17 #define KEY_PIN_8 18 #define KEY_PIN_9 19 // ноги реле #define RELAY_PIN_0 20 #define RELAY_PIN_1 21 #define RELAY_PIN_2 22 #define RELAY_PIN_3 23 #define RELAY_PIN_4 24 #define RELAY_PIN_5 25 #define RELAY_PIN_6 26 #define RELAY_PIN_7 27 #define RELAY_PIN_8 28 #define RELAY_PIN_9 29 // состояния реле #define REALY_OFF HIGH #define REALY_ON LOW // период пока реле включено #define RELAY_ON_PERIOD 60000 // устранение дребезга #define DEBOUNCE 50 // массив реле byte relays[]={RELAY_PIN_0,RELAY_PIN_1,RELAY_PIN_2,RELAY_PIN_3,RELAY_PIN_4,RELAY_PIN_5,RELAY_PIN_6,RELAY_PIN_7,RELAY_PIN_8,RELAY_PIN_9}; // массив кнопок byte keys[]={KEY_PIN_0,KEY_PIN_1,KEY_PIN_2,KEY_PIN_3,KEY_PIN_4,KEY_PIN_5,KEY_PIN_6,KEY_PIN_7,KEY_PIN_8,KEY_PIN_9}; bool oldStateKey[sizeof(keys)]={false}; void setup() { // инициализация реле и кнопок for(byte i=0; i<sizeof(relays); i++){ // кнопки подключены с ноги на землю // если кнопка нажата читаем из порта 0 pinMode(keys[i],INPUT_PULLUP); //подтяжка pinMode(relays[i],OUTPUT); // ноги управления реле на выход digitalWrite(relays[i],REALY_OFF); // размыкаем реле } } void loop() { static byte loopCounter=0; // таймер реле static unsigned long relay_timer=0; // таймер кнопок static unsigned long key_timer=0; if(digitalRead(keys[loopCounter]==LOW)){ // кнопка нажата if (oldStateKey[loopCounter]){ // и была нажата ранее if(millis()-key_timer>DEBOUNCE){ // дребезг по нажатию отфильтровали // кнопка нажата for(byte i=0;i<sizeof(relays);i++){ if(i!=loopCounter){ // если реле не соответвтсвует кнопке digitalWrite(relays[i],REALY_OFF); // размыкаем его } } digitalWrite(relays[loopCounter],REALY_ON); // реле соответствубщее кнопке - замыкаем relay_timer=millis(); } } else { // ранее нажата не была oldStateKey[loopCounter]=true; // запоминаем новое состояние кнопки key_timer=millis(); // запоминаем время нажатия } } else { // кнопка не нажата, просто запомним ее состояние oldStateKey[loopCounter]=false; } // контроль таймера реле, поскольку других задач нет, можно не экономить ресурсы if(millis()-relay_timer>=RELAY_ON_PERIOD){ // если период удержания реле истек for(byte i=0;i<sizeof(relays);i++){ digitalWrite(relays[i],REALY_OFF); // размыкаем все реле } } // контроль циклического счетчика опроса кнопок if(loopCounter<sizeof(keys)-1){ loopCounter++; } else { loopCounter=0; } }Может и ошибся где, всего то 15 минут потратил. Но на тройку то я сделал, надеюсь. Кстати тут и уно с наной подойдут.
Всем спасибо! Вопрос решен. Тему можно закрыть.