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