使用Arduino Mega和Simple-H高压电机屏蔽控制直流电机
Controlling DC motor with Arduino Mega and Simple-H HV Motor Shield
我正在尝试使用Simple-H高压电机屏蔽和H桥连接来控制单个直流电机。我需要使用串行监视器控制速度和方向(例如"f220"意味着以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);
}
}
}
您所说的抛出错误的行:
int VariableMove = Serial.print(); // *** ERROR is here! ***
目前还不清楚你期望这条线做什么,但它有两个问题:
Serial.print()
需要一个参数:要打印的数据。错误是在没有参数的情况下调用该方法的结果,因为,正如错误消息所述:no matching function for call to 'HardwareSerial::print()'
与其说是编码错误,不如说是使用错误:Serial.print((返回一个
long
,表示稍后在测试的代码中写入的字节数,如果它是字符串"f"等。因此,您可能想要Serial.read()
或其他读取传入数据的方法之一。
最后这条线路if (VariableMove = "f"
单个=
是赋值要测试等价性,请使用两个==
,如下所示:
if (VariableMove == "f"
这是一个常见的错误。
来自Seriallib文档:
返回
size_t(long(:print((返回写入的字节数读取该号码是可选的
更新如下。
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((是一次读取一个字节的函数。
- 如何取消对nullptr的屏蔽,返回正确的对象
- 控制允许动态运行c++的并发操作数
- 从控制台中删除最后打印的元素
- 是否可以使用if constexpr删除控制流语句
- 无法在windows控制台中为C++程序提供必要的输入
- 控制到达非空函数clang(-Wreturn-type)的末尾
- 查找 GCD:并非所有控制路径都返回值
- 通过 API 控制 DJI 相机
- 禁止在控制台上记录谷神星
- 是否可以使用一个类来控制 C++ 中另一个类的对象?(阿杜伊诺)
- 如何删除列出的"QGraphicsPathItem"对象以控制进程内存使用情况?
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- C++ Python 模块在 Blender 中崩溃,但在 Python 控制台中不会崩溃
- wx通用目录控制错误"wxTheFileIconsTable was nullptr"
- main() 中的 std::cout 在调试期间不会在调试控制台中打印任何内容
- Cython通过浮点数的最快方式,用于高频控制回路
- 用户控制从 c++ 到 java 脚本的 Webassembly 访问调用
- C ++,如何从控制台中输入的字符串中删除字母?
- 如何从单独的线程控制 SFML 窗口?
- 使用Arduino Mega和Simple-H高压电机屏蔽控制直流电机