Arduino调用LiquidCrystal::write(String&)提示无匹配函数如何解决
问题原因与解决方案
报错原因
- LiquidCrystal库提供的
write()方法没有设计接收ArduinoString类对象的重载,它仅支持以下几类输入参数:- 单个char类型的字符
- const char*类型的C风格字符串
- 指向字节数组的指针与长度参数
- Arduino的
String是封装后的字符串类,和原生C风格字符串是完全不同的类型,因此编译器找不到匹配的函数实现,直接抛出对应错误。
可行解决方案
方案1:改用支持String类型的print()方法(最简便)
LiquidCrystal库的print()方法原生支持String类型参数,直接将代码中所有lcd.write(s)替换为lcd.print(s)即可,修改后的完整代码如下:
void printOnLcd(String s){ for (int i =0; i<2; i++){ if( i % 2 == 0){ for(int a=0; a<16; a++){ lcd.setCursor(a,i); lcd.print(s); delay(200); lcd.setCursor(a,i); lcd.write(" "); } } else { for(int a = 0; a<16; a++){ lcd.setCursor(a,i); lcd.print(s); delay(200); lcd.setCursor(a,i); lcd.write(" "); } } }
方案2:将String转换为C风格字符串后传入write()
如果需要保留write()调用,调用String类的c_str()方法即可获取其对应的const char*类型字符串,修改为lcd.write(s.c_str())即可。
内容的提问来源于stack exchange,提问作者Sebastiano Bortoletti
相关产品推荐
相关产品推荐

