嵌入式开发期末重点

发布时间 2023-06-04 00:16:12作者: 纤

题型

1.选择题 20题 20分

2.简答题 (传感器原理) 5~6题 30分

3.模块设计题 3题 30分(代码完善) 超声波、蜂鸣器 设计一个防盗系统 写setup 或者loop

4.综合应用设计 1题20分 最后一章(8) 倒车雷达 智能家居 (系统总体结构图、硬件设计、流程设计(如果是比较简单的需要写出代码))

具体页

1.2节arduino的概述

1.3节p7 电子设计基础(二极管)

二极管一般标记为 D,常用在整流、稳压、恒流、开关、发光及光电转换等电路中。二极管符号及实物如图 1-7 所示。发光二极管(LED 灯)是半导体二极管的一种,可以把电能转化成光能。

发光二极管的导通电压一般在 1V 左右,导通电流一般为 10mA。如果施加的正向电压超过导通电压,发光二极管电流会急剧上升直到损坏。在应用中需要在发光二极管电路中串联一个限流电阻器来保证其正常工作。电阻器阻值根据施加电压和发光二极管导通电压计算,计算公式如下。

image-20230603162150466

p10 面包板结构、特征

image-20230603162533294

3.1.2 p35 数学函数

11个数学函数

abs:取绝对值 abs(x);

constrain: 归一化 constrain(a,1,10); 将a数组中的数据归一化到1-10

map: 数值映射 map(x,1,10,10,10); 将1映射为10,10映射为1

max: 比较出最大值 int x = max(val1,val2);

min: 比较出最小值

pow: 计算幂

sqrt: 计算一个数的平方根

sq: 计算一个数的平方

cos: 余弦函数 cos(rad) rad弧度角 结果在-1 到 1之间

sin: 正弦函数

tan: 正切函数

p44 定义数字引脚模式

模式有 INPUT 、 INPUT_PULLUP 、 OUTPUT

可以用pinMode(1,INPUT)来更改

image-20230603164034704

4.1.2 p83 数字I/0接口的封装函数

主要有三个:digitalRead() 数字读、digitalWrite() 数字写、 pinMode 引脚模式

image-20230603171341302

六个高级I/O封装函数

pulseIn: 读取一个脉冲信号的时间长度:高电平或者低电平脉冲 上升沿开始计时,下降沿停止计时,返回以ms为单位的持续时间

pulseIn(PIN,VALUE,timeout) ; PIN引脚,VALUE HIGH或者LOW , timeout 默认为1000ms,可选 , 超时会返回0

pulseInLong: 处理时间较长的脉冲和受中断影响的情况下可以选择pulseInLong

当且仅当中断被激活时使用此函数

shiftIn: 通过串行的方式从引脚上读入数据

shiftOut : 通过串行的方式从引脚输入数据

tone: 指定引脚输出占空比为50%的方波,调用noTone停止输出

tone(pin,frequency,duration) pin 输出方波的引脚编号,frequency 音调的频率, duration 音调的持续时间

noTone: 停止tone函数的输出

4.4.1 p100 I2C总线概述(主机、从机的通信过程)

主设备接受从设备的数据

主设备:

setup
初始化:Wire.begin()  


loop
请求设备#8发送6个字节的数据 Wire.requestFrom(8,6)  
读取数据 while(Wire.available()) Wire.read()

从设备

setup
初始化 设置设备地址8 Wire.begin(8) 
设置请求回调  Wire.onRequest(requestEvent)

requestEvent(){
	Wire.write("hello ");//六个字节
}

image-20230603211221091

从设备接受主设备的数据

主设备

setup
初始化 Wire.begin
loop
开始传输 发送位置8 Wire.beginTransmission(8) 
发送一个字节 Wire.wirte(1)
停止发送 Wire.endTrasmission

从设备

setup 
初始化,地址为#8  Wire.begin(8)
接受数据的回调函数  Wire.onReceive(receiveEvent)

void receive(){
	while(Wire.available()>0){
		读取数据 char c = Wire.read()
	}
}

image-20230603212442395

4.6 p116 外部中断接口及应用 (看完) 模块设计

1. 中断的概念如果没有中断功能, Arduino对事件的处理只能采用程序查询方式,即CPU不断查询外部是否有事件发生。查询时, CPU不能再做别的工作,且大部分时间可能处于等待状态。Arduino 具有的对外部事件进行实时处理的功能,就是通过外部中断技术实现的。当 Arduino 正在处理某个事件时,外部或内部发生某一事件(如某个引脚上电平的变化或计数器的计数溢出)请求 Arduino 的 CPU 迅速去处理,于是,CPU 暂停当前的工作,转去处理刚发生的事件。处理完该事件后,再回到原来被中止的地方,继续原来的工作,这样的过程称为中断。产生中断请求的源被称为中断源。中断源向 CPU 提出的处理请求,称为中断请求。采用外部中断的特点是实时性好、速度快、效率高,但编程较复杂。

image-20230603223901115

image-20230603224855658

开中断,关中断

noInterrupts(); // 关中断
Interrupts(); //开中断

程序下载运行后,引脚13连接的LED灯不断闪烁

const byte ledPin =13;
const byte interruptPin = 2;
volatile byte state = LOW;
setup
pinMode(ledPin,OUTPUT);
pinMode(interruptPin,INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(interruptPin),blink,CHANGE);//电平发生变化时,触发回调函数blank

loop
digitalWrite(ledPin,state)

void blank(){
	state = !state;
}

4.9 p128 EEPROM及其应用 共用体

image-20230603232353116

write : EEPROM.write(address,value);

写入一次需要3.3ms

update: EEPROM.update(address,value)

使用update代替write可以减少擦写次数,延长EEPROM的寿命

value 只能是0~255

put: 作用类似于update,但是可以放入结构体 EEPROM.put(address,data) data 可以是基本的数据类型 0~255,也可以是一个结构体

get : 类似read,但是可以读取任意的结构体或者对象 EEPROM.get(address,data)

从A0读取模拟量的值,存入EEPROM

#include<EEPROM.h>
int addr = 0;
setup

loop
int val = analogRead(0) / 4;//模拟量除以4,10位换算为8位
EEPROM.write(addr,val);
addr++;
if(addr == EEPROM.length()){
	addr = 0;
}
delay(100);

读取EEPROM的内容,发送到串口监视器显示

#include<EEPROM.h>
int addr = 0;
byte value;
setup
Serial.begin(9600);

loop
value = EEPROM.read(addr);//读取第一个字节的元素到value
Serial.print(addr+"\t"+value+"\r\n");
addr ++;
if(addr == EEPROM.length()){
	addr = 0;
}
delay(500);

5.5 p158 LCD

p165LCD的自定义字符 createChar

6.1 p179 超声波测距(模块设计)

6.2 p182 蜂鸣器

6.3 p187 温湿度传感器

6.6 p204 舵机控制角度

6.7.1 SD卡读卡

6.10 p232 三色灯

7.1 p281 蓝牙(功能、特征)

7.3 p304 wifi(工作模式 1.2 )

8 看完