Robofun 機器人論壇

標題: 解決 arduion 怎麼把感測器的數據讀取成一個獨立的程式碼 [打印本頁]

作者: tearouii    時間: 2019-1-12 19:48
標題: 解決 arduion 怎麼把感測器的數據讀取成一個獨立的程式碼
本帖最後由 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 那個
目前他會跑完一次 連同馬達完 再更新程式
我想要做到馬達感應到溫溼度感測器的數據後 跑一次
而不是一直 更新 然後 跑 更新 跑 無限輪迴
請求論壇大大協助
感謝
作者: 超新手    時間: 2019-1-13 05:46
宣告一個變數去記錄是不是曾經做過,
如果做過,就不要做即可

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

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

}

作者: tearouii    時間: 2019-1-13 21:43
本帖最後由 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?

作者: 超新手    時間: 2019-1-14 05:58
上面完全沒寫說要改 loop(),
為什麼你會去改 loop()?

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






歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/) Powered by Discuz! X3.2