C语言中的决策与循环编程
立即解锁
发布时间: 2025-08-20 01:16:47 订阅数: 4 


Arduino C语言编程入门与实践
### C语言中的决策与循环编程
#### 1. 抛硬币模拟程序
我们可以使用两个LED面包板电路来模拟抛硬币的过程。下面按照五个编程步骤来设计这个程序:
- **初始化步骤**:此步骤用于建立程序运行的环境。我们要使用之前程序中的两个LED,所以需要初始化控制LED的I/O引脚。同时,程序需要生成一系列随机数。可以在Arduino语言参考中查找相关代码,发现有`randomSeed()`和`random()`函数。`random()`生成的是伪随机数,每次使用会得到相同的序列。为了得到不同的随机数序列,在初始化步骤使用`randomSeed()`函数,用`analogRead(A0)`返回的值作为种子。此外,还需要一些工作变量来存储程序中的各种值。
- **输入步骤**:此步骤需收集解决当前任务所需的所有数据。该程序使用的唯一数据是随机数生成器产生的随机数。
- **处理步骤**:程序要检查随机数的值,判断是正面还是反面。随机数生成器返回的是数值,没有“正面”或“反面”的数据类型,我们将抛硬币的结果看作二进制,把随机数视为奇数或偶数。奇数代表正面,偶数代表反面,通过对随机数取模2来判断。
- **输出步骤**:这是最复杂的步骤。目标是当随机数为奇数(正面)时点亮一个LED,为偶数(反面)时点亮另一个LED。先将两个LED关闭约一秒,然后根据生成的随机数点亮相应的LED几秒钟,之后不断重复这个过程。
- **终止步骤**:由于程序设计为永远运行(直到断电或出现故障),所以没有终止步骤。
以下是抛硬币模拟程序的代码:
```c
/*
Heads or Tails
Turns on an LED which represents head or tails. The LED
remains on for about 3 seconds and the cycle repeats.
Dr. Purdum, Nov 12, 2014
*/
#define HEADIOPIN 11 // Which I/O pins are we using?
#define TAILIOPIN 10
#define PAUSE 50 // How long to delay?
int headsCounter; // Heads/tails counters
int tailsCounter;
long loopCounter;
long randomNumber = 0L; // 'L' tells compiler it's a long data type,
// not an int.
// the setup routine runs once when you press reset:
void setup() {
Serial.begin(115200);
headsCounter = 0;
tailsCounter = 0;
loopCounter = 0;
pinMode(HEADIOPIN, OUTPUT);
pinMode(TAILIOPIN, OUTPUT);
randomSeed(analogRead(A0)); // This seeds the random number generator
}
void loop() {
randomNumber = generateRandomNumber();
digitalWrite(HEADIOPIN, LOW); // Turn both LED's off
digitalWrite(TAILIOPIN, LOW);
delay(PAUSE); // Let them see both are off for a time slice
if (randomNumber % 2 == 1) { // Treat odd numbers as a head
digitalWrite(HEADIOPIN, HIGH);
headsCounter++;
} else {
digitalWrite(TAILIOPIN, HIGH); // Even numbers are a tail
tailsCounter++;
}
loopCounter++;
if (loopCounter % 100 == 0) { // See how things are every 100 flips
Serial.print("After ");
Serial.print(loopCounter);
Serial.print(" coin flips, heads = ");
Serial.print(headsCounter);
Serial.print(" and tails = ");
Serial
```
0
0
复制全文
相关推荐










