本帖最后由 ps2xu 于 2014-5-12 15:19 编辑
帮看下,初稿ARDUINO作为从机,模拟PS控制柄,也不知道是否需要设置setBitOrder()和setDataMode()
- #include <SPI.h>
- const int ACK = 10;
- int val;
- int val1;
- void setup() {
- pinMode (MOSI, INPUT);
- pinMode (MISO, OUTPUT);
- pinMode (SCK, INPUT);
- pinMode (SS, INPUT);
- pinMode (ACK, OUTPUT);
- SPI.begin();
- }
- void loop() {
-
- if(SS==LOW){
- digitalWrite(ACK,LOW);
- val = SPI.transfer(0XFF);
- if(val==0X01){
- val1 = SPI.transfer(0X41);
- if(val1==0x42);{
- SPI.transfer(0X5A);
- SPI.transfer(0XFF);
- SPI.transfer(0XFF);
- }
- }
- }
- delay(2);
- digitalWrite(ACK,HIGH);
- }
复制代码
各脚功能:
DATA=MISO
信号流向从arduino到主机。
此信号是一个8 bit的串行数据,同步传送于时钟下降沿(输入输出信号在时钟信号由高到低时变化,所有信号的读取在时钟前沿到电平变化之前完成。)
COMMAND=MOSI
信号流向从主机到arduino。
此信号和DATA相对,同样是一个8 bit的串行数据,同步传送于时钟下降沿。
VCC
电源电压从5V到3V都可以工作。
主机主板上装有表面安装的750mA 保险丝 ,用于防止外设过载
ATT=SS
ATT 用于主机提供arduino触发信号。
信号在通信期间处于低电平。
CLOCK
信号流向从主机到arduino。
用于保持数据同步。
ACK=ACK
从arduino到主机的应答信号。
此信号在每个8 bits数据发送之后的最后一个时钟周期变低,并且ATT 一直保低电平。如果ACK 信号不变低约60微秒PS主机会试另一个外设。 |