Сегодня мы продолжим делать простого трехколесного робота из того что есть.
В прошлой статье мы сделали аппаратную часть, а сегодня будем писать и заливать программу.
Для этого нам понадобится Platfromio IDE. Это открытый редактор, который позволяет работать с самыми популярными и не очень платами на разных микроконтроллерах.
Итак скачиваем. Устанавливаем. Тут трудностей возникнуть не должно.
Далее переходим к инициализации проекта.

Для этого выбираем нашу плату TI Launchpad msp430g2553 и жмем кнопку «Инициализировать»

Далее в папке src создаем файл main.c
И теперь начинаем писать программу.
Начнем с инициализации пинов и переменных.
Укажем выходы моторов и подключение ультразвукового сенсора
#include <msp430g2553.h>
#define LEFT_MOTOR_ENABLE BIT0
#define LEFT_MOTOR_PIN1 BIT1
#define LEFT_MOTOR_PIN2 BIT2
#define RIGHT_MOTOR_ENABLE BIT3
#define RIGHT_MOTOR_PIN1 BIT4
#define RIGHT_MOTOR_PIN2 BIT5
#define MOTOR_PORT P2OUT
#define MOTOR_PORT_DIR P2DIR
#define LED BIT6
//UART
#define TXLED BIT6
#define RXLED BIT0
#define TXD BIT2
#define RXD BIT1
const char string[] = { "Hello World\r\n" };
//ultrasound sensor
#define TRIGGER_PIN BIT4
#define ECHO_PIN BIT5
volatile unsigned int echo_flag = 0;
Проведем инициализацию моторов
void motor_init(void)
{
MOTOR_PORT_DIR |=(LEFT_MOTOR_ENABLE +RIGHT_MOTOR_ENABLE + LEFT_MOTOR_PIN1 + LEFT_MOTOR_PIN2 + RIGHT_MOTOR_PIN1 +RIGHT_MOTOR_PIN2);
MOTOR_PORT = 0x00;
MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
}
Первая строчка указывает какие пины микроконтроллера работают на выход.
Вторая — записывает нулевое значение, чтобы робот никуда не уехал раньше времени.
Третья — записывает единички в Enable на L293 и таким образом «активируем» моторы.
Далее напишем пару базовый функций для движения нашего робота
void motor_stop(void)
{
MOTOR_PORT = 0x00;
}
void move_forward(void)
{
MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
MOTOR_PORT |=(LEFT_MOTOR_PIN2 + RIGHT_MOTOR_PIN1);
}
void move_back(void)
{
MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
MOTOR_PORT |=(LEFT_MOTOR_PIN1 + RIGHT_MOTOR_PIN2);
}
void right(void)
{
MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
MOTOR_PORT|=RIGHT_MOTOR_PIN1 + LEFT_MOTOR_PIN1;
}
void left(void)
{
MOTOR_PORT |=(LEFT_MOTOR_ENABLE + RIGHT_MOTOR_ENABLE);
MOTOR_PORT|=RIGHT_MOTOR_PIN2 + LEFT_MOTOR_PIN2;
}
Влево, вправо, вперед, назад и стоп.
Так например если в правый мотор на пин 1 ,а в левый в пин 2 запишем единицы, то робот будет поворачивать налево.
Тут есть простор для экспериментов.
Далее напишем тестовую программу и зальем ее в нашего робота
int main(void) {
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= LED;
motor_init();
while(1)
{
delay_ms(50);
move_forward();
right();
delay_ms(100);
motor_stop();
move_back();
delay_ms(100);
motor_stop();
}
return 0;
}
Далее жмем Build и Upload

И робот поехал.
В следующей части будем добавлять драйвер ультразвукового сенсора.
