#1 2019-02-21 12:42:57

Crusherhead
Учасник
Зареєстрований: 2019-02-09
Повідомлень: 26

Помогите собрать светофор

/*Вначале мы определим назначение контактов для светодиодов и кнопок*/
#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() 
{ 
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)//продолжать только если движение меняется на противоположное
{
  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); // на зеленый 
      }
    }
}        

По учебнику Бокселла собираю проект №5 - Управление Движением. Проект не работает. Отзовитесь кто нибудь, кто может помочь разобраться почему у меня ничего не работает, я замучился. Не могу найти в чем ошибка или проблема. Видео и фото не могу залить, пришлите почту, я туда отправлю файлы.

Наша цель — установить трехцветные светофоры на обоих концах моста. Светофоры должны разрешать движение по мосту только в одном направлении в каждый конкретный момент времени. Когда датчики на одном конце моста обнаруживают автомобиль, ожидающий включения зеленого сигнала, светофоры должны переключиться и разрешить движение. Алгоритм Для имитации датчиков обнаружения автомобилей на обоих концах моста мы используем две кнопки. Светофор с каждой стороны будет состоять из светодиодов красного, желтого и зеленого цвета. Первоначально система разрешает движение с запада на восток, поэтому на светофоре, обращенном на запад, должен гореть зеленый свет, а на светофоре, обращенном на восток, — красный. Когда к мосту приближается автомобиль (моделируется нажатием кнопки) и на светофоре горит красный свет, система должна переключить свет на противоположном конце с зеленого на желтый, а затем на красный. После этого она должна выждать некоторое время, чтобы позволить автомобилям, уже находящимся на мосту, завершить его пересечение. Далее, на стороне с ожидающим автомобилем должен включиться желтый мигающий свет, означающий «приготовиться к движению», и затем желтый свет должен смениться зеленым. Зеленый свет должен гореть, пока на противоположной стороне не появится автомобиль, после чего процесс должен повториться в обратном направлении.

Я собрал соответствующую схему, залил вышепреведенний код.

У меня пока что первый вопрос: почему огни светафора не реагируют на кнопку и живут своей жизнью - мигают как хотят и когда хотят? почему я определяю пин 2 и пин 1 , имеют значение LOW, а на плате они тупо светяться? 

Я не могу найти проблему ? это сама ардуино, это плата , это код? где я накосячил? что я упустил? с чего начать поиски проблемы?

Остання редакція Crusherhead (2019-02-21 14:54:22)

Неактивний

#2 2019-02-21 12:47:41

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Помогите собрать светофор

если хотите помощи, то здесь показывайте схемы и ваши программы.
тогда шанс есть.
никто не будет искать учебник Бокселла и рыться в нём для того, чтобы кому то помочь.

и нафига создавать столько одинаковых тем.....
хотите бан))))

Неактивний

#3 2019-02-21 14:22:55

Crusherhead
Учасник
Зареєстрований: 2019-02-09
Повідомлень: 26

Re: Помогите собрать светофор

Я не хочу бан, я хочу что бы мне помогли. Все темы подходят к описанной мною проблеме.

Я могу залить материалы, я просто первый раз обращаюсь на форум и не знал откликнется ли кто то вообще. Я готов залить материалы. Вы готовы помочь?

Неактивний

#4 2019-02-21 15:22:50

vvr
Учасник
Зареєстрований: 2015-04-12
Повідомлень: 878

Re: Помогите собрать светофор

форум это не обязаловка))))
захочет кто то - поможет, а не захочет - значит нет.
но вы, если ищите помощь, должны предоставить все материалы - тогда появляется шанс на отклик.

Неактивний

#5 2019-02-22 02:39:13

MikeM
Учасник
З Киев
Зареєстрований: 2017-11-03
Повідомлень: 160

Re: Помогите собрать светофор

Первый косяк: порты 0 и 1 в первых программах (а лучше и во всех остальных) использовать нельзя!!!
Второй косяк: Порт, на который вешается кнопка, должен быть подтянут к питанию (INPUT_PULLUP) и нажатая кнопка должна замыкать его с общим проводом. Именно из-за этого диоды "живут своей хаотичной жизнью"

Остання редакція MikeM (2019-02-22 02:45:11)

Неактивний

#6 2019-02-22 09:14:34

г0сть
Гість

Re: Помогите собрать светофор

MikeM пише:

Второй косяк: Порт, на который вешается кнопка, должен быть подтянут к питанию (INPUT_PULLUP) и нажатая кнопка должна замыкать его с общим проводом. Именно из-за этого диоды "живут своей хаотичной жизнью"

А ты вообще-то код смотрел? В нем кнопки замыкаются на  плюс и поэтому никакого INPUT_pullup не надо. Там нужно добавить резисторы на землю. С 0 и 1 пином согласен, добавлю еще что и 13 тоже использовать как вход не желательно

#7 2019-02-22 11:41:01

MikeM
Учасник
З Киев
Зареєстрований: 2017-11-03
Повідомлень: 160

Re: Помогите собрать светофор

Режим порта INPUT_PULLUP и существует для того, чтобы избавиться от внешних резисторов. Именно поэтому кнопки следует соединять с общим проводом, а не с питанием.
Естественно, код проверки нажатия следует изменить.

Неактивний

#8 2019-02-22 12:06:09

г0сть
Гість

Re: Помогите собрать светофор

MikeM пише:

Режим порта INPUT_PULLUP и существует для того, чтобы избавиться от внешних резисторов. Именно поэтому кнопки следует соединять с общим проводом, а не с питанием.

Да ну! Это кто ж такое сказал? А если кнопка (переключатель) должна по схеме (ну так было задумано разработчиком!) коммутировать питание, а не землю? Тогда прикажешь еще и схему инвертора сигналов собирать?

#9 2019-02-22 12:22:45

MikeM
Учасник
З Киев
Зареєстрований: 2017-11-03
Повідомлень: 160

Re: Помогите собрать светофор

Если "ну так было задумано разработчиком!", что одна и та же кнопка (переключатель) и коммутирует питание и подаёт сигнал на порт, тогда, конечно, ты прав.
А вообще, тема открыта не для того, чтобы мы с тобой спорили. Можешь что-то посоветовать топикстартеру - советуй. Не можешь - иди в другую тему.

Неактивний

#10 2019-02-22 12:40:48

г0сть
Гість

Re: Помогите собрать светофор

Так я ему и посоветовал - заменить еще и 13-й пин на другой и добавить резисторы на землю. Да и в самом коде явно есть неточности (проверил ради интереса в Протеусе, кнопки работают, только светодиоды переключаются не так как задумано). Вот только ТС здесь не видать. Может ему уже и не надо помогать ...

#11 2019-02-23 04:30:19

Crusherhead
Учасник
Зареєстрований: 2019-02-09
Повідомлень: 26

Re: Помогите собрать светофор

Друзья, большое спасибо вам всем за помощь, но этот проект для меня еще слишком сложен и я от него  отказался, хотя получил от вас очень ценные советы, поэтому огромное спасибо.
Я взял не большой проект  тестера батареек, и у меня по нему есть вопросы я создам соответствующую тему и если бы вы могли мне помогти, то был бы очень благодареен.

Еще раз всем вам спасибо за то что  откликнулись, к данному проекту я вернусь, но немного позже, когда наберусь опыту.

Неактивний

Швидке повідомлення

Введіть повідомлення і натисніть Надіслати

Підвал форуму