Arduino与Matlab的串口通讯:通过光敏电阻进行人数统计,以及改进:人物方向的判断并进行加减。

实验内容:
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,'*');                 %输出图像

 

 

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MatlabArduino之间的串口通讯可以通过Matlab中的串口对象serial来实现。首先,你需要定义一个串口对象,并设置波特率。然后,使用fopen函数打开串口对象。接下来,你可以使用fgetl函数从串口缓冲区读取数据,并将其转换为数字。在Arduino端,你需要编写相应的代码来发送数据到串口。例如,你可以使用Serial.println函数将数据发送到串口。在Matlab中,你可以使用plot函数实时绘制数据,并使用drawnow函数更新图形。最后,使用fclose函数关闭串口对象。这样,你就可以实现MatlabArduino之间的串口通讯了。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* [Arduinomatlab串口通讯](https://blog.csdn.net/weixin_42913113/article/details/97901622)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [MatlabArduino连接(一):MATLABArduino的串口通信](https://blog.csdn.net/qq_40969179/article/details/115468503)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值