Arduino printf(“s”,stringName)打印错误的文本,但只打印一次
我有一个菜单功能,输入一个问题和两个选项,然后用户选择一个。每次都很好,只有一次;我打电话Arduino printf(“s”,stringName)打印错误的文本,但只打印一次,arduino,Arduino,我有一个菜单功能,输入一个问题和两个选项,然后用户选择一个。每次都很好,只有一次;我打电话 if (menu("ou est le corps?","interieur ","exterieur")==1) { 但不是打印“interieur”,而是显示“p?” 如果没有空间,它可以正常工作,但我需要创建一个空间,\n并执行完全相同的操作。 我对这个函数有另一个调用,\n它可以正常工作,所以我不知道为什么它不能工作。有人有主
if (menu("ou est le corps?","interieur ","exterieur")==1)
{
但不是打印“interieur”,而是显示“p?”
如果没有空间,它可以正常工作,但我需要创建一个空间,\n并执行完全相同的操作。
我对这个函数有另一个调用,\n它可以正常工作,所以我不知道为什么它不能工作。有人有主意吗
PS:choix1的值随后通过蓝牙发送,并在那里保持不变
PPS:如果有什么不清楚的地方,请告诉我,我不是天生的英国人
PPPS(抱歉):再次尝试运行相同的代码,它似乎打印了一个随机字符,后跟“?”,我有两个“p?”,一个“?”和一个“?”
[更新]一次“#”
int菜单(字符串文本、字符串选项X1、字符串选项X2){
[...]
M5.Lcd.printf(“->%s%s”,choix1,choix2);
不能将String
对象视为const char*
,这正是格式说明符%s
所期望的。String
是一个用于存储..字符串/字符数据的Arduino类,但此类的对象并不等同于指向数据的原始指针
为此,您需要调用String
对象上的c_str()
方法来获取指向数据的c-String指针,如文档[1]所示
[…]
M5.Lcd.printf(“->%s%s”,choix1.c_str(),choix2.c_str());
[..]
[1]
int menu (String texte, String choix1, String choix2)
{
envoye = 0;
rxValue = "0";
while (digitalRead(M5_BUTTON_HOME) != LOW && rxValue == "0")
{
heure();
M5.Lcd.setTextSize(2);
M5.Lcd.print(texte);
M5.Lcd.printf("\n");
if (selec == 0)
{
M5.Lcd.printf("->%s %s", choix1, choix2);
}
else
{
M5.Lcd.printf(" %s ->%s", choix1, choix2);
}
if (M5.BtnB.read() != 0)
{
if (selec == 0)
{
selec = 1;
}
else
{
selec = 0;
}
while (M5.BtnB.read() != 0)
{
if(digitalRead(M5_BUTTON_HOME) == LOW)
{
M5.Lcd.fillScreen(BLACK);
delay(1000);
if(digitalRead(M5_BUTTON_HOME) == LOW)
{
choix=50;
heure();
delay(1000);
return 1;
}
}
}
}
if (deviceConnected && envoye == 0)
{
sendchoix(texte, choix1, choix2);
envoye++;
}
}
if (rxValue != "0")
{
recuble = &rxValue[0];
selec = atoi(recuble) - 1;
rxValue = "0";
}
M5.Lcd.fillScreen(BLACK);
delay(300);
return selec;
}