巡航66 发表于 2017-11-24 14:41:12

关于ADNS0380的问题

各位高手:
       今天购进一块光流传感器模块(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;
}
页: [1]
查看完整版本: 关于ADNS0380的问题