
Програмування світлофорної системи: вдосконалення коду

Перейдіть на інший план, щоб отримати більше контенту
Правда чи неправда? Коли програми запускаються, пріоритет має шина.
Звичайні світлофори перемикатися між червоним, жовтим і зеленим через рівні проміжки часу, приїжджає транспортний засіб чи ні. Але це розумний світлофор! Він може реагувати на сигнал від автобуса, який хоче зелене світло. Але світлофор потребує доопрацювання. Червоне, поки автобус не попросить зелене світло, і він ніколи не використовує своє жовте світло. Зараз ми зробимо це покращення. Почнемо з псевдокоду, який ми написали в іншому відео. Якщо натиснути кнопку А, шина посилає сигнал в радіогрупі «один». Повідомлення «один» і означає «я хочу мати зелений». Тепер псевдокод світлофора. У цій програмі ми також почали з встановлення радіогрупи на «один». Змінна «prio» визначає, чи має шина пріоритет чи ні. Для початку автобус не має цього, тому “prio” є “false”. Якщо отримано повідомлення «один», “prio” стає “true”, і автобус отримує зелене світло. Тепер давайте подивимося на код, який керує зміна кольору світлофора. Цикл виконується весь час, доки умова істинна. Якщо "prio" - "false" загориться червоне світло. Інакше червоне світло згасне а зелений світить. Через три секунди зелений згасне, "prio" стає "false", ми знову повертаємося до початку циклу, і світить червоне світло. Покращення, яке ми хочемо зробити зараз, — це вказати йому, коли світити жовте світло. Між червоним і зеленим ми хочемо, щоб він був жовтим. І те саме між зеленим і червоним. Додаємо: Вимкніть червоний, увімкніть жовтий і вимкнути зелений, увімкнути жовтий. Давайте протестуємо код. О, це занадто швидко. Нам потрібно сказати йому, як довго світити червоним, перш ніж стати жовтим, і як довго світити жовтим, перш ніж стати зеленим. Тож додаємо: Зробіть паузу на три секунди після увімкнення червоного кольору і зробити паузу на одну секунду після увімкнення жовтого кольору, в обох цих двох місцях. А тут пишемо: Вимкни жовтий, увімкнути зелений. А також напишіть: Вимкніть жовтий колір перед «prio = false». Тепер ми зробили одне покращення: жовте світло світить, коли ми цього хочемо. Але все одно світлофор стає лише зеленим коли водій автобуса натискає кнопку. Це тому, що ми написали код, який контролює зелене світло як інше твердження. Це означає, що це відбувається лише тоді, коли щось неправда. Краще говорити про це позитивно, щоб це відбувалося завжди. Тому ми видаляємо оператор else, і тоді жовтий і зелений завжди сяють, коли ми цього хочемо: щоразу, коли цикл виконується. Давайте протестуємо наше друге покращення. Ось приїжджає автобус. Водій автобуса натискає кнопку. «Пріо» відразу переходить на «правда». Але нічого не змінилося. Чому ні? Воно сяє червоним, а потім жовтим все одно! Що сталося? О, ми були тут у псевдокоді, коли була натиснута кнопка, і це не перевіряло, чи «prio» є «істинним», доки цикл не повернувся до початку. Тож автобусу все одно довелося чекати на червоне світло. Паузи в коді створили проблеми, яких ми не очікували. Нам потрібно частіше змусити код перевіряти, чи «prio» є «істинним». Коли ми запрограмували його на «паузу», код стоїть на місці: воно не слухає. Він лише перевіряє, чи "prio" є "істинним" тут: у операторі if. Щоб світлофор слухав частіше, нам потрібно більше операторів if. Давайте зменшимо затримку до однієї секунди розділивши паузи так: Тепер код може переходити до зеленого з кількох різних місць. Але ми хочемо переконатися, що одночасно світить лише одне світло. Якщо "prio" тут "true", і ми пропускаємо цей рядок, червоний не вимикається. Ми хочемо, щоб зелене світло було єдиним світлом для автобуса, тому ми повинні вказати коду вимкнути червоний і жовтий тут. Перевіримо ще раз. Ось приходить автобус, який запізнюється, натиснута кнопка А і світлофор швидко перемикається на зелений. Тепер світлофор став ще розумнішим! Можливо, ви зможете придумати ще більше покращень!