How to Wait for Input in Arduino#

How to Wait for Input in Arduino —— Delft Stack

Serial.available()#

void setup() { Serial.begin(9600); }

void loop() {
  while (Serial.available() == 0) {
  }
  int mydata = Serial.read();
}

!Serial#

void setup() 
{
    Serial.begin(9600);
    while (!Serial);
    Serial.print("Hello World");
}

void loop() 
{
}

DigitalRead()#

下面的DigitalRead用法有问题吗? digitalread 应该是怎么读都有值啊?

int valPin = 0;
int inputPin = 7;

void setup() { pinMode(inputPin, INPUT); }

void loop() {
  while (digitalRead(inputPin) != LOW)
    ;
  {}
  valPin = digitalRead(inputPin);
}

实际情况不是判断 digitalRead 有值无值,而是是高还是低,这是正常的操作方法。

Set Timeout#

setTimeout 起了什么作用呢?是5000ms必须会输出吗,还是会报错?

void setup() {
  Serial.begin(9600);
  Serial.setTimeout(5000);  // Set a timeout of 5000 milliseconds (5 seconds)
}

void loop() {
  if (Serial.available()) {
    String input = Serial.readStringUntil('\n');
    Serial.print("Received: ");
    Serial.println(input);
  }
}

Define a Custom Delimiter#

void setup() { Serial.begin(9600); }

void loop() {
  if (Serial.find("X")) {
    String input = Serial.readStringUntil('X');
    Serial.print("Received: ");
    Serial.println(input);
  }
}

Wait for a Fixed Length#

void setup() { Serial.begin(9600); }

void loop() {
  const int expectedLength = 4;
  if (Serial.available() >= expectedLength) {
    char buffer[expectedLength];
    Serial.readBytes(buffer, expectedLength);
    Serial.print("Received: ");
    Serial.println(buffer);
  }
}