使用Arduino Pro小饰品与Uno时串行数据发生变化

使用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 #

我注意到我的数据并没有因为Arduino Pro饰品而改变。数据是从分光计发送的。更多的光=更多的数字。我正在使用的代码适用于Arduino Uno(输入的值数量相同,但范围从95到1000),而饰品的范围从173到184

这可能是FTDI连接问题吗?(有点焊接不良)

还是说小饰物无法收集这些数字

我必须更改代码吗

代码如下:

/*
 * 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
如果不知道确切的传感器规格,就很难确定问题的确切原因。我至少可以看到可能的错误源:

  • 韦小宝在Arduino Uno上使用8 MHz振荡器,而不是16 MHz振荡器
  • 该饰品有5V和3.3V逻辑电平版本。如果您有3.3V版本,它可能无法为您的传感器提供兼容的电平

  • 希望有帮助

    这些都是好的观点。我有5V 16兆赫专业饰品。我忘了在问题中添加Pro!哎呀!但如果真的没有理由代码不起作用,那么这可能是FTDI发送信息的方式,而不是Uno的普通USB?我希望这是个简单的问题。我要尝试另一个专业饰品,更好的焊接和另一个电缆。我们将看看这是否更有效。。。