我无法将serial.port
值存储在变量中。我想从Android telnet应用程序发送消息,打开和关闭。如果有的话,我想打开风扇,如果关闭,我想打印出来。我可以打开和关闭,同时我可以静态修复价值。我无法将流存储在变量中。
String stringOne;
void setup() {
digitalWrite(13, LOW);
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
// send an intro:
Serial.println("\n\nString substring():");
Serial.println();
pinMode(13,OUTPUT);
}
void loop() {
digitalWrite(13,LOW);
// Set up a String:
stringOne ="+IPD 0,14 :ON";
int length = stringOne.length();
Serial.println(stringOne.length());
Serial.println(stringOne);
if (Serial.available() > 0) {
// substring(index) looks for the substring from the index position to the end:
if (stringOne.substring(length-2,length) == "ON") {
Serial.println("FAN ON");
digitalWrite(13,HIGH);
// delay(2000);
}
if (stringOne.substring(length-3,length) == "OFF") {
Serial.println("FAN OFF");
digitalWrite(13,LOW);
// delay(2000);
}
}
// you can also look for a substring in the middle of a string:
// do nothing while true:
while (true);
}
答案 0 :(得分:1)
好吧,在编辑你的问题时,我无法注意到代码末尾的无限循环。
// do nothing while true:
while(true)
在这种情况下,即使你的代码没问题,也无法获得下一个数据。
void loop --> Remember it is itself a infinite loop
更新1:
您使用串口的逻辑是错误的;
请记住,串口一次只能收到一个字符。 如果你从pc发送“你好”,在另一端,arduino将收到h,e,l,l,o
诀窍是将所有字母收集到一个数组中。然后在其中使用我们的逻辑。
char commandbuffer[20]; //an array to hold our characters
int i=0;
if (Serial.available() > 0) {
while( Serial.available() >0) { //read until all data we send arrives
char c = Serial.read();
commandbuffer[i]= c; //we are actually storing it one by one
i++;
}
}
commandbuffer[i]='\n';
for(int j = 0; j<i; j++){
Serial.print(commandbuffer[j]);// and show it one by one too
}
现在当您发送“hello”时,它将打印回来。我希望这会给你一些想法。快乐的编码。