помогите разобраться в проекте №5 по учебнику Бокселла "Изучаем Ардуино,65 проектов своими руками". Нужно собрать светофор.
- Войдите на сайт для отправки комментариев
Чт, 21/02/2019 - 14:21
Помогите разобраться в чем проблема.Согласно проекту №5,по учебнику Бокселла, я начал собирать светофор с управляемым движением. Ниже предоставляю код проекта как в учебнике.
/*Вначале мы определим назначение контактов для светодиодов и кнопок*/
#define westButton 3
#define eastButton 13
#define westRed 2
#define westYellow 1
#define westGreen 0
#define eastRed 12
#define eastYellow 11
#define eastGreen 10
#define yellowBlinkTime 500 // периодмигания желтого света 0.5 секунды
boolean trafficWest = true; // запад = true, восток = false
int flowTime = 10000; // период ожидания что бы пропустить автомобили уже находящиеся на мосту
int changeDelay = 2000; // задержка перед сменой цвета
// далее, настроим цифровые входы\выходы
void setup()
{
Serial.begin(9600);
pinMode(westButton, INPUT);
pinMode(eastButton, INPUT);
pinMode(westRed, OUTPUT);
pinMode(westYellow, OUTPUT);
pinMode(westGreen, OUTPUT);
pinMode(eastRed, OUTPUT);
pinMode(eastYellow, OUTPUT);
pinMode(eastGreen, OUTPUT);
// определим начальное состояние светодиодов - зеленый на западной стороне
digitalWrite(westRed, LOW);
digitalWrite(westYellow, LOW);
digitalWrite(westGreen, HIGH);
digitalWrite(eastRed, HIGH);
digitalWrite(eastYellow, LOW);
digitalWrite(eastGreen, LOW);
}
void loop()
{
// запрошено движение с запада на восток?
if(digitalRead(westButton) == HIGH)//продолжать только если движение меняется на противоположное
{Serial.println (15);
if(trafficWest != true )
{
trafficWest = true; // изменить флаг направления запад-восток
delay(flowTime); // дать автомобилям время пересеч мост
digitalWrite(eastGreen, LOW); // на восточной стороне погасить
digitalWrite(eastYellow, HIGH); // зеленый сигнал, зажеч желтый
delay(changeDelay); // и затем красный
digitalWrite(eastYellow, LOW);
digitalWrite(eastRed, HIGH);
delay(changeDelay);
for(int a = 0; a < 5; a ++)// воспроизвести мигающий желтый
{digitalWrite(westYellow, LOW);
delay(yellowBlinkTime);
digitalWrite(westYellow,HIGH);
delay(yellowBlinkTime);}
digitalWrite(westYellow, LOW);
digitalWrite(westRed, LOW); //сменить сигнал на западной стороне с красного
digitalWrite(westGreen, HIGH); // на зеленый
}
}
// запрошено движение с запада на восток?
if(digitalRead(eastButton) == HIGH)// продолжать только если двиение меняется на противоположное
{
if(trafficWest == true)
{
trafficWest = false;// изменить флаг направления восток - запад
delay(flowTime); //дать автомобилям время пересеч мост
digitalWrite(westGreen, LOW);
// на восточной стороне сменить зеленый сигнал на желтый и затем на красный
digitalWrite(westYellow, HIGH);
delay(changeDelay);
digitalWrite(westYellow, LOW);
digitalWrite(westRed, HIGH);
delay(changeDelay);
for(int a = 0; a <5; a ++) // воспроизвести мигающий желтый
{digitalWrite(westYellow, LOW);
delay(yellowBlinkTime);
digitalWrite(westYellow,HIGH);
delay(yellowBlinkTime);}
digitalWrite(westYellow, LOW);
digitalWrite(westRed, LOW); //сменить сигнал на восточной стороне с красного
digitalWrite(westGreen, HIGH); // на зеленый
}
}
}
Наша цель — установить трехцветные светофоры на обоих концах моста. Светофоры должны разрешать движение по мосту только в одном направлении в каждый конкретный момент времени. Когда датчики на одном конце моста обнаруживают автомобиль, ожидающий включения зеленого сигнала, светофоры должны переключиться и разрешить движение. Алгоритм Для имитации датчиков обнаружения автомобилей на обоих концах моста мы используем две кнопки. Светофор с каждой стороны будет состоять из светодиодов красного, желтого и зеленого цвета. Первоначально система разрешает движение с запада на восток, поэтому на светофоре, обращенном на запад, должен гореть зеленый свет, а на светофоре, обращенном на восток, — красный. Когда к мосту приближается автомобиль (моделируется нажатием кнопки) и на светофоре горит красный свет, система должна переключить свет на противоположном конце с зеленого на желтый, а затем на красный. После этого она должна выждать некоторое время, чтобы позволить автомобилям, уже находящимся на мосту, завершить его пересечение. Далее, на стороне с ожидающим автомобилем должен включиться желтый мигающий свет, означающий «приготовиться к движению», и затем желтый свет должен смениться зеленым. Зеленый свет должен гореть, пока на противоположной стороне не появится автомобиль, после чего процесс должен повториться в обратном направлении.
Я собрал соответствующую схему, залил вышепреведенний код.
У меня пока что первый вопрос: почему огни светафора не реагируют на кнопку и живут своей жизнью - мигают как хотят и когда хотят? почему я определяю пин 2 и пин 1 , имеют значение LOW, а на плате они тупо светяться?
Я не могу найти проблему ? это сама ардуино, это плата , это код? где я накосячил? что я упустил? с чего начать поиски проблемы?
Уважаемый, уважайте тех, кого спросили и вставьте программу правильно. Кроме того неплохо бы вставить и собранную Вами схему.
Миннутку,сейчас разберусь и вставлю.
Убрать 380В с платы.))))
Для начала пины 0 и 1 не занимайте, т.к. у Вас Serial задействован. Поменяйте, а дальше поточнее опишите, что происходит. Ну например правильно ли устанавливается и остаётся неизменным начальное состояние светодиодов (то, что устанавливаете в setup строки 33-38) до нажатий на кнопки?
не пойму, что вы имеете ввиду?какие 380 В ?
не пойму, что вы имеете ввиду?какие 380 В ?
То шутка была. Светятся светодиоды. А уж если у Вас "пины светятся на плате"... :)
ага, а кнопочки у Вас точно к +5 подключены?
Кроме того, кнопка должна быть замкнута все время, пока не прошел цикл светофора.
Смотрите, Serial я задействовал, для того, что бы кнопки проверить. Я начинающий, проект огромный, я его слабо понимаю. Пины 1 и 0, были указаны в учебнике.
Итак, что происходит :
33) digitalWrite(westRed, LOW); - очень слабо горит
34) digitalWrite(westYellow, LOW); - 5 раз мигает, выключается вместе с 33
35) digitalWrite(westGreen, HIGH); - не горит, но после того как 34 помигал 5 раз включается, а 34 - выключается. Проходит 10 сек., 5 раз мигает 34, загорается 33, все остальные гаснут.
Но это не точно, потому что порядок работы разный. Если бы вы дали мне свою почту я бы вам фото и видео прислал.
Что касается строчек 36,37 и 38, то ярко светиться 36) digitalWrite(eastRed, HIGH); - постоянно, и иногда на секунду включается 37.
Что то вроде этого. На кнопки как я уже сказал реакции - ноль.
Кнопки точно подключены к 5 В.
Что вы имеете ввиду на счет кнопки? Если вы имеете ввиду что бы она была нажата, то как я уже говорил, светодиоды не реагируют на кнопки вообще. Ни в каком режиме. Как будто бы их и нет вовсе.
Либо выкинте из скетча всё про сериал, либо не используйте пины 0 и 1 (лучше - не использовать 0 и 1). Сделайте это, проверьте работу. После этого дальше можно обсуждать. Если проблемы остались - приведите исправленный скетч.
Хорошо, спасиббо, когда все сделаю как ві сказали отпишусь с результатами.
В строках 5 и 6 поменяйте 0 на 4, 1 на 5. В схеме перекиньте пины соответственно. Попробуйте, потом пишите.
Хорошо, спасиббо, когда все сделаю как ві сказали отпишусь с результатами.
Должны уйти всякие "левые" свечения. А там может окажется, что всё и работает. В скетче-то вроде всё похоже на дело написано, тем более, что он из учебника.
Я поменял 0 на 4 и 1 на 5. Сериал убрал. Результат - ноль эмоций. Как все было так и соталось. Все то же самое подключил к второй плате ардуино уно, поменял мантажную доску(на другой контакты лучше) - результат : 0 эмоций. Как все было так и соталось.
Кнопки точно подключены к 5 В.
при ненажатых кнопках входы к чему подключены?
Сериал убрал.
Раз пины поменяли, зачем сериал-то убирать? Я ж почему написал, что лучше поменять пины - чтобы сериал и дальше можно было для отладки использовать. Но если у Вас какая-то мистика творится, то больше всего на некачественную или вовсе неправильную сборку похоже. Нужно глядеть схему, реальное качественное фото устройства. Чтобы понять, соответствует ли одно другому и насколько надёжно выглядит сборка.
Ну и ещё простой тест - выкиньте всё из loop, пустой его оставьте, чтобы ничего не смущало. Как я понимаю должен гореть с одной стороны красный, с другой зелёный и никаких там миганий. В строках 33-38 поменяйте туда-сюда HIGH на LOW. Убедитесь, что нужные светодиоды чётко горят или не горят. Если уже на этом этапе что-то не так - точно надо косяки в схеме искать.
Если пока всё нормально, можно к кнопкам переходить.
В скетче-то вроде всё похоже на дело написано, тем более, что он из учебника.
В скетче есть ошибки. Или автор специально сделал чтобы изучающие сами разобрались или переводчики/издатели накопипастили не то что нужно. Например, во втором условии везде west и ни одного east.
вот например явный косяк
Ну и судя по всему кнопки должны быть или с фиксацией или нужно удерживать ее нажатой пока не призойдет переключение
В скетче есть ошибки. Или автор специально сделал чтобы изучающие сами разобрались или переводчики/издатели накопипастили не то что нужно. Например, во втором условии везде west и ни одного east.
вот например явный косяк
Ну и судя по всему кнопки должны быть или с фиксацией или нужно удерживать ее нажатой пока не призойдет переключение
Похоже что так. У Вас 2 варианта - найти эту книгу на английском и проверить косяки или попытаться самому разобраться с алгоритмом работы светофора. А по поводу кнопки - логично. Машина подъехала, перегородила, например, ИК датчик, светофоры закончили предыдущий цикл и пропустили ее.
У Вас 2 варианта - найти эту книгу на английском и проверить косяки или попытаться самому разобраться с алгоритмом работы светофора.
Это пусть ТС ищет если ему еще интересно разобраться. Мне не надо
Признаюсь честно, я только первую ветку бегло глянул. Вроде логика на описание похожа. Во второй действительно где-то с середины запады-востоки попутаны. Кусочки ведь тупо зеркальны должны вроде здесь быть - где в одном запад, там в другом восток.
А про фиксацию кнопок не понял. Зачем она тут? Подъехал автомобиль (нажали кнопку). Если уже разрешен трафик с его стороны (проверяется trafficWest), то просто ничего не произойдёт, ему и так горит зелёный, пусть едет. Если ему трафик запрещён, тогда и сработает переключение светофоров по описанному алгоритму. Изменится переменная trafficWest и в таком состоянии сигналы и останутся. Вроде всё так.
Но это потом. Смысл сильно в код вникать, если у товарища там моргает всё как-то само без нажатия кнопок. Пусть сначала с этим разберётся.
Согласен, тоже особо не вникал и слона (trafficWest) незаметил.
Друзья, большое вам всем спасибо, но похоже этот проект еще слишком сложен для меня, я все ваши коментарии учел и очень вам благодарен. Я взял проект поменьше, и там есть серьезные вопросы, я хотел бы , что вы на него посмотрели. И этот проект гараздо проще.
Еще раз спасибо вам.
... похоже этот проект еще слишком сложен для меня...
Что может быть проще светофора!)
Зачем усложнять себе жизнь.) Можно же и своей логикой воспользоваться. И своими минимальными знаниями. Недостаточно знаний - почерпнуть.) Сначала минимум, допустим 3 светодиода, затем усложнить. Я со своей девкой (9 лет) так писал.)
Ну да. Какой русский читает инструкции. Особенно если пишет другой русский для другого , который не читает эти инструкции.
ПС: А еще светофор надо писать регулярно. И тогда видно насколько подросли(или деградировали) свои навыки.
)) Ну не обязательно этим проверять свою деградацию. Есть много других способов.) Тут же просто необходимость возникла.
Понятно, что и светофоры разными могут быть. Посчитал, всего получилось около двух десятков файлов в проектике.(
А теперь будем считать что это не некий отдельный светофор, на перекрестке в вакууме. Пусть это реальные светофоры в реальном городе, и там надо организовывать зеленую волну для снижения загазованости города, а так же менять режимы работы день, ночь, час пик. И управлять ими через радиосеть, и борьба с помехами. Так что я думаю еще проблема светофоров будет окончательно не решена.