久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3952|回復: 4
收起左側

arduino delay堵塞延時問題,大家進來看看吧,哭唧唧

[復制鏈接]
ID:894800 發表于 2021-5-18 22:44 | 顯示全部樓層 |閱讀模式
  1. #include <Metro.h>
復制代碼
  arduino單片機驅動步進電機,同時通過單片機的軟串口讀取一臺設備的數據,
   因為這兩個任務要同時進行,每個任務都有delay,delay堵塞影響其它任務,所以我使用了多線程。
  嘗試過scoop庫,chrono庫定義節拍,Mstimer中斷,只有這個metro庫初步調試成功,電機可正常運行,但產生脈沖的時間6.4s還是影響了讀取數據,本想500毫秒讀取一次數據,結果7秒一次。

附幾個疑問:
1.使用單片機的軟串口庫讀數據,無論設置采樣周期多少,都會加上1秒,這是為何?詳見我求助帖子
2.tone函數產生脈沖   tone(pin, frequency, duration),第三個參數設置周期,為何要再加延時才生效?
  1. tone(7, 440, 200);  //7號引腳發聲200毫秒 ,440HZ
  2. delay(200);
復制代碼
這個delay函數卡了我一個星期了,我這個菜雞崩潰了。馬上去學中斷,聽說這個也是一種方法。


< 刷到這個帖子大家隨便留言,你的任何留言都是對我的鼓勵,十分感謝大家指導。 (鞠躬)>
1.png





回復

使用道具 舉報

ID:277550 發表于 2021-5-19 09:20 | 顯示全部樓層
要做到高精度,就不是那么簡單的了。 中斷可以減少延時帶來的壞處。
回復

使用道具 舉報

ID:844772 發表于 2021-5-19 11:07 | 顯示全部樓層
arduino的delay()和軟串口應該都用了time0,也就是說你要是使用軟串口等中斷服務,就別使用delay(),這也不麻煩,可以用循環替代。
回復

使用道具 舉報

ID:894800 發表于 2021-5-19 12:35 | 顯示全部樓層
devcang 發表于 2021-5-19 09:20
要做到高精度,就不是那么簡單的了。 中斷可以減少延時帶來的壞處。

請問中斷是通過attachInterrupt()函數實現嗎?還是通過定時器
回復

使用道具 舉報

ID:894800 發表于 2021-5-19 12:39 | 顯示全部樓層
程序在這里,粗心的我
  1. [em01]
  2. #include <Metro.h>
  3. #include <SoftwareSerial.h>      
  4. SoftwareSerial DLSerial(2, 3); // 軟串口 RX(D2), TX(D3) 紅
  5. String stringOne="";//存儲接收的“+5.5019e+06,BIN00”      

  6. Metro blink1Metro = Metro(1000);   //把 blink1Metro 實例化 Metro 對象 ,并設置間隔時間
  7. Metro blink2Metro = Metro(1000);     //把 blink2Metro 實例化 Metro 對象 ,并設置間隔時間

  8. void setup(){
  9. DLSerial.begin(38400); //設備波特率38400     
  10. Serial.begin(9600) ;//默認串口波特率9600   
  11. pinMode(7,OUTPUT); // Step   
  12. pinMode(6,OUTPUT); // Dir  方向
  13. }

  14. void loop(){

  15.   if(blink1Metro.check()){  //檢查blink1Metro間隔(我的理解是計時器每隔100毫秒就會返回true,就執行以下程序)
  16.   digitalWrite(6,HIGH); // 方向拉高     
  17.     for(int x = 0; x < 6400; x++) // Loop 2000 times     //6400  
  18.     {     
  19.         digitalWrite(7,HIGH); //  
  20.      delayMicroseconds(250); // Wait   ms  
  21.     digitalWrite(7,LOW); //  
  22.      delayMicroseconds(250); // Wait  ms  250 2000HZ 周期0.5ms
  23.      //正轉   
  24.     }  
  25.       //delay(1000); //  
  26.             
  27.      digitalWrite(6,LOW); // Set Dir high      
  28.     for(int x = 0; x < 6400; x++) // Loop 6400 times   
  29.     {     
  30.         digitalWrite(7,HIGH); //  
  31.      delayMicroseconds(250); // Wait  ms     
  32.     digitalWrite(7,LOW); //  
  33.      delayMicroseconds(250); // Wait   ms   
  34.     }  
  35.      // delay(1000);
  36. }

  37.   
  38.   if(blink2Metro.check()){  
  39.     int val=analogRead(0);//讀取模擬接口0 的值,并將其賦給val
  40. Serial.println(val);//顯示出val 的值 Serial.println(val,DEC);     

  41. DLSerial.write("fetch?"); //發送字節數據      
  42. delay(500); //延時500ms   
  43. if (DLSerial.available()>0) //如果緩存中有接收到的數據     
  44. {      
  45.     String stringOne = DLSerial.readString(); //讀取軟串口數據賦給字符串stringOne      
  46.     Serial.print(stringOne);  //通過串口發到PC      
  47. }         
  48.   }
  49. }
復制代碼
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产91精品久久久久久久网曝门 | 欧美日韩福利视频 | 在线看中文字幕 | www.av在线 | 精品国产一区二区三区久久久久久 | 欧美精品一区二区三区在线 | 欧美视频在线播放 | 色婷婷综合在线观看 | 久久久国产一区 | 国产精品一区久久久 | 国产欧美精品一区二区 | 欧美国产视频一区二区 | 日韩视频在线观看中文字幕 | 午夜影视网 | 国产欧美精品区一区二区三区 | 我要看黄色录像一级片 | 日日夜夜天天 | 国产福利视频 | 欧美日韩精品久久久免费观看 | 国产精品99 | 日韩精品一区二区三区免费观看 | 国产欧美精品一区二区三区 | 亚洲国产高清高潮精品美女 | 国产1区在线| 精品国产91乱码一区二区三区 | 人人艹人人 | www.日韩av.com | 久久免费观看一级毛片 | 国产一在线观看 | 在线免费观看a级片 | 久久午夜剧场 | 51ⅴ精品国产91久久久久久 | 日本三级在线 | 亚洲精品乱码久久久久久按摩观 | 中国av在线免费观看 | 国产精品1区2区3区 一区中文字幕 | 国产成年人小视频 | 毛片免费视频 | 欧美日韩视频一区二区 | 成人中文网 | 国产精品久久精品 |