Передача данных по com-порту
- Войдите на сайт для отправки комментариев
Ср, 14/03/2012 - 18:00
С компьютера на arduino передается два ascii символа: направление и скорость, arduino должен их считывать и обрабатывать, как лучше сделать.
Сейчас делаю так:
Arduino:
if(Serial.available() > 0)
{
byte Speed = byte(Serial.read());
byte Direction = byte(Serial.read());
Serial.println(Direction, HEX);
if(Direction == 0x7E)
{
motor.run(FORWARD);
}
else if(Direction == 0x7D)
{
motor.run(BACKWARD);
}
motor.setSpeed(Speed*2);
}
Компьютер: com.Write(Convert.ToChar(127)); com.Write(Convert.ToChar(0x7E));
Этот вариант не работает, подскажите как сделать.
А весь код можно?
компьютер или arduino?
Ну для начала ардуну
Вот код:
#include <AFMotor.h> AF_DCMotor motor(4); void setup() { Serial.begin(9600); } void loop() { if(Serial.available() > 0) { byte Speed = byte(Serial.read()); byte Direction = byte(Serial.read()); if(Direction == 0x7E) { motor.run(FORWARD); } else if(Direction == 0x7D) { motor.run(BACKWARD); } motor.setSpeed(Speed*2); } }Попробуйте так:
#include <AFMotor.h> AF_DCMotor motor(4); void setup() { Serial.begin(9600); } void loop() { if(Serial.available()) { byte Speed = Serial.read(); delay(5); byte Direction = Serial.read(); if(Direction == 0x7E) { motor.run(FORWARD); } else if(Direction == 0x7D) { motor.run(BACKWARD); } motor.setSpeed(Speed*2); } }У меня вот так работает:
#include <AFMotor.h> AF_DCMotor motor(4); void setup() { Serial.begin(9600); } void loop() { if(Serial.available()) { byte Speed = Serial.read(); delay(5); byte Direction = Serial.read(); Serial.print(Speed); Serial.print(Direction); Serial.print('\n'); if(Direction == 102) { motor.run(FORWARD); } else if(Direction == 98) { motor.run(BACKWARD); } motor.setSpeed((Speed-48)*28); } }Шлю в сириал "9f" - двигатель крутится с максимальной силой в одну сторону, шлю "5" - крутится в туже сторону в полсилы, шлю "5b" - крутится в обратную сторону в полсилы, "0" - останавливается и т.д.
Я сделал вот так:
#include <AFMotor.h> AF_DCMotor motor(4); void setup() { Serial.begin(9600); pinMode(13, OUTPUT); } void loop() { if(Serial.available() > 1) { byte Speed = byte(Serial.read()); byte Direction = byte(Serial.read()); Serial.flush(); if(Direction == 0x66) { motor.run(FORWARD); } else if(Direction == 0x62) { motor.run(BACKWARD); } motor.setSpeed(Speed*2); } }Вроде все работает.
Да, так тоже можно.
Буду делать с двумя моторами, потом отпишусь.