6
#include <stdio.h>

#define LED 13

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  int i;
  char command[5];
  for (i = 0; i < 4; i++) {
    command[i] = Serial.read();
  }
  command[4] = '\0';

  Serial.println(command);

  if (strcmp(command, "AAAA") == 0) {
    digitalWrite(LED, HIGH);
    Serial.println("LED13 is ON");
  } else if (strcmp(command, "BBBB") == 0) {
    digitalWrite(LED, LOW);
    Serial.println("LED13 is OFF");
  }
}

Arduinoのシリアルで4文字の長さの文字列を読み込もうとしています。AAAAの場合はLEDをオンにし、BBBBの場合はシリアルをオフにします。

しかし、「AAAA」と入力すると、途中にたくさんの「ÿ」が付いた「AAAÿ」と表示されます。

私はすべてを正しく読んでいると思いますが、それはあまりうまく機能していません、私が間違っていることについて何か考えはありますか?

4

4 に答える 4

10
String txtMsg = "";  
char s;

void loop() {
    while (serial.available() > 0) {
        s=(char)serial.read();
        if (s == '\n') {
            if(txtMsg=="HIGH") {  digitalWrite(13, HIGH);  }
            if(txtMsg=="LOW")  {  digitalWrite(13, LOW);   }
            // Serial.println(txtMsg); 
            txtMsg = "";  
        } else {  
            txtMsg +=s; 
        }
    }
}
于 2012-09-18T19:18:18.330 に答える
1
#define numberOfBytes 4
char command[numberOfBytes];

    void serialRX() {
      while (Serial.available() > numberOfBytes) {
        if (Serial.read() == 0x00) { //send a 0 before your string as a start byte
          for (byte i=0; i<numberOfBytes; i++)
            command[i] = Serial.read();
        }
      }
    }
于 2012-05-30T12:22:52.127 に答える
1

読むことができるものがあるかどうかを確認する必要があります。そうでない場合、read()は-1を返します。Serial.available()を使用して、読み取りバッファーを確認できます。

于 2012-05-04T15:42:34.543 に答える
1

バッファに読み取る文字がないため、「ÿ」と表示されます。他のキャラクターがUARTバッファからアンスタックするまでには少し時間がかかります。したがって、charを読み取るためのループを実行することはできません。あなたはそれを読む前に別のキャラクターが利用可能になるのを待たなければなりません。

また、キャラクターを待つこの方法は、メインループをブロックするため、最善の方法ではありません。

これが私のプログラムで私がしていることです:

String command;

void loop()
{
    if(readCommand())
    {
        parseCommand();
        Serial.println(command);
        command = "";
    }
}

void parseCommand()
{
  //Parse command here
}

int readCommand() {
    char c;
    if(Serial.available() > 0)
    {
        c = Serial.read();
        if(c != '\n')
        {       
            command += c;
            return false;
        }
        else
            return true;

    }
} 
于 2014-11-07T18:24:40.037 に答える