這裏是我的代碼:Arduino的不解析文本正確
const int RED = 11;
const int GRN = 10;
const int BLU = 9;
String inputString = "";
boolean stringComplete = false;
void setup() {
Serial.begin(9600);
pinMode(RED, OUTPUT);
pinMode(GRN, OUTPUT);
pinMode(BLU, OUTPUT);
inputString.reserve(256);
// I'm using a common-anode led,
//so HIGH and LOW works in reverse
digitalWrite(RED, HIGH);
digitalWrite(GRN, HIGH);
digitalWrite(BLU, HIGH);
}
void loop() {
if(stringComplete) {
inputString.toLowerCase();
Serial.println("received " + inputString);
matchString(inputString, 500);
inputString = "";
stringComplete = false;
}
}
void serialEvent() {
while(Serial.available()) {
char inChar = (char) Serial.read();
inputString += inChar;
if(inChar == '\n')
stringComplete = true;
}
}
void matchString(String input, int duration) {
if(containsString(input,"red")) {
colour(RED, duration);
Serial.write("input matched red\n"); // added for debugging
}
else if(containsString(input, "green")) {
colour(GRN, duration);
Serial.write("input matched green\n");
}
else if(containsString(input, "blue")) {
colour(BLU, duration);
Serial.write("input matched blue\n");
}
else {
delay(duration);
Serial.write("input didn't match anything\n");
}
}
void colour(int pin, int duration) {
digitalWrite(pin, LOW);
delay(duration);
digitalWrite(pin, HIGH);
}
// added for later implementation
void colour(int pin1, int pin2, int duration) {
digitalWrite(pin1, LOW);
digitalWrite(pin2, LOW);
delay(duration);
digitalWrite(pin1, HIGH);
digitalWrite(pin2, HIGH);
}
// attempt to implement String.contains
boolean containsString(String input, String search) {
int max = input.length() - search.length();
for(int i = 0; i <= max; i++) {
if(input.substring(i) == search)
return true;
}
return false;
}
我不知道哪裏出了問題在這裏,我知道它讀取字符流,但它總是寫input didn't match anything
回到我的身邊,保持該LED熄滅......
我做了什麼錯在這裏?
這是一個不錯的解決方法。我對'strstr'不熟悉,但如果你說它像魅力一樣工作,速度更快,我就馬上使用它! – ladislas
它的工作原理相同,您的indexOf,除了使用字符數組,並返回null而不是0,如果沒有找到任何東西,所以這兩個方案都同樣有效。我猜 –