所以我试着使用这里的另一篇文章中的代码,看看我是否可以使用它,这是一个旨在利用电位器来移动伺服电机的代码,但当我试图编译它时,上面给出的错误是No operator "=“匹配"Servo_Project.cpp”中的这些操作数。我如何着手修复这个错误?
为了防止我这么说,我试图编译代码的板是NUCLEO-L476RG,我提到的帖子中的板使用了Nucleo L496ZG板和塔Pro Micro Servo 9G。
#include "mbed.h"
#include "Servo.h"
Servo myservo(D6);
AnalogOut MyPot(A0);
int main() {
float PotReading;
PotReading = MyPot.read();
while(1) {
for(int i=0; i<100; i++) {
myservo = (i/100);
wait(0.01);
}
}
}发布于 2020-05-21 05:30:44
这一行:
myservo = (i/100);在几个方面都是错误的。首先,在C++中,i/100将始终是零整数除法截断。其次,没有允许将整数值赋给Servo对象的=操作符。YOu需要调用某种Servo方法,可能是write()。
myservo.write(SOMETHING);SOMETHING应该是你想要工作的伺服的位置或速度。有关说明,请参阅Servo class参考。你的代码试图使用从0到1的分数,但这是行不通的- Servo想要一个介于0和180之间的位置/速度。
发布于 2020-05-21 19:53:40
您应该查看Servo.h头文件,以了解实现了哪些成员函数和运算符。
假设您使用的是this,那么它确实有:
Servo& operator= (float percent);尽管请注意,该参数是float,并且您传递的是int (该参数也在0.0到1.0的范围内-因此不是其名称所暗示的“百分比”-所以要小心,文档和命名都很糟糕)。你应该有:
myservo = i/100.0f;然而,即使i / 100会为循环中的所有i生成零,这也不能解释错误,因为隐式强制转换应该是可能的-即使显然不需要。您应该查看您正在使用的实际头文件,以查看是否声明了operator= -可能您有错误的文件或不同的版本,或者只是碰巧使用相同名称的完全不同的实现。
我还注意到,如果您查看header,就会发现该函数没有文档标记,Servo& operator= (Servo& rhs);成员也根本没有文档记录-因此自动生成了令人困惑的“写和读函数的简写”。在Servo文档页面上,当所显示的函数只是其中之一时。它可能已从您的版本中删除。
考虑到文档不完整,而且operator=看起来像是事后才想到的,最简单的解决方案是在任何情况下都直接使用read() / write()成员。或者实现您自己的Servo类--在任何情况下,它似乎都只是PwmOut类的一个薄薄的包装器/外观。因为这实际上是mbed的一部分,而不是用户贡献的未知质量的代码,所以你可能有更坚实的基础。
https://stackoverflow.com/questions/61923144
复制相似问题