arduino 有时只执行串行命令
arduino executes serial commands only sometimes
我一直在尝试制作一个 arduino 项目,它根据串行输入改变电机方向。
我已经尝试了 google 搜索中的所有方法。 arduino 有时只响应。我知道我的板没有炸,因为其他板上也有同样的情况。
代码:
const int motorApinA = 6;
const int motorApinB = 7;
const int motorBpinA = 8;
const int motorBpinB = 9;
const int LED_Strip_pos_pin = 2;
void setup() {
Serial.begin(9600);
pinMode(motorApinA, OUTPUT);
pinMode(motorApinB, OUTPUT);
pinMode(motorBpinA, OUTPUT);
pinMode(motorBpinB, OUTPUT);
pinMode(LED_Strip_pos_pin, OUTPUT);
Serial.write("yay, your code is working");
}
void loop()
{
if (Serial.read() == 'F')
{
digitalWrite(motorApinA, HIGH);
digitalWrite(motorApinB, LOW);
digitalWrite(motorBpinB, HIGH);
digitalWrite(motorBpinA, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'B')
{
digitalWrite(motorApinB, HIGH);
digitalWrite(motorApinA, LOW);
digitalWrite(motorBpinA, HIGH);
digitalWrite(motorBpinB, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'L')
{
digitalWrite(motorApinA, HIGH);
digitalWrite(motorApinB, LOW);
digitalWrite(motorBpinA, HIGH);
digitalWrite(motorBpinB, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'R')
{
digitalWrite(motorApinB, HIGH);
digitalWrite(motorApinA, LOW);
digitalWrite(motorBpinB, HIGH);
digitalWrite(motorBpinA, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'S')
{
digitalWrite(motorApinA, LOW);
digitalWrite(motorApinB, LOW);
digitalWrite(motorBpinB, LOW);
digitalWrite(motorBpinA, LOW);
Serial.println("Done!");
}
}
抱歉,如果我在错误的网站上问这个问题:(
每次调用 Serial.read()
,它都会读取缓冲区中的第一个字符。假设您的缓冲区中有一个 'B'
。除非您的程序恰好在 if (Serial.read() == 'B')
,否则它不会触发您想要的操作。您应该存储 Serial.read()
的返回值并对其求值。
void loop() {
char c = Serial.read();
if (c == 'F') {
Serial.println("F!");
}
if (c == 'B') {
Serial.println("B!");
}
if (c == 'L') {
Serial.println("L!");
}
if (c == 'R') {
Serial.println("R!");
}
if (c == 'S') {
Serial.println("S!");
}
}
我一直在尝试制作一个 arduino 项目,它根据串行输入改变电机方向。 我已经尝试了 google 搜索中的所有方法。 arduino 有时只响应。我知道我的板没有炸,因为其他板上也有同样的情况。
代码:
const int motorApinA = 6;
const int motorApinB = 7;
const int motorBpinA = 8;
const int motorBpinB = 9;
const int LED_Strip_pos_pin = 2;
void setup() {
Serial.begin(9600);
pinMode(motorApinA, OUTPUT);
pinMode(motorApinB, OUTPUT);
pinMode(motorBpinA, OUTPUT);
pinMode(motorBpinB, OUTPUT);
pinMode(LED_Strip_pos_pin, OUTPUT);
Serial.write("yay, your code is working");
}
void loop()
{
if (Serial.read() == 'F')
{
digitalWrite(motorApinA, HIGH);
digitalWrite(motorApinB, LOW);
digitalWrite(motorBpinB, HIGH);
digitalWrite(motorBpinA, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'B')
{
digitalWrite(motorApinB, HIGH);
digitalWrite(motorApinA, LOW);
digitalWrite(motorBpinA, HIGH);
digitalWrite(motorBpinB, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'L')
{
digitalWrite(motorApinA, HIGH);
digitalWrite(motorApinB, LOW);
digitalWrite(motorBpinA, HIGH);
digitalWrite(motorBpinB, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'R')
{
digitalWrite(motorApinB, HIGH);
digitalWrite(motorApinA, LOW);
digitalWrite(motorBpinB, HIGH);
digitalWrite(motorBpinA, LOW);
Serial.println("Done!");
}
if (Serial.read() == 'S')
{
digitalWrite(motorApinA, LOW);
digitalWrite(motorApinB, LOW);
digitalWrite(motorBpinB, LOW);
digitalWrite(motorBpinA, LOW);
Serial.println("Done!");
}
}
抱歉,如果我在错误的网站上问这个问题:(
每次调用 Serial.read()
,它都会读取缓冲区中的第一个字符。假设您的缓冲区中有一个 'B'
。除非您的程序恰好在 if (Serial.read() == 'B')
,否则它不会触发您想要的操作。您应该存储 Serial.read()
的返回值并对其求值。
void loop() {
char c = Serial.read();
if (c == 'F') {
Serial.println("F!");
}
if (c == 'B') {
Serial.println("B!");
}
if (c == 'L') {
Serial.println("L!");
}
if (c == 'R') {
Serial.println("R!");
}
if (c == 'S') {
Serial.println("S!");
}
}