Arduino软件与LinkSprite Jpeg摄像机的串行连接

Arduino软件与LinkSprite Jpeg摄像机的串行连接,arduino,Arduino,因此,我们无法将Arduino Uno连接到LinkSprite相机,我们使用LinkSprite示例代码添加了一些打印语句 #包括 /*林精灵*/ 字节输入字节; 软件序列mySerial(4,5)//将引脚4和5配置为软串行端口 长a=0x0000,j=0,k=0,计数=0//读取起始地址 uint8_t MH,ML; 布尔端标志=0; void SendResetCmd(); void sendtakepotocmd(); void SendReadDataCmd(); void stop

因此,我们无法将Arduino Uno连接到LinkSprite相机,我们使用LinkSprite示例代码添加了一些打印语句

#包括
/*林精灵*/
字节输入字节;
软件序列mySerial(4,5)//将引脚4和5配置为软串行端口
长a=0x0000,j=0,k=0,计数=0//读取起始地址
uint8_t MH,ML;
布尔端标志=0;
void SendResetCmd();
void sendtakepotocmd();
void SendReadDataCmd();
void stoptakepotocmd();
无效设置(){
Serial.begin(38400);
mySerial.begin(38400);
Serial.print(“Serial开始\n”);
}
void循环(){
SendResetCmd();
串行打印(“已发送重置命令\n”);
Serial.print(mySerial.available());
串行打印(“\n”);
while(mySerial.available()>0){
incomingbyte=mySerial.read();
串行打印(输入字节,十六进制);
}//复位后,等待2-3秒发送拍照命令
串行打印(“延迟结束\n”);
sendtakepotocmd();
串行打印(“已发送拍照命令”);
while(mySerial.available()>0){
Serial.print(“检查可用字节\n”);
incomingbyte=mySerial.read();
}
字节a[32];
串行打印(“字节数组初始化\n”);
而(!EndFlag){
Serial.print(“在循环时输入\n”);
j=0;
k=0;
计数=0;
SendReadDataCmd();
串行打印(“已发送读取命令\n”);
延迟(250);
串行打印(“延迟结束\n”);
Serial.print(mySerial.available());
串行打印(“\n”);
while(mySerial.available()>0){
incomingbyte=mySerial.read();
Serial.print(“传入字节读取\n”);
k++;
如果((k>5)&&(j<32)&&(!EndFlag)){
Serial.print(“字节添加到数组\n”);
a[j]=输入字节;
如果((a[j-1]==0xFF)&&(a[j]==0xD9)){//检查图片是否结束
串行打印(“结束标志”);
EndFlag=1;
}
j++;
计数++;
}
}
对于(j=0;j
`
该代码基本上向相机发送一个拍照命令,然后读取相机发送的十六进制值,并将值保存在数组中。我们知道这台相机可以正常工作,因为我们在另一台设备上进行了测试


最初的问题是,我们从相机中获取的值不正确。while循环中的EndFlag永远不会被切换,因为指示JPEG值(FF和D9)结束的十六进制值永远不会被读取,所以它永远不会从while循环中断。现在,在相机断开连接之前,终端不会打印任何内容,然后所有的值都会刷新到屏幕上,命令mySerial.available()返回0表示串行读取缓冲区中没有任何内容

我将您的代码与制造商提供的代码进行了比较,发现您的初始化过程与原始过程不同。在官方示例代码中,他们首先以115200串行波特率连接摄像机,告诉摄像机将波特率更改为38400,然后再次连接摄像机,但速度不同-38400波特

在您的代码中,我看到您一开始是以38400波特的速度连接的。然而,相机以不同的速度运行,这解释了为什么会得到垃圾而不是有效数据。我建议您执行正确的初始化过程,如示例中所述:

void setup()
{
Serial.begin(38400);
mySerial.begin(115200);
延迟(100);
SendResetCmd();
延迟(2000年);
SetBaudRateCmd(0x2A);
延迟(500);
mySerial.begin(38400);
延迟(100);
Serial.println(“初始化完成”);
}
另外,取消对SetBaudRateCmd()函数的注释,因为它在初始化过程中使用