我正在尝试使用Simple-H HV电机护罩和H桥连接来控制单个直流电机。我需要使用串行监视器控制速度和方向(例如“f 220”意味着以220的速度向前)。这是我的代码:
M1使电机前进,M2使电机后退。
以下是错误:没有用于调用'HardwareSerial :: print()'
的匹配函数我不知道这是否是正确的编码方式。我想在编程方面有所帮助,因为我是Arduino编码的新手。
const int PWM1 = 2; //PA - PWM A (M1)
const int PWM2 = 3; //PB - PWM B (M2)
const int MotorEnable = 4; //EA - Enable A
const int TestLED = 13; //LED that tests whether going forward or back. LED lights up = forward, //non-lit = reverse
void setup() {
pinMode(PWM1, OUTPUT);
pinMode(PWM2, OUTPUT);
Serial.begin(9600);
}
void loop() {
int VariableMove = Serial.print(); // *** ERROR is here! ***
int speed = Serial.parseInt();
if (Serial.available() > 0) {
if (VariableMove = "f" && speed >= 0 && speed <= 255) {
digitalWrite(MotorEnable, HIGH);
digitalWrite(PWM1, HIGH);
digitalWrite(PWM2, LOW);
Serial.println("Going Forward");
analogWrite(PWM1, speed);
}
if (VariableMove = "r" && speed >= 0 && speed <= 255) {
digitalWrite(MotorEnable, HIGH);
digitalWrite(PWM1, LOW);
digitalWrite(PWM2, HIGH);
Serial.println("Coming Back");
analogWrite(PWM2, speed);
}
}
}
答案 0 :(得分:4)
你说的话就是抛出错误:
int VariableMove = Serial.print(); // *** ERROR is here! ***
目前还不清楚你期望该行做什么,但它有两个问题:
Serial.print()
需要一个参数:要打印的数据。因为错误消息指出:no matching function for call to 'HardwareSerial::print()'
编码错误少于使用错误:Serial.print()返回一个long
,表示在您测试的代码中稍后写入的字节数,如果它是String&#34; f& #34;所以你可能想要Serial.read()
或其他一种读取传入数据的方法。
最后这一行if (VariableMove = "f"
单个=
分配要测试等效性,请使用两个==
,如下所示:
if (VariableMove == "f"
这是一个常见的错误。
来自Serial lib文档:
返回
size_t(long):print()返回写入的字节数 读取该号码是可选的
答案 1 :(得分:-2)
在下方更新。
Serial.print()
是一个“返回写入的字节数”的函数,但是你没有输入该函数,因此存在编译时错误。
const int rightCW = 6, leftCW = 11, rightCCW = 5, leftCCW = 10;
void setup()
{
Serial.begin(9600);
initMotors();
}
void loop()
{
delay(10);
analogWrite(rightCW,255);
}
void initMotors()
{
//initialize motors
pinMode(rightCW, OUTPUT);
pinMode(leftCW, OUTPUT);
pinMode(rightCCW, OUTPUT);
pinMode(leftCCW, OUTPUT);
}
假设您已正确连接电机,您可以将右侧,左侧CW和CCW(顺时针和逆时针)针脚编辑到您的控制针脚。该程序将简单地测试您是否可以使一台电机工作。
将此作为H桥图,以防:http://9m.no /쵉쀨 角落到电源轨,每侧内侧两个接地,1A,2A去控制Arduino上的引脚,1Y,2Y转到电机的两根电线。这同样适用于您可能拥有的任何其他电机。
更新(请参阅下面的评论):
你会想要像
这样的东西String input = "";
String result = "";
while (Serial.available() > 0)
{
char temp = Serial.read();
if (temp == '\n')
{
result = input;
input = "";
break;
}
else
{
input += temp;
}
}
Serial.read()是一次读取一个字节的函数。