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

How to make an arduino serial loop (receive numbers continuously)

编码新手!我正在尝试通过从处理中发送的串行数据在我的 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);
        }
    }
}

当一个字节(或者你称之为字符,一个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);
        }
}