|
搞了个SHT10,结果发现网上找的库用不了,后来用Arduino 0023试了一下完全正常。
再测试一下发现应该是校检第二个时钟出错了(Ack Error 1),然后把库里的sendCommandSHT拉出来单测了一下,确定是这个子程序有问题。
开始以为是shiftout命令有问题,然后用digitalWrite命令重写了一遍,发现问题同样存在。
请各位大侠帮忙找找原因。
下面是附图,取湿度的命令是00101,去温度是00011。前三位地址是000。
这部分代码见下面……把Arduino.h换成Wprogram.h在0023下运行就不会报错……- #include <Arduino.h>
- #define dataPin 10
- #define clockPin 11
- void setup(){
- Serial.begin(9600);
- int gTempCmd = 0b00000011;
-
- sendCommandSHT(gTempCmd, dataPin, clockPin);
- }
- void loop(){
- }
- void sendCommandSHT(int _command, int data, int clock){
- int ack;
- // Transmission Start
- pinMode(data, OUTPUT);
- pinMode(clock, OUTPUT);
- digitalWrite(data, HIGH);
- digitalWrite(clock, HIGH);
- digitalWrite(data, LOW);
- digitalWrite(clock, LOW);
- digitalWrite(clock, HIGH);
- digitalWrite(data, HIGH);
- digitalWrite(clock, LOW);
-
- // The command (3 msb are address and must be 000, and last 5 bits are command)
- shiftOut(data, clock, MSBFIRST, _command);
- /*digitalWrite(data, LOW);
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//1
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//2
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//3
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//4
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//5
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//6
- digitalWrite(data, HIGH);
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//7
- digitalWrite(clock, HIGH);
- digitalWrite(clock, LOW);//8
- */
-
- // Verify we get the correct ack
- digitalWrite(clock, HIGH);
- pinMode(data, INPUT);
- ack = digitalRead(data);
- if (ack != LOW) {
- Serial.println("Ack Error 0");
- }
- digitalWrite(clock, LOW);
- ack = digitalRead(data);
- if (ack != HIGH) {
- Serial.println("Ack Error 1");
- }
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|