Uploaded by Илья Мельниченко

LR1

advertisement
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Кафедра Полупроводниковых приборов и Микроэлектроники
Лабораторная работа № 1
«Знакомство со средой разработки ARDUINO IDE и лабораторным стендом
на основе отладочной платы ARDUINO MEGA»
Факультет: РЭФ
Группа: РМС7-81
Студент: Мельниченко И.Е.
Преподаватель: Лобач О.В.
Дата выполнения работы: 15.10.2021
Новосибирск, 2021
ИСПОЛЬЗУЕМЫЕ ФУНКЦИИ
1. pinMode(pin,mode) – устанавливает режим используемых портов.
pin – вывод, с которым собираемся работать.
mode – указывается как должен работать порт (на выход, вход)
2. digitalWrite(pin,value) – принимает параметры порта.
pin – номер цифрового порта.
value – значение, которое отправляется на порт. (HIGH или LOW).
3. millis () – возвращает количество миллисекунд, прошедших с запуска программы.
4. digitalRead (pin) – считывание показаний цифрового вывода.
5.If (условие) – задание условий, при котором будет выполняться действие.
6. switch () – позволяет создавать конструкции, разветвляющие действия в зависимости от значения одной переменной.
7. #define – директива определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в тексте программы.
2
1. НАПИСАТЬ ПРОГРАММУ РЕАЛИЗУЮЩИЮ АЛГОРИТМ РАБОТЫ СВЕТОФОРА
Текст программы:
#define RED 13
#define YELLOW 12
#define GREEN 11
unsigned long VREMYA1,VREMYA2,VREMYA3; //считаем время с
начала работы контроллера
void setup() {
// put your setup code here, to run once:
pinMode(RED,OUTPUT);
pinMode(YELLOW,OUTPUT);
pinMode(GREEN,OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
if ((millis()- VREMYA1 > 0 && millis()- VREMYA1 < 5000))
//
5 сек горит красный и захватывает время с жёлтым
{
digitalWrite(RED, HIGH);
}
else
{
digitalWrite(RED, LOW);
}
if((millis() - VREMYA2 > 3000 && millis() - VREMYA2 < 5000)
|| (millis() - VREMYA2 > 11000 && millis() - VREMYA2 < 12000)) //
желтый горит 3-5 секунд вместе с красным,
{
// и 11-12 сек. после мигания зеленого
3
digitalWrite(YELLOW,HIGH);
// и завершает цикл
}
else
{
digitalWrite(YELLOW,LOW);
}
if((millis() - VREMYA3 > 5100 && millis() - VREMYA3 < 8100)
|| (millis() - VREMYA3 > 8500 && millis() - VREMYA3 < 9000)
|| (millis() - VREMYA3 > 9500 && millis() - VREMYA3 < 10000)
|| (millis() - VREMYA3 > 10500 && millis() - VREMYA3 < 11000))
//зеленый горит 6-8 сек и(ИЛИ)
{
//
моргает с периодичностью пол секунды три раза до 10.5
digitalWrite(GREEN,HIGH);
}
else
{
digitalWrite(GREEN,LOW);
}
if (millis() - VREMYA1 > 12000)
{
VREMYA1 = millis();
}
if (millis() - VREMYA2 > 12000)
{
VREMYA2 = millis();
}
if (millis() - VREMYA3 > 12000)
{
VREMYA3 = millis();
} // в конце все таймеры обнуляются, цикл повторяется
4
}
Вывод: Реализован алгоритм работы светофора с использованием
функции millis.
5
2.НАПИСАТЬ ПРОГРАММУ ВЫБОРА РЕЖИМА РАБОТЫ СВЕТОФОРА (МОРГАНИЕ ЖЕЛТОГО И ОБЫЧНЫЙ РЕЖИМ).
Текст программы:
#define RED 13
#define YELLOW 12
#define GREEN 11
int button =0; // текущее состояние кнопки
int previous_bs; // предыдущее состояние кнопки
int MODE=0; // начальный режим работы светофора т.е выключен.
unsigned long v,y; // предыдущее значение millis
int state_flash=0; //состояние желтого светодиода при моргании.
void setup()
{
pinMode(RED, OUTPUT);
pinMode(YELLOW, OUTPUT);
pinMode(GREEN, OUTPUT);
pinMode(2, INPUT_PULLUP);
button = digitalRead(2); //считывание кнопки
previous_bs = button; // определение переменной
6
}
void loop()
{
button = digitalRead(2);
if(button==HIGH && previous_bs==LOW) //нажатие кнопки
{
MODE++; // смена режима +1
delay(20); // задержка для исключения дребезга
if(MODE>2) //количество режимов 2.
{
MODE=1; //если переменная режима больше 2, то возрат к 1
}
}
previous_bs=button; //сохранение состояния кнопки.
switch (MODE) //автомат для переключения режимов.
{
case 0: //выключенное состояние светофора.
break;
7
case 1: //моргание желтым.
digitalWrite(RED,LOW);
digitalWrite(GREEN,LOW);
switch (state_flash)
{
case 0:
if(millis()-y>200)
{
state_flash=1;
y=millis();
digitalWrite(YELLOW,HIGH);
}
break;
case 1:
if(millis()-y>200)
{
state_flash=0;
8
y=millis();
digitalWrite(YELLOW,LOW);
}
break;
}
v=millis(); // фиксирование millis для того, чтобы светофор
начинал работу с зеленого
break;
case 2:
digitalWrite(YELLOW,LOW);
if (millis()-v<=3000) //зеленый горит.
{
digitalWrite (GREEN,HIGH);
}
if (millis()-v>3000 && millis()-v<=3200) //моргание зеленого.
{
digitalWrite (GREEN,LOW);
}
9
if (millis()-v>3200 && millis()-v<=3400)
{
digitalWrite (GREEN,HIGH);
}
if (millis()-v>3400 && millis()-v<=3600)
{
digitalWrite (GREEN,LOW);
}
if (millis()-v>3600 && millis()-v<=3800)
{
digitalWrite (GREEN,HIGH);
}
if (millis()-v>3800 && millis()-v<=4000)//зелёный гаснит
{
digitalWrite (GREEN,LOW);
}
if (millis()-v>4000 && millis()-v<=7000) //загорается желтый.
{
10
digitalWrite (YELLOW,HIGH);
}
if (millis()-v>7000 && millis()-v<=10000) //Красный.
{
digitalWrite (YELLOW,LOW);
digitalWrite (RED,HIGH);
}
if (millis()-v>10000 && millis()-v<=12000) //Касный и Желтый
{
digitalWrite (YELLOW,HIGH);
digitalWrite (RED,HIGH);
}
if (millis()-v>12000) //конец цикла, сброс.
{
digitalWrite (YELLOW,LOW);
digitalWrite (RED,LOW);
v=millis();
11
}
break;
}
}
Вывод: Реализован алгоритм выбора режима работы светофора (моргание желтого и обычный режим).
12
Download