Как сделать последовательный цикл Arduino (получать номера непрерывно)

Новое в кодировании! Я пытаюсь получить текст на моей светодиодной матрице через последовательные данные, которые отправляются с обработки.

Мой код работает, но единственная проблема заключается в том, что, хотя последовательные данные при обработке являются постоянными, код 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 ответ

Решение

Когда байт (или вы называете его символом, данные длиной 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);
        }
}
Другие вопросы по тегам