在Arduino中,我们一般会经常使用第三方库,下面使用小车的湿度传感器作为一个演示。
首先,与C++一样,先调用这个库
#include<.....>但需要注意的是此处的库需要导入!!!且名字需要一样
#include <dht11.h>
其次,我们输入的数据数据类型可以不是一般的数据类型。
如这个程序:dht11 DHT11;
在获取数据中,经常性的输出验证是很关键的,比如
Serial.println(DHT11LIB_VERSION);
Serial.println();
最终,我们得到了一个数据,通过结构体的调用为DHT11.humdity,然后转化为(float)即可
完整代码如下
#include <dht11.h>
dht11 DHT11;
int ledp = 3;
int led = 4;
int DHT11PIN= 6;
int Left_motor_go=11; //左电机前进(IN1)
int Left_motor_back=10; //左电机后退(IN2)
int Right_motor_back=9; // 右电机前进(IN3)
int Right_motor_go=8; // 右电机后退(IN4)
const int SensorRight = 3; //右循迹红外传感器(P3.2 OUT1)
const int SensorLeft = 4; //左循迹红外传感器(P3.3 OUT2)
int SL; //左循迹红外传感器状态
int SR; //右循迹红外传感器状态
//setup方法在程序一开始执行,且只执行一次
void setup()
{
//初始化电机驱动IO为输出方式
Serial.begin(9600);
Serial.println("DHT11 TEST PROGRAM");
Serial.print("LIBRARY");
// 输出 DHT 库的版本号
Serial.println(DHT11LIB_VERSION);
Serial.println();
pinMode(ledp,OUTPUT);
pinMode(led,OUTPUT);
pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)
pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)
pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM)
pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)
pinMode(SensorRight, INPUT); //定义右循迹红外传感器为输入
pinMode(SensorLeft, INPUT); //定义左循迹红外传感器为输入
}
//setup方法在程序中循环执行多次
void loop()
{
//有信号为LOW 没有信号为HIGH 检测到黑线 输出高 检测到白色区域输出低
Serial.println("\n");
int chk = DHT11.read(DHT11PIN);
// 测试 DHT 是否正确连接
Serial.print("Read sensor: ");
SR = digitalRead(SensorRight);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭
SL = digitalRead(SensorLeft);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭
digitalWrite(ledp,LOW);
digitalWrite(led,HIGH);
if (SL == LOW&&SR==LOW&&(float)DHT11.humidity>80){
digitalWrite(ledp,HIGH);
digitalWrite(led,HIGH);
run(); //调用前进函数
}
else if (SL == HIGH & SR == LOW){// 左循迹红外传感器,检测到信号,车子向右偏离轨道,向左转
left();
}
else if (SR == HIGH & SL == LOW){ // 右循迹红外传感器,检测到信号,车子向左偏离轨道,向右转
right() ;
}
else{ // 都是黑色, 停止
brake();
}
}
void run()
{
digitalWrite(Right_motor_go,HIGH); // 右电机前进
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,HIGH); // 左电机前进
digitalWrite(Left_motor_back,LOW);
}
//void brake(int time) //刹车,停车
void brake()
{
digitalWrite(Right_motor_go,LOW);
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW);
digitalWrite(Left_motor_back,LOW);
//delay(time * 100);//执行时间,可以调整
}
//void left(int time) //左转(左轮不动,右轮前进)
void left()
{
digitalWrite(Left_motor_go,LOW); //左轮不动
digitalWrite(Left_motor_back,LOW);
digitalWrite(Right_motor_go,HIGH); // 右电机前进
digitalWrite(Right_motor_back,LOW);
}
void spin_left() //左转(左轮后退,右轮前进)
{
digitalWrite(Right_motor_go,HIGH); // 右电机前进
digitalWrite(Right_motor_back,LOW);
digitalWrite(Left_motor_go,LOW); //左轮后退
digitalWrite(Left_motor_back,HIGH);
}
//void right(int time) //右转(右轮不动,左轮前进)
void right()
{
digitalWrite(Left_motor_go,HIGH); //左轮前进
digitalWrite(Left_motor_back,LOW);
digitalWrite(Right_motor_go,LOW); // 右轮不动
digitalWrite(Right_motor_back,LOW);
}
void spin_right() //右转(右轮后退,左轮前进)
{
digitalWrite(Left_motor_go,HIGH);//左电机前进
digitalWrite(Left_motor_back,LOW);
digitalWrite(Right_motor_go,LOW); //右电机后退
digitalWrite(Right_motor_back,HIGH);
}
//void back(int time) //后退
void back()
{
digitalWrite(Right_motor_go,LOW); //右轮后退
digitalWrite(Right_motor_back,HIGH);
digitalWrite(Left_motor_go,LOW); //左轮后退
digitalWrite(Left_motor_back,HIGH);
}
希望大家可以举一反三,使用其他的库创造自己的智能小车!