[英]Concatenating an int variable with a string results in a strange output
我正在嘗試制作一個arduino程序。
其目的:從2到11讀取數字引腳。打印引腳號;如果引腳為高電平,則打印“ 1”;如果引腳為低電平,則打印“ 0”。
這是我嘗試做的:
void loop() {
for(int i = 2; i<12; i++){
if(digitalRead(i) == HIGH){
Serial.println(i + "1");
}
if(digitalRead(i) == LOW){
Serial.println(i + "0");
}
}
}
輸出應為 “21”,如果銷2是HIGH
,或“20”,如果銷2是LOW
。 其他引腳也一樣。
相反 ,它打印的只是
Ò>Tm_°
>Tm_°
>Tm_°
Tm_°
Ò>Tm_°
>Tm_°
>Tm_°
Tm_°
關於如何使它起作用的任何建議?
您的代碼會怎樣?
Serial.println(2 + "1")
不會為您提供21
的C語言(本例中為Arduino使用)。
您正在嘗試直接連接整數和字符串,並且在C
(或幾乎是編程語言)中無效。
解:
void loop() {
char pin_display;
for(int i = 2; i<12; i++){
if(digitalRead(i) == HIGH){
pin_display = i + 0x30 //convert to Ascii
Serial.print(pin_display);
Serial.print("1");
}
...
如另一個答案中所述,問題發生在Serial.println(i + "1")
。 該表達式被評估為int +指針 ,導致指針損壞。 一種簡單的修復方法是從整數變量創建String : Serial.println(String(i)+"1")
。 該表達式被評估為String +指針 ,該指針將導致一個有效的String對象。
更正的代碼:
void loop() {
for(int i = 2; i<12; i++){
if(digitalRead(i) == HIGH){
Serial.println(String(i) + "1");
}
if(digitalRead(i) == LOW){
Serial.println(String(i) + "0");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.