如何制作arduino串行循环(连续接收数字)

时间:2018-06-02 05:33:12

标签: c++ matrix arduino processing arduino-uno

新编码!我试图通过从处理中发送的串行数据在我的LED矩阵上获取文本。

我的代码有效但唯一的问题是虽然处理的串行数据是常量,但arduino代码只读取一次数字。这使得文本不会一直滚动。如何在arduino上循环读取序列?

以下是我的代码的相关部分:

void loop() 
{
    if (Serial.available() > 0) 
    {
        int matrixPinState = Serial.read();
        // stage = Serial.read(); 
        // analogWrite(matrixPin, stage);

        if (matrixPinState == 1) 
        {
            matrix.fillScreen(0);
            matrix.setCursor(x, 0);
            matrix.print(F("Im kind"));

            if (--x < -30) 
            {
                x = matrix.width();

                if (++pass >= 8) pass = 0;
                matrix.setTextColor(colors[pass]);
            }
        matrix.show();
        delay(30);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

当一个字节(或你称之为字符,一个8位长的数据)由uart块(硬件)提取时,它被缓冲到输入缓冲区,以便程序员可以读取和处理它。

在您的情况下,当您发送一个字符时,它会被提取并放入缓冲区,当您读取它时,除非您发送给新字符,否则没有更多字节可供读取。

简而言之,请先读取引脚状态。你可以这样做:

int matrixPinState = 0

void setup() {

    // do all your setup settings  first

    while (Serial.available() < 0) {

    // wait here for the input

     delay(30);
}

    // got your input, read it

     matrixPinState = Serial.read();
}

void loop() 
{

        if (matrixPinState == 1) 
        {
            matrix.fillScreen(0);
            matrix.setCursor(x, 0);
            matrix.print(F("Im kind"));

            if (--x < -30) 
            {
                x = matrix.width();

                if (++pass >= 8) pass = 0;
                matrix.setTextColor(colors[pass]);
            }
        matrix.show();
        delay(30);
        }
}