试图美化这个Arduino代码[初学者在这里]
Trying to Beautify this Arduino Code [Beginner here]
完整的初学者在这里,我想知道是否可以简化此代码,将其精简或缩短。
正如您很容易知道的那样,当另一个 LED 关闭时,这个东西使一个 LED 打开,反之亦然,在一个循环中。
void setup()
{
pinMode(3, OUTPUT);
pinMode(13, OUTPUT);
}
void loop()
{
digitalWrite(13, HIGH);
if (digitalRead(13) == HIGH)
digitalWrite(3, LOW);
delay(1000); // Wait for 1000 millisecond(s)
digitalWrite(13, LOW);
if (digitalRead(13) == LOW)
digitalWrite(3, HIGH);
delay(1000); // Wait for 1000 millisecond(s)
}
这是我看到的:
- 使用常量表达式 (
constexpr
( 将 3 和 13 的引脚号设置为常量 8 位变量,而不是到处写3
和13
,因为这很难维护,也很难知道这些数字的含义。 - 由于 LED 状态相反,因此将它们的状态包含在单个变量中,
led_state
,您可以切换该变量。无需写入状态,然后读取状态。在这种情况下,这没有任何意义。 - 删除具有两个延迟调用的重复项。您可以将其简化为一个。
- 最后,不要使用
delay()
来处理这个问题,这是一个浪费的调用,实际上使用100%的CPU只是为了延迟。但是,让我们将这种变化留到另一天,因为这足以暂时吸收。要了解如何在没有阻塞/浪费delay()
的情况下执行此操作,请研究以下代码:- (初学者友好(:https://www.arduino.cc/en/tutorial/BlinkWithoutDelay
- 然后是这段代码(更高级的基于时间戳的协作多任务处理(: 从没有中断引脚的传感器读取的最佳方法,并且在测量准备就绪之前需要一些时间
这是我更改的代码(尽管仍在使用delay()
(:
constexpr uint8_t PIN_LED1 = 3;
constexpr uint8_t PIN_LED2 = 13;
void setup()
{
pinMode(PIN_LED1, OUTPUT);
pinMode(PIN_LED2, OUTPUT);
}
void loop()
{
static bool led_state = LOW;
digitalWrite(PIN_LED1, led_state);
digitalWrite(PIN_LED2, !led_state);
led_state = !led_state; // toggle the state
delay(1000);
}
其他参考资料:
constexpr
: https://en.cppreference.com/w/cpp/language/constexpruint8_t
表示"无符号 8 位类型"。无符号表示"只有正值",因此可以在其中存储数字 0 到 255。看这里:http://www.cplusplus.com/reference/cstdint/。它来自 stdint.h 头文件。byte
在Arduino中说话是这个的别名。https://www.arduino.cc/reference/en/language/variables/data-types/byte/static
是一个有很多含义的关键字,但在这里我在简单的 C 意义上使用它,这意味着它被初始化为我设置为 ONCE——只有第一次,然后在每个新的循环周期保持其最后一个已知值,而不是重置。在这里阅读:C中的"静态"是什么意思?
digitalWrite(13, HIGH);
if (digitalRead(13) == HIGH)
digitalWrite(3, LOW);
将引脚 13 设置为高电平后,无需读取其值。
digitalWrite(13, HIGH);
digitalWrite(3, LOW);
就足够了。
除此之外,您不需要作为初学者编写漂亮的代码。专注于了解正在发生的事情以及如何实现什么。美丽的事物通常是由师傅创造的,而不是学徒。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 代码在main()中运行,但在函数中出现错误
- 在VS代码中交叉编译Windows与Linux上的MinGW的SDL程序
- 编译包含字符串的代码时遇到问题
- 我在c++代码中生成了一个运行时#3异常
- 如何在linux终端中同时编译和运行c++代码
- 试图美化这个Arduino代码[初学者在这里]
- 如何修复初学者C++代码中发生的未定义行为
- 初学者代码寻找改进
- 我将如何在此类中使用聚合(初学者代码)
- 为什么尝试这样的类代码时会遇到错误?我初学者对不起
- 我的代码(c ++ 初学者)有什么问题?
- 有关循环冗余代码的初学者问题
- C++初学者.获取代码中的错误
- 代码块上的编译器标志出现问题.编程初学者
- 初学者C - 编译我的代码时遇到困难
- 涉及向量的初学者代码,SEIGSEV运行时错误
- 初学者C :为什么此代码给出不同的结果
- C++ 初学者:我无法修复和编译代码
- C++ 初学者 - "错误"作为代码中的命令