Сегодня мы продолжим делать простого трехколесного робота из того что есть.
В прошлой статье мы сделали аппаратную часть, а сегодня будем писать и заливать программу.
Для этого нам понадобится 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
И робот поехал.
В следующей части будем добавлять драйвер ультразвукового сенсора.