Robofun 機器人論壇

 找回密碼
 申請會員
搜索
熱搜: 活動 交友 discuz
查看: 2542|回復: 3
打印 上一主題 下一主題

解決 arduion 怎麼把感測器的數據讀取成一個獨立的程式碼

[複製鏈接]
跳轉到指定樓層
1#
發表於 2019-1-12 19:48:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 tearouii 於 2019-1-15 18:46 編輯

#include <dht.h>   
  
#define dht_dpin 2 溫溼度腳位定義
dht DHT;   

int in1 = 5; //馬達腳位
int in2 = 6;
int in3 = 7;
int in4 = 8;

  
void setup(){   
Serial.begin(9600);   
delay(300);//Let system settle   
Serial.println("Humidity and temperature\n\n");   
delay(700);
pinMode(3, OUTPUT);//繼電器
pinMode(5, OUTPUT);//5~8馬達腳位輸出
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
}

void motor(){
if(DHT.temperature>24)//馬達
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
  delay(260);
digitalWrite(in1,LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
   delay(100);
digitalWrite(in1,LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW);
   delay(250);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
  delay(1000);

}
else
{
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, HIGH);
  delay(300);
digitalWrite(in1,LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
  delay(300);
digitalWrite(in1,LOW);
digitalWrite(in2, HIGH);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
   delay(250);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW);
   delay(1000);
}
}

void loop(){   
DHT.read11(dht_dpin);  //溫溼度
Serial.print("temperature = ");
Serial.print(DHT.temperature);
Serial.println("C ");
delay(1000); //每1000ms 更新一次
if(DHT.temperature>24)
{
digitalWrite(3, LOW); //繼電器
motor();
}
else
{
digitalWrite(3, HIGH);
motor();
}
}




想把DHT.temperature的數據再引導新的出來運用到上面的馬達 void motor 那個
目前他會跑完一次 連同馬達完 再更新程式
我想要做到馬達感應到溫溼度感測器的數據後 跑一次
而不是一直 更新 然後 跑 更新 跑 無限輪迴
請求論壇大大協助
感謝
2#
發表於 2019-1-13 05:46:27 | 只看該作者
宣告一個變數去記錄是不是曾經做過,
如果做過,就不要做即可

unsigned char flag=2;
void motor(){
if(DHT.temperature>24)//馬達
{
if(flag !=1){
      flag =1;
..........
   }

} else {
if(flag !=0){
      flag =0;
..........
   }

}
3#
 樓主| 發表於 2019-1-13 21:43:31 | 只看該作者
本帖最後由 tearouii 於 2019-1-13 22:02 編輯
超新手 發表於 2019-1-13 05:46
宣告一個變數去記錄是不是曾經做過,
如果做過,就不要做即可


不是很了解unsigned char flag=2; 這串指令的使用

是這樣使用嗎?

void loop(){   
//This is the "heart" of the program.   
DHT.read11(dht_dpin);   
Serial.print("temperature = ");
Serial.print(DHT.temperature);
Serial.println("C ");
delay(1000); //每1000ms 更新一次
if(DHT.temperature>24)
{
digitalWrite(3, LOW);
digitalWrite(flag,1);
}
else
{
digitalWrite(3, HIGH);
digitalWrite(flag,0);
}
}

當flag,1 觸發void motor?
4#
發表於 2019-1-14 05:58:26 | 只看該作者
上面完全沒寫說要改 loop(),
為什麼你會去改 loop()?

只需要改 motor()
把 motor()改成上面的架構
其中.........的部份,換成你的馬達程式就可以了
第一個.......,就是temperature > 24 的馬達程式,
原封不動的把你的程式貼過去即可
第二個.......,就是  else (<=24)的馬達程式,
原封不動的貼過去即可

您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

小黑屋|手機版|Archiver|機器人論壇 from 2005.07

GMT+8, 2024-11-21 19:45 , Processed in 0.129471 second(s), 6 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表