Имеется 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”»
я так понимаю, основная проблема — это считать данные из COM-порта.Serial
Предлагаю освежить в памяти — функции ардуиновского класса
Как видим, функция
возвращает нам один байт (один символ (char)) из COM-порта.
Если вам хватит одного байта для хранения скорости, то формат данных может быть такой:
SBYTE DBYTE
где S и D — просто символы для большей ясности — можно и без них, выдавая в последовательный порт просто два байта.
Например, первый будет содержать скорость, а второй направление. (или три байта — 2 байта скорости и 1 направление).
В случае пакета из 2 байтов, код может быть таким:
тут необходимо обратить внимание на то, что передаётся в COM-порт.программы для управления портами Arduino .
Я с этим столкнулся при написании