управление электродвигателем по RS232


Имеется Arduino плата на Atmega328 с платой управления двумя электродвигателями (L298N Shield). Ниже я навожу пример скетча для оживления данной конструкции:

// motor A
int dir1PinA = 13;
int dir2PinA = 12;
int speedPinA = 10;
// motor B
int dir1PinB = 11;
int dir2PinB = 8;
int speedPinB = 9;
unsigned long time;
int speed;
int dir;
void setup() {
pinMode(dir1PinA, OUTPUT);
pinMode(dir2PinA, OUTPUT);
pinMode(speedPinA, OUTPUT);
pinMode(dir1PinB, OUTPUT);
pinMode(dir2PinB, OUTPUT);
pinMode(speedPinB, OUTPUT);
time = millis();
speed = 0;
dir = 1;
}
void loop() {
analogWrite(speedPinA, speed);
analogWrite(speedPinB, 255 - speed);
// set direction
if (1 == dir) {
digitalWrite(dir1PinA, LOW);
digitalWrite(dir2PinA, HIGH);
digitalWrite(dir1PinB, HIGH);
digitalWrite(dir2PinB, LOW);
} else {
digitalWrite(dir1PinA, HIGH);
digitalWrite(dir2PinA, LOW);
digitalWrite(dir1PinB, LOW);
digitalWrite(dir2PinB, HIGH);
}
if (millis() - time > 5000) {
time = millis();
speed += 20;
if (speed > 255) {
speed = 0;
}
if (1 == dir) {
dir = 0;
} else {
dir =1;
}
}
}

Вопрос состоит в следующем: как управлять электродвигателем извне? Т.е передавать информацию о частоте и направлении вращения двигателей по последовательному каналу связи (RS232). Проще говоря — задавать параметр speed и dir ,в выше приведенном листинге, по RS232.
Я пробовал непосредственно использовать функцию Serial.Read(), но, видимо, неправильно использовал.


Один комментарий на «“управление электродвигателем по RS232”»

  1. я так понимаю, основная проблема — это считать данные из COM-порта.
    Предлагаю освежить в памяти — функции ардуиновского класса Serial
    Как видим, функция

    Serial.read();

    возвращает нам один байт (один символ (char)) из COM-порта.
    Если вам хватит одного байта для хранения скорости, то формат данных может быть такой:
    SBYTE DBYTE
    где S и D — просто символы для большей ясности — можно и без них, выдавая в последовательный порт просто два байта.
    Например, первый будет содержать скорость, а второй направление. (или три байта — 2 байта скорости и 1 направление).
    В случае пакета из 2 байтов, код может быть таким:

    if( Serial.available() ) {
        speed = Serial.read();  
        dir = Serial.read(); 
    }
    

    тут необходимо обратить внимание на то, что передаётся в COM-порт.
    Я с этим столкнулся при написании программы для управления портами Arduino.

Добавить комментарий

Arduino

Что такое Arduino?
Зачем мне Arduino?
Начало работы с Arduino
Для начинающих ардуинщиков
Радиодетали (точка входа для начинающих ардуинщиков)
Первые шаги с Arduino

Разделы

  1. Преимуществ нет, за исключением читабельности: тип bool обычно имеет размер 1 байт, как и uint8_t. Думаю, компилятор в обоих случаях…

  2. Добрый день! Я недавно начал изучать программирование под STM32 и ваши уроки просто бесценны! Хотел узнать зачем использовать переменную типа…

3D-печать AI Android Arduino Bluetooth CraftDuino DIY IDE iRobot Kinect LEGO OpenCV Open Source Python Raspberry Pi RoboCraft ROS swarm ИК автоматизация андроид балансировать бионика версия видео военный датчик дрон интерфейс камера кибервесна манипулятор машинное обучение наше нейронная сеть подводный пылесос работа распознавание робот робототехника светодиод сервомашинка собака управление ходить шаг за шагом шаговый двигатель шилд юмор

OpenCV
Робототехника
Будущее за бионическими роботами?
Нейронная сеть - введение