Делаем простого робота. Часть вторая

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


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

Комментарии (0)

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.