Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 我的arduino传感器程序有什么问题?_C++_Arduino - Fatal编程技术网

C++ 我的arduino传感器程序有什么问题?

C++ 我的arduino传感器程序有什么问题?,c++,arduino,C++,Arduino,我在这里购买了这款湿度/温度传感器: 我在这里读到了数据: 我试图从我的C++课程中使用一些基本的编程,但我不知道问题是什么?看起来传感器输入的数据没有发送任何信息。在数据表上,我需要发送一个5V的输入信号(20-40ms),然后等待传感器的响应并存储输入位。传感器数据始终为0。我不明白为什么 /* Code for the RHT03 Sensor 8/5/12 */ int i=0; int SensorVccPin = 13; int datapin = 7; int bitche

我在这里购买了这款湿度/温度传感器:

我在这里读到了数据:

我试图从我的C++课程中使用一些基本的编程,但我不知道问题是什么?看起来传感器输入的数据没有发送任何信息。在数据表上,我需要发送一个5V的输入信号(20-40ms),然后等待传感器的响应并存储输入位。传感器数据始终为0。我不明白为什么

/* Code for the RHT03 Sensor 8/5/12 */

int i=0;
int SensorVccPin = 13; 
int datapin = 7;
int bitcheck1;
int bitcheck2;
int temp[16];
int humidity[16];
int sensorcheck[8];

void setup()
{
  pinMode(SensorVccPin, OUTPUT);  
  pinMode(datapin, INPUT);
}

void loop()
{
  // This is the STEP #1
  digitalWrite(SensorVccPin, LOW);
  delayMicroseconds(10);

  digitalWrite(SensorVccPin, HIGH);  
  delayMicroseconds(30);   
  digitalWrite(SensorVccPin, LOW);  
  /* NEED TO DO BIG NESTED IF STATEMENTS!!!!*/

  digitalRead(datapin); 

  if (digitalRead(datapin) == LOW)    // FIRST BIG IF
    while(digitalRead(datapin) == LOW)
    {
      delayMicroseconds(2);   
    }

  while(digitalRead(datapin) == HIGH)
  {
      delayMicroseconds(2);   
  }

  // STEP #2
  for (int i = 0; i<16; i++)
  {
    while(digitalRead(datapin) == LOW)
    {
      delayMicroseconds(2); 
    }  

    delayMicroseconds(10);

    bitcheck1 = digitalRead(datapin);   // maybe store as an array
    delayMicroseconds(17);      // 50 sec pause  // 27us = 0 bit, 70us is 1 bit data
    delayMicroseconds(15); 
    bitcheck2 = digitalRead(datapin);

    if (bitcheck1==bitcheck2)
    {
       temp[i]=1;
       delayMicroseconds(28); 
    } else {
       temp[i]=0;
    }
  }

  for (int i = 0; i<16; i++)
  {
    while(digitalRead(datapin) == LOW)
    {
      delayMicroseconds(2); 
    }  

    delayMicroseconds(10);
    bitcheck1 = digitalRead(datapin);   // maybe store as an array
    delayMicroseconds(17);      // 50 sec pause  // 27us = 0 bit, 70us is 1 bit data
    delayMicroseconds(15); 
    bitcheck2 = digitalRead(datapin);


    if (bitcheck1==bitcheck2)
    {
       humidity[i]=1;
       delayMicroseconds(28); 
    } else {
       humidity[i]=0;
    }
  }


  for (int i = 0; i<8; i++)
  {
    while(digitalRead(datapin) == LOW)
    {
      delayMicroseconds(2); 
    }  

    delayMicroseconds(10);

    bitcheck1 = digitalRead(datapin);   // maybe store as an array
    delayMicroseconds(17);      // 50 sec pause  // 27us = 0 bit, 70us is 1 bit data
    delayMicroseconds(15); 
    bitcheck2 = digitalRead(datapin);

    if (bitcheck1==bitcheck2)
    {
       sensorcheck[i]=1;
       delayMicroseconds(28); 
    } else {
       sensorcheck[i]=0;
    }
  }
}
/*RHT03传感器8/5/12的代码*/
int i=0;
int传感器vccpin=13;
int-datapin=7;
int位校验1;
int位校验2;
内部温度[16];
国际湿度[16];
int传感器检查[8];
无效设置()
{
引脚模式(传感器VCCPIN,输出);
引脚模式(数据引脚,输入);
}
void循环()
{
//这是第一步
数字写入(传感器VCCPIN,低);
延迟微秒(10);
数字写入(传感器VCCPIN,高);
延迟微秒(30);
数字写入(传感器VCCPIN,低);
/*需要做大的嵌套IF语句*/
数字读取(数据PIN);
if(digitalRead(datapin)=低)//第一个大if
而(数字读取(数据引脚)=低)
{
延迟微秒(2);
}
而(数字读取(数据引脚)=高)
{
延迟微秒(2);
}
//第2步
对于(inti=0;i,数据表上说

MCU将拉低数据总线,此过程必须至少超过 1~10ms,确保RHT03能够检测到MCU信号

你的密码是

digitalWrite(SensorVccPin, LOW);
delayMicroseconds(10);

digitalWrite(SensorVccPin, HIGH);  

您似乎延迟了10µs而不是10 ms。

如果我正确阅读数据表,所有操作都在同一个管脚上。SensorVccPin和datapin是否物理连接到同一个传感器管脚?如果您使用相同的管脚,并在初始转换后将其模式从输出切换到输入,是否会更简单、更不容易出错?是的,它是有道理,但我不明白。传感器上有一个Vcc引脚和一个数据引脚,我认为Vcc必须“发送一种脉冲”20-40us,然后从数据管脚读取数据,否?对不起,我主要不是英语,这是我在EE的第二年。感谢回答否,Vcc是恒定的,整个脉冲序列必须应用于/读取数据管脚(管脚2)。