2014-06-11 90 views
0

我试图用Simple-H高压电机罩和H电桥连接控制单台直流电机。我需要使用串行监视器来控制速度和方向(例如“f 220”意味着以220的速度前进)。以下是我的代码:使用Arduino Mega和Simple-H高压电机罩控制直流电机

M1使电动机前进,M2使电动机后退。

以下是错误:没有匹配函数调用“HardwareSerial ::打印()”

我不知道这是否是即使编码本的正确途径。我只是想帮助编程,因为我在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

问题寻求帮助调试(“为什么不是这个代码的工作?”)必须包括所期望的行为,一个特定的问题或错误的和必要的重现最短代码:

从串行LIB文件

它在问题本身。没有明确问题陈述的问题对其他读者无益。请参阅:[**如何创建一个最小,完整和可验证的示例**](http://stackoverflow.com/help/mcve)。 –

+0

我试着为串口监视器的输入设置一个变量。我试图存储监视器中所说的内容,以便电机可以继续运行,直到发出另一个命令。 – user2487812

+0

_'Here是错误:没有匹配函数调用'HardwareSerial :: print()''_你显示的代码与这个错误消息没有任何关系(除非你显示什么是'Serial',你实际上调用'HardwareSerial :: print()')! –

回答

-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); 
} 

假设你已经正确连接电机,您可以编辑的权利,顺时针和逆时针的(顺时针和逆时针)引脚留给无论你控制引脚。该程序将简单测试您是否可以使用一台电机。

借此为H桥图,在壳体:http://9m.no /쵉쀨 角去到电源轨,在每一侧内部的两个去理由,1A,2A进入控制上的Arduino,1Y,2Y销去到电机的两根电线。这同样适用于您可能拥有的任何其他电机。

UPDATE(见下面的注释):

你会想是

String input = ""; 
String result = ""; 
while (Serial.available() > 0) 
{ 
    char temp = Serial.read(); 
    if (temp == '\n') 
    { 
    result = input; 
    input = ""; 
    break; 
    } 
    else 
    { 
    input += temp; 
    } 
} 

Serial.read()是在同一时间在一个字节读取功能。

+0

除了你的介绍性句子,所有这些东西与问题中提到的错误有什么关系? –

+0

哦。我的印象是你想要电机的一般帮助。我指出了你所要求的错误,并建议了一个可以适应你的需求的替代程序,并接受诸如“f 220”之类的输入。 – EchoAce

+0

不好意思,可能想把所有analogWrite的东西放在void loop()中。 – EchoAce

4

你说该生产线是引发错误:

int VariableMove = Serial.print(); // *** ERROR is here! *** 

目前还不清楚你期望什么线做的,但有两件事情不妥:

  1. Serial.print()需要参数:要打印的数据。从调用该方法,无需自参数,作为错误信息的错误结果指出:no matching function for call to 'HardwareSerial::print()'

  2. 不到使用错误的编码错误:Serial.print()在您的代码返回表示写入的字节的数目的long再稍后测试它是否为字符串“f”等。因此,您可能需要Serial.read()或用于读取传入数据的其他方法之一。

最后这条线if (VariableMove = "f"

=分配为了测试等价您使用两个==为:

if (VariableMove == "f"这是一个常见的错误作出。

Returns

size_t (long): print() returns the number of bytes written, though reading that number is optional

+0

'VariableMove ==“f”'这也是明显的错误,应该尽可能'最可能'VariableMove =='f'' OP固定他的代码从用户输入中读取单个字符。 –

相关问题