Robofun 機器人論壇

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

關於arduino溫度感測SD Card警示音語法問題

[複製鏈接]
跳轉到指定樓層
1#
發表於 2017-8-24 16:05:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最後由 stworld8591 於 2017-8-25 09:06 編輯

不好意思
想問一下各位大大們

我在arduino上寫了一段當sensor溫度感應大於等於27度時
他能幫我透過sd card去將音樂撥放出來(類似警示音)
這段燒好後 我們會透過命令提示元去執行js檔測試看看是否正常

測試出來結果是正常的大於27度會叫

但能不能在命令提示元中立即讓他馬上停止叫

因為我用ctrl+c也沒用 他還是一直叫

例如key個數字1 或 0 他就會停

因為現在狀況是我arduino燒進去的語法是當>=27度會叫
但必須要等到他低於27度她才會安靜
不知道是要在js檔內寫語法還是燒入時就要寫進去


因為我幾乎完全不懂javascript所以不太會寫語法等等的
想問一下各位大大能不能幫我

我arduino內的語法也是拿範例 再去修改的 所以裡面有蠻多都是幾乎用不到的 但我也看不懂所以不敢亂刪亂mark
以下是部分語法

if (chk == 0) {
    Serial.println((float)DHT11.temperature, 2);
  } else {
    Serial.println("Sensor Error");
  }

  delay(5000);
  //dht11取溫度部分

   if(DHT11.temperature>=27){
         
          IncreaseVolume();
          SpecifyMusicPlay(1);

        }else {
          PlayPause();
        }
        

   //若溫度大於或等於27→sd card音樂就響

  
}

我也提供 js檔 跟 ino檔 請各位大大幫忙我

serialTest.js (398 Bytes, 下載次數: 1504)
iot_mp3_perfect0816.ino (27.42 KB, 下載次數: 1534)
2#
 樓主| 發表於 2017-8-28 11:01:57 | 只看該作者
查了很多發現 似乎只能在裡面寫死迴圈
但我不太清楚要怎麼撰寫那段
另外一種方式只能拔usb... 改寫button我也不太懂...
請求大大幫忙阿!
3#
 樓主| 發表於 2017-8-28 11:02:59 | 只看該作者
https://www.ptt.cc/bbs/ASM/M.1383793826.A.58E.html 我就是跟他一樣的狀況
有大神能幫忙在我ino檔裡修改一下嗎Q_Q
4#
發表於 2017-8-28 11:22:33 | 只看該作者
多宣告一個變數即可
unsigned char Stop = 0;
void loop() {

  if (chk == 0) {
    Serial.println((float)DHT11.temperature, 2);
  } else {
    Serial.println("Sensor Error");
  }

  delay(5000);
   if(Serial.available()) {
      char c = Serial.read();
      if(c == '1') Stop = 1;
   }
   if((DHT11.temperature>=27) && (Stop == 0))  {
               
        IncreaseVolume();
        SpecifyMusicPlay(1);
    } else {
        PlayPause();
    }
      
}

注意...一旦按下 1, 就再也不會叫了, 除非重開機
5#
 樓主| 發表於 2017-8-28 16:50:43 | 只看該作者
好的非常感謝大大 !! 我會測試看看的 真的非常感謝 我真的對於這個東西超陌生!!!
有您的幫助真的覺得好溫暖!
6#
 樓主| 發表於 2017-8-28 18:32:26 | 只看該作者


compiler 無法過耶大大 求解 是我哪裡少大括號嗎??
7#
發表於 2017-8-29 08:22:51 | 只看該作者
要全貼出來才看的到問題
8#
 樓主| 發表於 2017-8-29 10:18:21 | 只看該作者
超新手 發表於 2017-8-29 08:22
要全貼出來才看的到問題

整段在這邊 因為太長
所以我直接貼ino 再麻煩大大了
sketch_aug28a.ino (27.47 KB, 下載次數: 1327)
9#
發表於 2017-8-29 10:24:16 | 只看該作者
void loop() {是多餘的, 去掉第二個 loop 即可...

也就是
#ifdef FIRMATA_SERIAL_FEATURE
  serialFeature.update();
#endif

if (chk == 0) {
Serial.println((float)DHT11.temperature, 2);
10#
發表於 2017-8-29 10:25:41 | 只看該作者
還有...你的程式應該一大堆都是多餘的..
等到測試ok 後, 再一併刪掉
11#
發表於 2017-8-29 10:29:10 | 只看該作者
另外, 你也忘了宣告變數
unsigned char Stop = 0;
12#
 樓主| 發表於 2017-8-29 11:50:51 | 只看該作者
很多都是多餘的 但我看不太出來那些是要的那些是不需要的 抱歉 真的很新手
再麻煩大大多多幫忙!!
13#
 樓主| 發表於 2017-8-29 14:32:54 | 只看該作者
對了 大大如果我有接button 我要如何改用button 按一下就關掉音樂這樣 我還需要加上button的腳位嗎
還是單純有訊號給他就會觸發? 另外我想問一件事情
原本我同事有寫了一段語法 然後也有接button測試 當js檔開啟時確實會叫 案button也能讓他停止叫
但又開了另一支js檔要反向控制led時 聲音就會叫出來 實在令人無解

我們有用到 http://johnny-five.io/ 的led

附上 我同事寫的 ino檔

_0828test.ino (28 KB, 下載次數: 1110)
14#
發表於 2017-8-29 15:55:18 | 只看該作者
其實做法差不多就是那樣
  boolean buttonVal = digitalRead(buttonPin);
   if (buttonVal == LOW && temp>=27 && _playMusic){
     PlayPause();
     _playMusic= false;
     return true;
    }
    else{
     return false;
    }
但它的後面那一段又沒拿掉
if(DHT11.temperature>=27 && _playMusic){
}else {
}

另外. 為什麼你們都用 Firmata 這個範例去改?
而且沒看到 led控制?(除了 Firmata 本身)
15#
 樓主| 發表於 2017-8-29 16:14:05 | 只看該作者
我也不太清楚耶 當初同事就是拿這個改的 所以我只是在裡面加了一些東西
led就是johnnyfive的
16#
發表於 2017-8-29 17:15:16 | 只看該作者
不如一步步來
你改好了嗎?可以動了嗎?
17#
 樓主| 發表於 2017-8-29 18:17:20 | 只看該作者
目前正常了 聲音部分我們打算 改用喇叭方式 直接用開關 關掉喇叭最快... 其他程式都能正常work了 非常感謝!!
您需要登錄後才可以回帖 登錄 | 申請會員

本版積分規則

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

GMT+8, 2024-4-19 20:03 , Processed in 0.174981 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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