这几天一口气解决了多个传感器与arduino的连接于访问。
dht11温湿度传感器,超声波、火焰、环境光线、人体热释电这几个。
温湿度传感器是从机器人基地购买的,因为他们提供了积木式的链接针脚和连接线,只要对应插好就行,十分方便,相关代码也在前篇文章介绍的有,直接复制就能用。
因为火焰和环境光传感器能输出0~255的值,我把它们接到模拟口上面了,以便实时发送数据出来。人体感应的传感器由于只输出高低电平,所以接到了数字口。
对于这三个传感器的数据读取,我采用了统一的函数,因为他们的读取方式一样,直接read输入口的针脚就行。
函数如下:
int GetData(int pinnum,String pmod){
int datastr;
if(pmod=="analog"){
datastr=analogRead(pinnum);
}
else
{
datastr=digitalRead(pinnum);
}
return datastr;
}
其中 函数括号里 pinnum是要输入针脚号码,pinmod是输入数字口还是模拟口,模拟口就写 analog,数字口就写digital。
先定义好每个传感器的针脚号码,在setup里定义好输出,然后在loop里需要读出数据的地方使用该函数。
比如:
int lightpin=1;//环境光线脚 analog
int anmpin=50;//人体接近脚 digital
int firepin=3;//火焰脚 analog
String OutStr;
void setup(){
Serial.begin(9600);
pinMode(anmpin,INPUT);
pinMode(firepin,INPUT);
pinMode(lightpin,INPUT);
}
void loop(){
OutStr =GetData(anmpin,"digital");
Serial.print(OutStr);
OutStr =GetData(firepin,"analog");
Serial.print(OutStr);
OutStr =GetData(lightpin,"analog");
Serial.print(OutStr);
}
这样便能方便的输出需要的数据了,对于接了多个类似只负责输出数据的传感器的arduino很适用。
关于超声波传感器,我也弄了个函数
int GetCSB(){
digitalWrite(csboutputPin, LOW); // 使发出发出超声波信号接口低电平2μs
delayMicroseconds(2);
digitalWrite(csboutputPin, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μs
delayMicroseconds(10);
digitalWrite(csboutputPin, LOW); // 保持发出超声波信号接口低电平
int distance = pulseIn(csbinputPin, HIGH); // 读出脉冲时间
distance= distance * 0.017; // 将脉冲时间转化为距离(单位:厘米)
return distance; //输出距离值
}
要注意的是,我适用的传感器是4个针脚,2个分别接vcc和gnd,另外2个接数字口,分别负责电平信号的输入与输出。
要读出数据的话 只要写 int s=GetCSB(); 就完事了,很方便吧 呵呵