arduino实验2

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

集美大学计算机工程学院实验报告

课程名称:嵌入式系统应用班级:实验成绩:

指导教师:黄斌姓名:

实验项目名称:学号:上机实践日期:

10.23

实验项目编号:02组号:上机实践时间:5-6

一、目的(本次实验所涉及并要求掌握的知识点)

a) 掌握嵌入式软件设计中的状态机和循环缓冲器

二、实验内容与设计思想(设计思路、主要数据结构、主要代码结构、主要代码段分析)

a) 利用状态机完成一个简单的嵌入式设计。你的设计必须有一定的现实意义,生活中有许多基于状态机的设计,比如智能台灯、儿童玩具等等。(如果你没有足够的元器件完成你的设计,你可以使用LED 模拟输出,数字输入引脚的高低电平信号来模拟输入。当然,你需要在报告里描述清楚你的设计。)

智能台灯,通过光照传感器来识别环境亮度,判断亮度是否足够。再通过声音传感器,来判断是否需要点亮台灯。

设计三种状态来实现,状态1:晚上状态。状态2:亮灯状态。状态3:灭灯状态。

#define DAYTIME 0

#define NIGHT 1

#define LIGHTING 2

#define DARK 3

unsigned long tttime;//计时器计时

unsigned int state = DAYTIME; //状态机状态

int light_sensor = 2; // 光照传感器引脚

bool light = 0; // 光照传感器读数

int belt_sensor = 3; // 声音传感器引脚

bool belt = 0; //声音传感器读数

int led = 4; //LED 灯引脚

void setup() {

Serial.begin(9600);

pinMode(light_sensor, INPUT);

pinMode(belt_sensor, INPUT);

pinMode(led, OUTPUT);

}

void loop() {

light = digitalRead(light_sensor);

belt = digitalRead(belt_sensor);

digitalWrite(led, LOW);

switch (state) {

case DAYTIME: //输出状态

Serial.println("State:DAYTIME");

if (light) {

state = NIGHT;

tttime = millis(); //读取时间戳

}

break;

case NIGHT: //如果无光判断为晚上

Serial.println("State:NIGHT");

if (belt) {

state = LIGHTING;

}

else {

state = DARK;

} break;

case LIGHTING: //如果是晚上,有声音的情况下,亮灯,延迟关闭Serial.println("State:LIGHTING");

digitalWrite(led, HIGH);

if (!light)

state = DAYTIME;

else if (millis() - tttime > 10000) {

state = NIGHT;

tttime = millis();

} break;

case DARK: //如果是晚上的时候,亮灯超时

Serial.println("State:DARK");

if (belt)

state = LIGHTING;

else if

(!light)

state = DAYTIME;

break;

default:

Serial.println("State:UNKNOWN");

break;

}

delay(1000);

}

三、实验现象及结果分析(实验步骤、测试方法、实验效果截图、测试结果分析)

a)无光线之后,从白天转换为晚上状态。判断是否有声音,转换为亮灯状态或者灭灯状态。亮灯状态时10秒判断一次是否还有声音。

b) 在亮灯状态时,若无声音时变成灭灯状态

四、实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)

通过状态机可以很简单的控制装置的状态。但如果状态转换不正确很容易形成死循环,这点需要注意。

相关文档
最新文档