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.Путь к месту хранения файлов лабораторной работы:
