实验内容:
Arduino
int sensorReading = 0;
int data = 0;
int s = 0;
int a = 0;
int b = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorReading = analogRead(A0); %从A0读取光敏电阻的数值
if(sensorReading>950){
data = HIGH; %当数值大于950,将data置1
}
else{
data = LOW; %否则将data置0
}
if(data==1){ %当data置1时(即产生上升沿),用a来记录
delay(500); %消抖动
if(data==1){
a = 1;
}
}
%当data置0时,a为1时(即产生下降沿),代表经过一个人
if(a==1&&data==0){
delay(500);
if(a==1&&data==0){
s++;
a=0;
}
}
Serial.println(s); %输出从程序开始时到当前经过的人数
}
Matlab
clc
clear
s = serial('COM5'); %定义串口对象
set(s,'BaudRate',9600); %设置波特率s
fopen(s); %打开串口对象s
interval = 10000;
passo = 1;
t = 1;
y = 0;
while(t<interval)
b = str2num(fgetl(s)); %用函数fget(s)从缓冲区读取串口数据。
y = [y,b];
t = t+passo;
pause(1); %每1s进行一次数据读取,因为周期太长实验中没有这一行
end
fclose(s); %打开串口对象s
x=0.02:0.01:100; %关闭串口对象s
plot(x,y,'*'); %输出图像
实验改进:
Arduino
int L1 = 0;
int L2 = 0;
int data = 0;
int mata = 0;
int s = 0;
int a = 0;
int b = 0;
void setup() {
Serial.begin(9600);
}
void loop() {
int L1 = analogRead(A0); %从A0读取光敏电阻的数值
int L2 = analogRead(A5); %从A5读取光敏电阻的数值
if(L1>950&&L2<950){ %当A0被遮住且A5没有被遮住记为进入
data = HIGH;
}
else{
data = LOW;
}
if(data==1){ %当data置1时(即产生上升沿),用a来记录
delay(500);
if(data==1){
a = 1;
}
}
%当data置0时,a为1时(即产生下降沿),代表有一个人进入
if(a==1&&data==0){
delay(500);
if(a==1&&data==0){
s++;
a=0;
}
}
if(L2>950&&L1<950){ %当A5被遮住且A0没有被遮住记为进入
mata = HIGH;
}
else{
mata = LOW;
}
if(mata==1){ %当mata置1时(即产生上升沿),用b来记录
delay(500);
if(mata==1){
b = 1;
}
}
%当mata置0时,b为1时(即产生下降沿),代表有一个人离开
if(b==1&&mata==0){
delay(500);
if(b==1&&mata==0){
s--;
b=0;
}
}
Serial.println(s);
}
Matlab
clc
clear
s = serial('COM5'); %定义串口对象
set(s,'BaudRate',9600); %设置波特率s
fopen(s); %打开串口对象s
interval = 10000;
passo = 1;
t = 1;
y = 0;
while(t<interval)
b = str2num(fgetl(s)); %用函数fget(s)从缓冲区读取串口数据。
y = [y,b];
t = t+passo;
pause(1); %每1s进行一次数据读取,因为周期太长实验中没有这一行
end
fclose(s); %关闭串口对象s
x=0.02:0.01:100;
plot(x,y,'*'); %输出图像