Долго думает Arduino UNO
- Войдите на сайт для отправки комментариев
Написал тут код для подсветки дисков в машине. Лента светодиодная, RGB. В зависимости от ситуации она светит разными цветами. 6 выходов для управления лентой, 3 входа для считывания стоп-сигнала и 2х поворотников(буду брать 5 в с реле или как-то там..).
Подключил пока РГБ светодиоды, для проверки. В начале, где тест, цвета переключаются нормально и быстро, а в самом теле цикла вообще беда. Как тест проходит, один диод почему-то горит красным, а другой зеленым(желтым, у меня вместо желтого зеленый пока задан), потом через какие-то переходы цвета устанавливается штатный режим(синий). Как только подаю 5в на какой-нибудь вход цвет меняется быстро, но вот как 5в пропадает - возвращается в штатный режим не сразу, секунд через 5. Как сделать чтоб этой задержки не было?
// соответствие цветов выходам // left side #define rl 3 #define gl 5 #define bl 6 // right side #define rr 9 #define gr 10 #define br 11 // задаем входы #define L 7 // левый поворотник #define R 8 // правый поворотник #define S 12 // стоп void setup() { pinMode(L, INPUT); pinMode(R, INPUT); pinMode(S, INPUT); pinMode(rl, OUTPUT); pinMode(gl, OUTPUT); pinMode(bl, OUTPUT); pinMode(rr, OUTPUT); pinMode(gr, OUTPUT); pinMode(br, OUTPUT); //типа тест redLeft(); redRight(); delay(500); digitalWrite(rl, 0); digitalWrite(rr, 0); yellowLeft(); yellowRight(); delay(500); digitalWrite(gl, 0); digitalWrite(gr, 0); blueLeft(); blueRight(); delay(500); digitalWrite(bl, 0); digitalWrite(br, 0); delay(500); /*digitalWrite(L, LOW); // подтягивающие резисторы digitalWrite(R, LOW); digitalWrite(S, LOW);*/ } void loop() { bool LS=digitalRead(L); bool RS=digitalRead(R); bool SS=digitalRead(S); // blueRight(); // штатный режим // blueLeft(); if (LS==HIGH&&RS==LOW&&SS==LOW) {// режим 1 purge(); yellowLeft(); blueRight(); } else if (LS==LOW&&RS==HIGH&&SS==LOW) {// режим 2 purge(); yellowRight(); blueLeft(); } else if ((LS==HIGH&&RS==HIGH&&SS==LOW)||(LS==HIGH&&RS==HIGH&&SS==HIGH)) { purge(); yellowRight(); //режим 3 yellowLeft(); } else if (LS==LOW&&RS==LOW&&SS==HIGH) { //режим 4 purge(); redRight(); redLeft(); } else if (LS==LOW&&RS==HIGH&&SS==HIGH) { // режим 5 purge(); yellowRight(); redLeft(); } else if(LS==HIGH&&RS==LOW&&SS==HIGH) { //режим 6 purge(); redRight(); yellowLeft(); } else { purge(); blueRight(); blueLeft(); } } // синий правый включить void blueRight() { digitalWrite(rr, 0); digitalWrite(gr, 0); digitalWrite(br, 1); } // синий левый включить void blueLeft() { digitalWrite(rl, 0); digitalWrite(gl, 0); digitalWrite(bl, 1); } // желтый правый включить void yellowRight() { digitalWrite(rr, 0); digitalWrite(gr, 1); digitalWrite(br, 0); } // желтый левый включить void yellowLeft() { digitalWrite(rl, 0); digitalWrite(gl, 1); digitalWrite(bl, 0); } // красный правый включить void redRight() { digitalWrite(rr, 1); digitalWrite(gr, 0); digitalWrite(br, 0); } // красный левый включить void redLeft() { digitalWrite(rl, 1); digitalWrite(gl, 0); digitalWrite(bl, 0); } void purge() { digitalWrite(rl, 0); digitalWrite(gl, 0); digitalWrite(bl, 0); digitalWrite(rl, 0); digitalWrite(gl, 0); digitalWrite(bl, 0); }
а что на входах висит? случаем не конденсатор?
на входах ничего не висит. голые разъемы платы, я в них проводком от блока питания тыкаю.
от блока питания? сколько вольт у блока питания? нельзя проводком с 5В ардуины тыкаться?
Сейчас с 5в ардуины попробовал - тоже самое. БП компьютерный +5в. Ща видео попробую снять
https://www.youtube.com/watch?v=3YrkbQIi6X4&list=UU9rjakYMq2aW-QUribhC9kQ
там где видно пульсацию, я так понимаю, да и видно, цвет не чистый. ШИМ работает получается, а не должен же?
сделай просто. подтяни вход к питанию и управляй по минусу
для тех кто в танке можно поподробнее? картинку там или что, а то в этом не силен..
замени
на
а что значит управляй по минусу? У меня просто управляющий сигнал - питание с поворотника автомобиля. Свет есть - зажигаем светодиод, света нет - гасим.
0 - зажечь светодиод, 1 - потушить. легко исправить программно. ты проверь сначала, а потом уже дальше думать будешь
уровень сигнала на поворотнике 12В грубо, напрямую все равно нельзя подключать. даже делитель нежелательно
лучше опторазвязку на оптопаре. PC817 как самая дешевая и распрастраненная
ДА! Спасибо! все работает. Я так понимаю, что дальнейшая схема будет такая
почти. только резистор добавь для светодиода в оптопаре, иначе сгорит сразу
и еще бы параллельно лампочке поворотника поставить керамический конденсатор возле оптопары. хоть и не обязательно
Вот так?
Сейчас попробую еще через analogWrite цвета поменять, ленты пока нет, а мои светодиоды отказываются светить желтым.
Еще бы плавное включение сделать, с нарастанием яркости.
Вот еще немного непонятно, тут если поворотник мигает, то на входе то 0 то 1, это значит, что будет переход через синий, а хотелось бы чтобы именно только желтый мигал. Никак не могу придумать как это организовать.
да так
какой еще переход через синий. нифига не понял
ну хотелось бы так:
когда мигает поворотник, то загорается желтый, горит пока есть сигнал(ну то есть замкнут на землю), потом тухнет(сигнал пропал), потом опять загорается и т.д.
а по данной логике вместо того, чтобы тухнуть будет загораться синий. Тут или всю логику надо как-то менять или брать сигнал не с поворотника, а с самого переключателя поворотов(вкл/выкл)
при чем тут синий если желтый получается красный + зеленый. снова тебя не понял
а логику надо менять. но делов то
хотя можешь управлять по плюсу. и делать подтяжку к земле через резистор. дело твое
сейчас видео сниму))
https://www.youtube.com/watch?v=QnhWbdMc5mg&list=UU9rjakYMq2aW-QUribhC9kQ
перепиши условия и все. а точнее то что внутри условий: 0 замени на 1, а 1 на 0 и все
Так я уже все переделал
просто в данной ситуации нельзя определить, что именно поворотник включен. То есть сколько именно нужно раз мигать. Можно конечно после того, как включается желтый ставить задержку и выключать весь свет. Точно, так и сделаю.
а код сейчас такой
https://www.youtube.com/watch?v=Fp3EmGW3kFk&list=WL
вот так должно быть
так в чем проблема делай