无法在Arduino编程中将流数据存储在变量中

时间:2016-04-12 11:39:49

标签: arduino

我无法将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);
}

1 个答案:

答案 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”时,它将打印回来。我希望这会给你一些想法。快乐的编码。