本周主要围绕《Head first C》这本书展开C语言学习,按照计划,我学习了前四章的内容。
基本内容
以下时学习做的思维导图(笔记)
第1章虽然做的是思维导图,但实际上因为大多数内容已经掌握,所以实际上就是补充记了几个零散的点。
第2、2.5章主要是指针、数组、字符串的内容,大多也已经学过,但这本书里讲得更透彻清晰。
代码实践
看书学习的过程中也会在一些不是特别明晰的地方跑点代码看一看。
按照计划,本周学习完正好有一个C语言实验:Arduino
具体要求:
1 读取湿度传感器的数据
湿度传感器连到了模拟输入管脚,代码需要从该管脚读取模拟量。
在实验室,我们发现,一般当这个值低于800时,植物就需要浇水了。你种的植物可能不用,如果它是仙人掌的话。
2 把数据写到LED
LED连到了数字管脚。
当植物不需要浇水时,把数据写到LED连接的数字管脚,让它关闭LED。
当植物需要浇水时,把数据写到数字管脚,让它打开LED。
如果你想做得更好,就让LED闪烁,还可以在数字接近800时让LED闪烁。
3 向串口写数据
当植物需要浇水时,需要重复地向计算机的串口写字符串“给我浇水!”。
当植物有了充足的水分,向串口写字符串“谢谢啊!”,写一次就行了。
假设Arduino已经插入了计算机的USB插口。
代码与改进:
按照要求,我先简单写了一版代码:
void setup() {
// put your setup code here, to run once:
int input, water = 0;
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
int input, water = 0;
input = analogRead(0);
if (input > 750 && input < 800)
{
digitalWrite(13, HIGH);
delay(100);
}
else if (input >= 800)
{
digitalWrite(13, HIGH);
Serial.println("I need water!");
water = 1;
}
else if (water == 1 && input < 800)
{
Serial.println("Thank you!");
water = 0;
}
}
比较粗糙(连大于小于都弄错了),再自查与他查(GPT)后我进行了进一步的完善修改:
int input, water = 0; //water 用于说明是否已经浇水
void setup() {
// put your setup code here, to run once:
Serial.begin(9600);
pinMode(13, OUTPUT); //先初始设定13号的状态
}
void loop() {
// put your main code here, to run repeatedly:
input = analogRead(0);
if (input > 800 && input < 850) //接近800闪烁
{
digitalWrite(13, HIGH);
delay(100);
digitalWrite(13, LOW);
delay(100);
}
else if (input <= 800) //达到800常亮并输出字符串
{
digitalWrite(13, HIGH);
Serial.println("I need water!");
water = 1;
}
else if (water == 1 && input > 800) //降下800熄灯并输出字符串
{
digitalWrite(13, LOW);
Serial.println("Thank you!");
water = 0;
}
}
遇到的问题与解决、经验教训等
- 遇到过很多次,总是忘记变量等要初始化!!!