概述
1、arduino自身的串口测试典例
用arduino自身带的串口串口来进行测试,以及LED灯(pin13)来做测试,代码如下所示:
int led = 13;
char string;
float angle_1;
float angle_2;
void setup() {
Serial.begin(9600);
Serial.println("Led blink-blink");
// 打印名字
pinMode(led,OUTPUT);
}
void loop() {
if(Serial.available()>0){
string = Serial.read();
delay(2);}
// 判断串口输入信息控制LED的亮灭
if(string == '1'){
digitalWrite(led,HIGH);
angle_2 = (float(string) - 48);
Serial.println(angle_2);
}
else if(string == '2'){
digitalWrite(led,LOW);
angle_1 = (float(string)- 48);
Serial.println(angle_1);
}
}
串口小练习:
```cpp
int Serial_val = 0;
char string;
int i = 1;
int num_1;
int num_2;
void setup()
{
Serial.begin(9600);
Serial.println("i am coming");
}
void loop()
{
while(i <= 10)
{
if(Serial.available()>0)//有数据输入时,接收
{
string = Serial.read();
Serial.println(float(string));
Serial.println()
delay(2);
}
//num_1 = int(string) - 48;
Serial.println(i);
i = i + 1;
delay(2000);
}
}
串口监视窗口:
途中:打印52是,给arduino发送了‘4’,其打印的是ASCII码。所以,注意他们之间的转换。
2、MATLAB与arduino的串口通信
实现arduino与matlab两端间相互的数据传输、发送。
arduino端的代码(比较杂和乱,不同测试用的代码)
int Serial_val = 0;
char string;
int i = 1;
int num_1;
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
Serial.println("i am coming");
}
void loop()
{
while(i <= 100)
{ if(Serial.available()>0){
string = Serial.read();//监控串口是否发过来数据
delay(2);
num_1 = float(string) - 48;//转为浮点型和Ascii码转换
if(num_1 == 1){
digitalWrite(13,HIGH);//利用灯来判断
}
else if(num_1 == 2){
digitalWrite(13,LOW);
}
}
//digitalWrite(13,LOW);
// Serial.println(num_1);测试用的可不管
delay(100);
Serial.println(i);
i = i + 1;
delay(1000);
}
}
matlab端,这里将代码写成函数形式,用的时候调用即可。
%%注:代码比较杂乱,是下图改进后传输数据绘图的用的
function Serial_communication1(numero_muestras)
%建立函数
close all;
clear all;
clc;%matlab的‘初始化’
%y = zeros(1,1000);
delete(instrfind({'Port'},{'COM6'}));%设置创建串口COM6;
puerto_serial = serial('COM6');
puerto_serial.BaudRate = 9600;
warning('off','MATLAB:serial:fscanf:unsuccessfulRead');
fopen(puerto_serial);%打开串口
contador_muestras = 1;
% figure('Name','Serial communication:Matlab + Arduino.WCYang');
% title('arduino 和 Matlab通信');
% xlabel('模拟数值');
% ylabel('量');
% grid on;
% hold on;
%disp(puerto_serial);
numero_muestras = 10;
valor_f = 0;
while contador_muestras <= numero_muestras
%ylim([0 5.1]);
%xlim
%Y = puerto_serial;
%plot(contador_muestras,valor_f,'X-r');
%drawnow;
%disp(puerto_serial);
valor_f = fscanf(puerto_serial,'%d');
disp(valor_f);
contador_muestras = contador_muestras + 1;
fprintf(puerto_serial,'1');%给arduino发送信息
pause(0.5);
fprintf(puerto_serial,'2');
pause(0.5);
end
fclose(puerto_serial);
delete(puerto_serial);%关闭、断开串口连接
clear all;
end
注意:串口通信一般有两种方式: 1、字符 2、字节 。例如,发送‘’15‘其首先发’1‘过去后再发’5‘过去。且需要利用ASCII表转换。
对照表可点此链接:点我吧,叮咚!
最后
以上就是怕孤单毛衣为你收集整理的Matlab与Arduino连接(一):MATLAB与Arduino的串口通信的全部内容,希望文章能够帮你解决Matlab与Arduino连接(一):MATLAB与Arduino的串口通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复