使用Ultrasonic库出现'timing()私有'错误的解决咨询
解决Ultrasonic库报错:'unsigned int Ultrasonic::timing()' is private within this context
问题原因
你安装的ultrasonic-master library将timing()方法设置为私有成员,而你的代码直接在外部调用了这个私有方法,违反了C++的访问权限规则,导致编译报错。这个库的API设计和你代码适配的旧版Ultrasonic库不一致。
解决办法
方法一:修改代码适配当前库
该库提供了封装好的公开方法直接获取距离,无需手动调用timing()和convert()。将你的cmMsec()函数修改为:
float cmMsec() { // 直接调用库的公开方法读取厘米单位距离 return ultrasonic.read(Ultrasonic::CM); }
注:原代码中delay(10)写在return之后,不会被执行,可直接删除。
方法二:更换适配代码的Ultrasonic库
若不想修改代码,直接卸载当前的ultrasonic-master library,安装一款API兼容旧版的Ultrasonic库(比如常见的HC-SR04专用Ultrasonic库,这类库通常将timing()设为公开方法)。
额外代码问题提示
即使解决库的问题,你的代码仍有几处逻辑错误需要修正:
decisao()函数中的siga_em_frente()是拼写错误,应改为go_forward()。break()语句不能直接在void函数中使用,decisao()里的break()会导致编译错误,需调整逻辑替换该语句。loop()中定义了局部变量float distance,但decisao()调用的是全局int distance,作用域不一致会导致逻辑混乱,建议统一变量使用方式。
内容的提问来源于stack exchange,提问作者Lucas Tezolini
相关产品推荐
相关产品推荐

