if label=='balck'
c=2;
fwrite(s,dataA,"uint8");
pause(1)
fwrite(s,dataB,"uint8");
end
clear
delete(instrfindall);
s = serial('COM1','BaudRate',9600);
fopen(s);
dataA=('A0 01 01 A2');
dataB=('A0 01 00 A1');
camera = webcam;
load('Alex_Public_32');
c=0;
while true
picture = camera.snapshot;
picture = imresize(picture,[227,227]);
label = classify(net,picture);
if label=='yellow'
c=1;
end
if label=='balck'
c=2;
fwrite(s,dataA,"uint8");
pause(1)
fwrite(s,dataB,"uint8");
end
if label=='white'
c=3;
end
image(picture);
title(char(label));
drawnow;
end
fclose(s);
delete(s);
clear
delete(instrfindall);
s = serial('COM1','BaudRate',9600);
fopen(s);
dataA=('A0 01 01 A2');
dataB=('A0 01 00 A1');
fwrite(s,dataA,"uint8");
pause(1)
fwrite(s,dataB,"uint8");
在你的代码中,你将fwrite语句放在了if语句后面。当if条件为真时,fwrite语句才会执行。如果if条件为假,fwrite语句将不会执行。因此,如果if语句的条件不满足,串口将不会输出任何数据。
那为什么把fwrite语句放在if语句外面就能得到结果呢?因为fwrite语句不在if语句中,所以它总是会被执行,无论if条件是否成立。
如果你希望在满足特定条件时输出数据,则可以将fwrite语句放在if语句中。例如:
if label=='balck'
c=2;
fwrite(s,dataA,"uint8");
pause(1)
fwrite(s,dataB,"uint8");
不经过if正常的话就是if判断获取的label不满足条件,不满足就返回FALSE,当然就不会继续执行!可以先输出获取的label值是什么,看看能否获取到,获取到时什么值,再去if判断
在你程fwire执行完要加个fclose,释放一下资源
如果你在使用Matlab时遇到了串口输出问题,可能有以下几种原因:
串口配置不正确:请检查串口的波特率、数据位、停止位等配置是否正确,确保串口配置和检测软件的配置一致。
串口未打开:请确保在程序中已经打开了串口,可以使用 fopen() 函数打开串口。
串口输出格式不正确:串口输出的数据需要使用特定格式,例如字符串或者二进制数组。确保你的程序中输出的数据是正确的格式。
没有输出数据:确保在程序中有输出数据的语句,并且在if语句中的条件成立时,程序能够正确执行输出数据的语句。
串口输出间隔问题:确保在if语句中输出dataA和dataB之间有足够的时间间隔,例如使用pause(1)来等待1秒。
这些都是可能导致串口输出问题的原因,建议按照上述顺序检查程序,以确定问题的具体原因。