各位高手:
今天购进一块光流传感器模块(ADNS0380),找到一个有关程序,模块接到ARDUINO UNO上,但是无法读取X,Y的数值。程序如下:
哪位高手指点一二,多谢!
/*Arduino.2-A3080.CS
Arduino.12-A3080.MISO
Arduino.11-A3080.MOSI
Arduino.13-A3080.SCK
Arduino.5V-A3080.5V
Arduino.GND-A3080.GND*/
#include "SPI.h"
#include "ADNS3080.h"
char a1,a2,a3,a4;
void setup()
{
pinMode(2,OUTPUT);//将数字脚2设为输出模式
SPI.begin(); //启动SPI
SPI.setBitOrder(MSBFIRST); //串行数据传输时先传输高位
SPI.setDataMode(SPI_MODE3);//时钟极性和相位
SPI.setClockDivider(SPI_CLOCK_DIV8);//传感器工作频率
Serial.begin(115200);
Serial.println("ADNS-3080 test by Athelloren\n");
delay(1000);
}
void loop()
{
a1=read_register(0x00);
a2=read_register(0x02);
a3=read_register(0x03);
a4=read_register(0x04);
Serial.print("ID: ");
Serial.print(a1,HEX);
Serial.print("\tMotion: ");
Serial.print(a2,BIN);
Serial.println();
Serial.print("dx: ");
Serial.print(a3,DEC);
Serial.print("\tdy: ");
Serial.print(a4,DEC);
Serial.println();
delay(10);
}
byte read_register(byte address)//从A3080的寄存器中读数据
{
byte result = 0, junk = 0;
digitalWrite(2, LOW); //拉低从机CS
junk = SPI.transfer(address);
delayMicroseconds(50);
result = SPI.transfer(0x00);
digitalWrite(2, HIGH); //拉高从机CS
return result;
} |