Как сделать последовательный цикл Arduino (получать номера непрерывно) - PullRequest
0 голосов
/ 02 июня 2018

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

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

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