基本的Arduino串行通信

时间:2016-01-21 00:39:00

标签: arduino

我只是想尝试开始串行通信的基础知识;我尝试使用这个例子,我发现,根据我的理解它应该工作。我只想把我输入串行监视器的内容输出回去,所以我可以看看它是如何工作的。我还尝试删除while serial.available,以防串行监视器没有触发该条件。 这是我的代码:

// Buffer to store incoming commands from serial port
String inData;

void setup() {
Serial.begin(9600);
Serial.println("Initialized\n");
 }

   void loop() {
     while (Serial.available() > 0)
 {
    char recieved = Serial.read();
    inData += recieved; 

    // Process message when new line character is recieved
    if (recieved == '\n')
    {
        Serial.println("Arduino Received: ");
        Serial.println(inData);

        inData = ""; // Clear recieved buffer
        }
    }
}

它目前上传得很好,并打印"初始化"但如果我尝试发送"任何数据。

2 个答案:

答案 0 :(得分:1)

Serial.read()返回int。 您需要转换(char)才能将其存储为char。

char recieved = (char)Serial.read();

顺便说一句:应该收到变量名称:)

编辑:

也许您因某些原因从未收到过任何数据。 让我们尝试一些超级简单的东西,按照@sohnryang的建议使用serialEvent(),然后在Serial.available()触发时立即打印一些文本:

    while (Serial.available() > 0) {
        Serial.println("Something has been received");
    }

每次向Arduino发送内容时都会看到此消息。

答案 1 :(得分:0)

使用SerialEvent。所以代码看起来像这样。

String inData;

void setup() {
    Serial.begin(9600);
    Serial.println("Initialized\n");
}

void loop() {
}

void serialEvent() {
    while (Serial.available()) {
        char inChar = (char)Serial.read();
        inData += inChar;
        if (inChar == '\n') {
            Serial.println("Arduino Recieved : ");
            Serial.println("inData");
            inData = "";
        }
    }
}