Код светофора с 2 режимами, написал Airbus. Код (C++): int red = 11; int yellow = 8; int green = 5; int buttonPin = 2; // номер вывода с тумблЁром void setup() { //initialize pins as outputs pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); // настроить вывод кнопки на вход pinMode(buttonPin, INPUT); // прикрепить прерывание attachInterrupt(0, blink, LOW); } void blink() { //Мигаем жОлтым пока тумблЁр включен digitalWrite(red,LOW); digitalWrite(green,LOW); digitalWrite(yellow, HIGH); // turn the LED on (HIGH is the voltage level) delay(230000); // wait for a second digitalWrite(yellow, LOW); // turn the LED off by making the voltage LOW delay(230000); // wait for a second } void loop() { // основная прога Аффтара digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(red,HIGH); delay(1000); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(green,LOW); delay(700); digitalWrite(green,HIGH); delay(700); digitalWrite(green,LOW); delay(700); digitalWrite(green,HIGH); delay(700); digitalWrite(green,LOW); delay(700); digitalWrite(green,HIGH); delay(700); digitalWrite(green,LOW); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(green,LOW); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(green,LOW); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(green,LOW); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(yellow,LOW); }
Вставьте, пожалуйста, код через тэги. Как это сделать см. в закрепленной теме в любом разделе форума. По вопросу: Нужно сделать обработку нажатия кнопки, где будет меняться значение флага аварии. В лупе же режимы разделить флагами (см. конечный автомат, switch-case) и в режиме аварии мигать лампочкой.
Когда поймете этот пример мигания без применения задержки, то сможете и кнопку добавить, и даже целый перекресток сделать из 4 светофоров на одной ардуино. Светофор, это не то, что нужно делать в первый день знакомства с ардуино.
Этого мало, нужно ещё понять, что в природе не существует переменной delay и менять её нельзя никак. Это, пожалуй, надо сначала понять. Без этого пример не поймётся
А чё тут сложного?Тумблер например на Пин3 Если тумблер включён тоесть пин3 прижат к GND то есть LOW выполняем Вашу программу-или сландартный светофор если тумблер выкл тоесть на нём HIGH выполняем blink блинкаем жОлтым.Как то так.А delay здесь ни при чём.Его можно использовать.
Дык запихать его в отдельную фунуцЫю которая будет выполнятся if (тумблер включОн); else (blink жОлтым);
Настоящий светофор тоже может так работать, полный цикл закончил и в жёлтый мигающий, так что по схеме @Airbus вполне реализуемо… вот только думаю ТС всё равно не понял как это сделать
GND - никак не может быть "выходом". Это точка отсчета всех остальных напряжений. Вот контакты "+5v" и "+3.3v" на гребенке Ардуины - это выходы стабилизаторов на плате. А вообще - подавать "со стороны" напряжение на выход стабилизатора, не подавая напряжение на его вход, возможно далеко не всегда. В зависимости от схемы он может стать цепью КЗ для стороннего источника. Сгорит сам и спалит сторонний источник. Практика показывает, что Ардуиновские стабилизаторы вроде бы это позволяют и не горят. Но при этом будет подаваться напряжение в УСБ порт компа, если он подключен к Ардуине. Так что вы - рискуете компом...
Пин Vin на плате. А еще можно из прерывания INT0/1 прыгать в blink это еще проще.Только думаю ТС всё равно не понял как это сделать.Держи.Пробуй. Код (C++): int red = 12; int yellow = 11; int green = 8; int buttonPin = 2; // номер вывода с тумблЁром void setup() { //initialize pins as outputs pinMode(red, OUTPUT); pinMode(yellow, OUTPUT); pinMode(green, OUTPUT); // настроить вывод кнопки на вход pinMode(buttonPin, INPUT); // прикрепить прерывание attachInterrupt(0, blink, LOW); } void blink() { //Мигаем жОлтым пока тумблЁр включен digitalWrite(yellow, HIGH); // turn the LED on (HIGH is the voltage level) delay(1000); // wait for a second digitalWrite(yellow, LOW); // turn the LED off by making the voltage LOW delay(1000); // wait for a second } void loop() { // основная прога Аффтара digitalWrite(red,HIGH); delay(1000); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(red,LOW); digitalWrite(yellow,LOW); digitalWrite(green,HIGH); delay(1000); digitalWrite(green,LOW); delay(1000); digitalWrite(green,HIGH); delay(1000); digitalWrite(green,LOW); delay(1000); digitalWrite(green,HIGH); delay(1000); digitalWrite(green,LOW); digitalWrite(yellow,HIGH); delay(1000); digitalWrite(yellow,LOW); }
Ну всё правильно сделали-под себя.Поздравляю!Ставьте лайки Можно напрямую.Можно и по фен-шую через 3 ком резистор.Да насчет поправки все правильно делал на скорую руку не подумал.Прерывание останавливает программу в любом месте при этом горит все что горело в момент перехода к выполнению прерывания.Гасить лучше сразу и красный и зеленый а желтый включать.
Прерывания-великая Вешь!Только в Ардуино их использование урезано.Потому как Ардуино-учебная парта деЦЦкий конструктор.Про прерывания ЗДЕСЯ.Их всего два. 1-по ссылке прочитаете что непонятно дорасскажу. 2-прерывания возникают каждый наз при наступлении условия.Если прерываний несколько и оба сработали одновременно выполниться то которое имеет высший приоритет.там тоже своя иерархия.Но это другая песня. 3-забудьте о такой глупости как экономия на Ардуино.Хотите реально 10 лет работать от одной батарейки используйте "голый" микроконтроллер. 4-Да можно почему нет?