Robofun 機器人論壇

標題: 關於arduino溫度感測SD Card警示音語法問題 [打印本頁]

作者: stworld8591    時間: 2017-8-24 16:05
標題: 關於arduino溫度感測SD Card警示音語法問題
本帖最後由 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, 下載次數: 2116)
iot_mp3_perfect0816.ino (27.42 KB, 下載次數: 2156)

作者: stworld8591    時間: 2017-8-28 11:01
查了很多發現 似乎只能在裡面寫死迴圈
但我不太清楚要怎麼撰寫那段
另外一種方式只能拔usb... 改寫button我也不太懂...
請求大大幫忙阿!
作者: stworld8591    時間: 2017-8-28 11:02
https://www.ptt.cc/bbs/ASM/M.1383793826.A.58E.html 我就是跟他一樣的狀況
有大神能幫忙在我ino檔裡修改一下嗎Q_Q
作者: 超新手    時間: 2017-8-28 11:22
多宣告一個變數即可
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, 就再也不會叫了, 除非重開機

作者: stworld8591    時間: 2017-8-28 16:50
好的非常感謝大大 !! 我會測試看看的 真的非常感謝 我真的對於這個東西超陌生!!!
有您的幫助真的覺得好溫暖!
作者: stworld8591    時間: 2017-8-28 18:32


compiler 無法過耶大大 求解 是我哪裡少大括號嗎??
作者: 超新手    時間: 2017-8-29 08:22
要全貼出來才看的到問題
作者: stworld8591    時間: 2017-8-29 10:18
超新手 發表於 2017-8-29 08:22
要全貼出來才看的到問題

整段在這邊 因為太長
所以我直接貼ino 再麻煩大大了
sketch_aug28a.ino (27.47 KB, 下載次數: 1846)
作者: 超新手    時間: 2017-8-29 10:24
void loop() {是多餘的, 去掉第二個 loop 即可...

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

if (chk == 0) {
Serial.println((float)DHT11.temperature, 2);

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

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

附上 我同事寫的 ino檔

_0828test.ino (28 KB, 下載次數: 1660)
作者: 超新手    時間: 2017-8-29 15:55
其實做法差不多就是那樣
  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 本身)

作者: stworld8591    時間: 2017-8-29 16:14
我也不太清楚耶 當初同事就是拿這個改的 所以我只是在裡面加了一些東西
led就是johnnyfive的
作者: 超新手    時間: 2017-8-29 17:15
不如一步步來
你改好了嗎?可以動了嗎?
作者: stworld8591    時間: 2017-8-29 18:17
目前正常了 聲音部分我們打算 改用喇叭方式 直接用開關 關掉喇叭最快... 其他程式都能正常work了 非常感謝!!




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