Відповісти

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

Назад

Огляд теми (нові повідомленні вгорі)

Crusherhead
2019-02-21 12:44:17
/*Вначале мы определим назначение контактов для светодиодов и кнопок*/
#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, а на плате они тупо светяться?

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

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