Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаба 2 / Лабораторная работа №2_Токарев_0421_МСУ.docx
Скачиваний:
0
Добавлен:
26.06.2025
Размер:
610.78 Кб
Скачать

2. Ввод и отображение информации на дисплейном модуле

/*

Tokarev A.A.

группа 0421

*/

#define BRAKE 0

#define CW 1

#define CCW 2

#define MOTOR_A1_PIN 7 // Вращение М1 по часовой стрелке CW (дискретный сигнал)

#define MOTOR_B1_PIN 8 // Вращение М1 против часовой стрелки CCW (дискретный сигнал)

#define PWM_MOTOR_1 5 // ШИМ для М1 (ШИМ сигал)

#define CURRENT_SEN_1 A2 // Датчик тока М1 (аналоговый сигнал)

#define EN_PIN_1 A0 // Разрешение на работу М1 (дискретный сигнал)

short usSpeed = 150; // скорость вращения двигателя по умолчанию

unsigned short usMotor_Status = BRAKE; // статус двигателя по умолчанию

void setup() {

pinMode(MOTOR_A1_PIN, OUTPUT); // Дискретный ВЫХОД

pinMode(MOTOR_B1_PIN, OUTPUT); // Дискретный ВЫХОД

pinMode(PWM_MOTOR_1, OUTPUT); // Дискретный ВЫХОД

pinMode(EN_PIN_1, OUTPUT); // Дискретный ВЫХОД

Serial.begin(9600); // Инициализация последовательного порта

Menu();

}

void loop() {

char user_input;

while(Serial.available())

{

user_input = Serial.read();

digitalWrite(EN_PIN_1, HIGH);

if (user_input =='1')

{

Stop();

}

else if(user_input =='2')

{

Forward();

}

else if(user_input =='3')

{

Reverse();

}

else if(user_input =='+')

{

IncreaseSpeed();

}

else if(user_input =='-')

{

DecreaseSpeed();

}

else

{

Serial.println("Enter number for control option:");

}

}

}

void Stop() // функция остановки

{

Serial.println("STOP");

usMotor_Status = BRAKE;

motorGo(usMotor_Status, 0);

}

void Forward() // функция вращения по часовой стрелке

{

Serial.println("Forward");

usMotor_Status = CW;

motorGo(usMotor_Status, usSpeed);

}

void Reverse() // функция вращения против часовой стрелки

{

Serial.println("Reverse");

usMotor_Status = CCW;

motorGo(usMotor_Status, usSpeed);

}

void IncreaseSpeed() // функция увеличения скорости

{

usSpeed = usSpeed + 13;

if(usSpeed > 255)

{

usSpeed = 255;

}

Serial.print("Speed +: ");

Serial.println(usSpeed);

motorGo(usMotor_Status, usSpeed);

}

void DecreaseSpeed() // функция уменьшения скорости

{

usSpeed = usSpeed - 13;

if(usSpeed < 0)

{

usSpeed = 0;

}

Serial.print("Speed -: ");

Serial.println(usSpeed);

motorGo(usMotor_Status, usSpeed);

}

void motorGo(uint8_t direct, uint8_t pwm)

//Функции управления переменными:

// Направление (cw или ccw),

// ШИМ (0 ... 255);

{

if(direct == CW) // задаем направление

{

digitalWrite(MOTOR_A1_PIN, LOW); // посылаем соответсвующий сигнал на пины драйвера

digitalWrite(MOTOR_B1_PIN, HIGH); // посылаем соответсвующий сигнал на пины драйвера

}

else if(direct == CCW) // задаем направление

{

digitalWrite(MOTOR_A1_PIN, HIGH); // посылаем соответствующий сигнал на пины драйвера

digitalWrite(MOTOR_B1_PIN, LOW); // посылаем соответствующий сигнал на пины драйвера

}

else

{

digitalWrite(MOTOR_A1_PIN, LOW); // посылаем соответствующий сигнал на пины драйвера

digitalWrite(MOTOR_B1_PIN, LOW); // посылаем соответствующий сигнал на пины драйвера

}

analogWrite(PWM_MOTOR_1, pwm);

}

void Menu() // функция вывода меню

{

Serial.println("Tokarev A.A. 0421");

Serial.println(); //Печать списка функций управления

Serial.println("Enter number for control option:");

Serial.println("1. STOP");

Serial.println("2. FORWARD");

Serial.println("3. REVERSE");

Serial.println("+. INCREASE SPEED");

Serial.println("-. DECREASE SPEED");

Serial.println();

}

Выводы по работе

В данной лабораторной работе были изучены базовые средства ввода/вывода, доступные для отладочного модуля Arduino Uno.

Была написана программа для управления электродвигателем постоянного тока с помощью последовательного порта в среде Arduino IDE. Также была написана программа для вывода информации на дисплей LCD Shield.Путь к месту хранения файлов лабораторной работы:

Соседние файлы в папке Лаба 2