使用Arduino Pro小饰品与Uno时串行数据发生变化
我注意到我的数据并没有因为Arduino Pro饰品而改变。数据是从分光计发送的。更多的光=更多的数字。我正在使用的代码适用于Arduino Uno(输入的值数量相同,但范围从95到1000),而饰品的范围从173到184 这可能是FTDI连接问题吗?(有点焊接不良) 还是说小饰物无法收集这些数字 我必须更改代码吗 代码如下:使用Arduino Pro小饰品与Uno时串行数据发生变化,arduino,serial-port,arduino-uno,arduino-ide,Arduino,Serial Port,Arduino Uno,Arduino Ide,我注意到我的数据并没有因为Arduino Pro饰品而改变。数据是从分光计发送的。更多的光=更多的数字。我正在使用的代码适用于Arduino Uno(输入的值数量相同,但范围从95到1000),而饰品的范围从173到184 这可能是FTDI连接问题吗?(有点焊接不良) 还是说小饰物无法收集这些数字 我必须更改代码吗 代码如下: /* * Macro Definitions */ #define SPEC_TRG A0 #define SPEC_ST A1 #
/*
* Macro Definitions
*/
#define SPEC_TRG A0
#define SPEC_ST A1
#define SPEC_CLK A2
#define SPEC_VIDEO A3
#define SPEC_CHANNELS 288 // New Spec Channel
uint16_t data[SPEC_CHANNELS];
void setup(){
//Set desired pins to OUTPUT
pinMode(SPEC_CLK, OUTPUT);
pinMode(SPEC_ST, OUTPUT);
digitalWrite(SPEC_CLK, HIGH); // Set SPEC_CLK High
digitalWrite(SPEC_ST, LOW); // Set SPEC_ST Low
Serial.begin(9600); // Baud Rate set to 9600
}
/*
* This functions reads spectrometer data from SPEC_VIDEO
* Look at the Timing Chart in the Datasheet for more info
*/
void readSpectrometer(){
int delayTime = 1; // delay time
// Start clock cycle and set start pulse to signal start
digitalWrite(SPEC_CLK, LOW);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, LOW);
digitalWrite(SPEC_ST, HIGH);
delayMicroseconds(delayTime);
//Sample for a period of time
for(int i = 0; i < 3000; i++){
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, LOW);
delayMicroseconds(delayTime);
}
//Set SPEC_ST to low
digitalWrite(SPEC_ST, LOW);
//Sample for a period of time
for(int i = 0; i < 85; i++){
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, LOW);
delayMicroseconds(delayTime);
}
//One more clock pulse before the actual read
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, LOW);
delayMicroseconds(delayTime);
//Read from SPEC_VIDEO
for(int i = 0; i < SPEC_CHANNELS; i++){
data[i] = analogRead(SPEC_VIDEO);
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, LOW);
delayMicroseconds(delayTime);
}
//Set SPEC_ST to high
//digitalWrite(SPEC_ST, HIGH);
//Sample for a small amount of time
for(int i = 0; i < 7; i++){
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
digitalWrite(SPEC_CLK, LOW);
delayMicroseconds(delayTime);
}
digitalWrite(SPEC_CLK, HIGH);
delayMicroseconds(delayTime);
}
/*
* The function below prints out data to the terminal or
* processing plot
*/
void printData(){
for (int i = 0; i < SPEC_CHANNELS; i++){
Serial.print(data[i]);
Serial.print(',');
}
Serial.print("\n");
}
void loop(){
readSpectrometer();
printData();
delay(1000);
}
/*
*宏定义
*/
#定义规格测试A0
#定义规格A1
#定义规范CLK A2
#定义规格视频A3
#定义等级库通道288//新建等级库通道
uint16_t数据[规格通道];
无效设置(){
//将所需引脚设置为输出
引脚模式(规格时钟,输出);
pinMode(规格、输出);
digitalWrite(规格时钟,高);//设置规格时钟高
digitalWrite(等级,低);//将等级设置为低
Serial.begin(9600);//波特率设置为9600
}
/*
*此函数用于从SPEC_视频读取光谱仪数据
*查看数据表中的时序图了解更多信息
*/
空读光谱仪(){
int delayTime=1;//延迟时间
//启动时钟周期,并将启动脉冲设置为信号启动
数字写入(规格时钟,低电平);
延迟微秒(延迟时间);
数字写入(规格时钟,高);
延迟微秒(延迟时间);
数字写入(规格时钟,低电平);
digitalWrite(规格,高);
延迟微秒(延迟时间);
//采样一段时间
对于(int i=0;i<3000;i++){
数字写入(规格时钟,高);
延迟微秒(延迟时间);
数字写入(规格时钟,低电平);
延迟微秒(延迟时间);
}
//将规格设置为低
数字写入(规格,低);
//采样一段时间
对于(int i=0;i<85;i++){
数字写入(规格时钟,高);
延迟微秒(延迟时间);
数字写入(规格时钟,低电平);
延迟微秒(延迟时间);
}
//在实际读取之前再多一个时钟脉冲
数字写入(规格时钟,高);
延迟微秒(延迟时间);
数字写入(规格时钟,低电平);
延迟微秒(延迟时间);
//从SPEC_视频读取
对于(int i=0;i
如果不知道确切的传感器规格,就很难确定问题的确切原因。我至少可以看到可能的错误源:
希望有帮助 这些都是好的观点。我有5V 16兆赫专业饰品。我忘了在问题中添加Pro!哎呀!但如果真的没有理由代码不起作用,那么这可能是FTDI发送信息的方式,而不是Uno的普通USB?我希望这是个简单的问题。我要尝试另一个专业饰品,更好的焊接和另一个电缆。我们将看看这是否更有效。。。