arduino时钟模块哪个好
推荐回答
如何将鼠标的移动信息(x位置,y位置)发送给Arduino?我自己做了小车,想用光电鼠标实时反馈位置信息。结果就是实现不了鼠标芯片和Arduino之间的通讯。自己编了程序,大家帮着看看问题出在哪里?/* municationbetween Mouse and Arduino*/#include <ps2.h>PS2 mouse(8, 9); //设置针脚void setup(){Serial.begin(9600);mouse.write();mouse.read();}void loop(){unsigned char code; code = mouse.write();code = mouse.read();Serial.println(code); //读取键盘输入并输出到串口显示}/** ps2.cpp*/#include "ps2.h"PS2::PS2(int clk, int data) //初始化,设置时钟和数据位的针脚{_ps2clk = clk;_ps2data = data;}unsigned char PS2::write(){unsigned char data = 0x00;unsigned char i;unsigned char bit = 0x01;pinMode(_ps2clk, OUTPUT);digitalWrite(_ps2clk, LOW); delayMicroseconds(240);pinMode(_ps2data, INPUT);digitalWrite(_ps2data, LOW); //以上把时钟和数据均设置为低位,以使鼠标产生时序信号delayMicroseconds(20);digitalWrite(_ps2clk, HIGH);for(i=0;i<11;i++)//发送11位数据{while (digitalRead(_ps2clk) == HIGH){;}//延时等待时钟线信号变低Serial.println(data);if((data&0x01)==1) //获取要发送的数据位{digitalWrite(_ps2data, HIGH);} //发送数据的第i位值到数据线else{digitalWrite(_ps2data, LOW);}data = data>>1;while (digitalRead(_ps2clk) == LOW){;}//延时等待时钟拉高}pinMode(_ps2clk, INPUT);digitalWrite(_ps2clk, LOW); //全部读取完毕,将时钟设为低位return data;}unsigned char PS2::read(void) // 读取数据模块,返回8位数据{ unsigned int value=0; //将value作为接收缓冲区unsigned char i;digitalWrite(_ps2clk, HIGH); //arduino释放数据线 for (i=0;i<11;i++) //接收11bit数据{ value=value>>1;while(digitalRead(_ps2clk) == HIGH){;}//延时等待到时钟为低delay(4);//延时50 微秒if(digitalRead(_ps2data)==HIGH) {value=value|0x0400;}//读数据线的值并记录在value while(digitalRead(_ps2clk) == LOW){;}//延时等待到时钟为高} value>>=1;//截取value的2-11位return value; } //返回操作数据/** ps2.h*/#include "Arduino.h"class PS2{public:PS2(int clk, int data);unsigned char read(void);unsigned char write(void);private:int _ps2clk;int _ps2data;};