之前初次上手應用所寫的程式碼是用到Arduino內建Delay函數
本次實驗是不用內建Delay函數。
以前學習Verilog的習慣是利用V-code時脈同步特性去設計韌體
Arduino說穿了,用的就是C的語法
但V-code與一般軟體的語法非常不一樣
兩種比起來我覺得同步時脈可以應用在此,甚至可以發揮得更好!
如果一個Aduino系統寫得越龐大,相對的各個模組的延遲時間(Delay)會互相影響,導致系統容易產生崩潰當機。
解決此問題的方法,就是利用同步時脈的概念,把每個模組的Delay給取代成固定頻率去執行。
但是Arduino loop() 頻率是板子上石英震盪器的頻率,有8M也有16M等等,如果要設定成固定頻率就必須用到 "Timer函式"(點擊下載)
下載好放在Arduino library裡
實驗方法
1.設計流程圖
2.Code除頻器
3.規劃狀態
4.完成
實驗開始
一.設計流程圖
1. 打開舊版Code
2.可以知道WIFI作傳輸總共有4個步驟: (1.)初始化,測試WIFI模組是否正常。(2.)WIFI模組基本功能設定。(3.)上傳數值至雲端。(4.)錯誤待滯區
3.設計出流程圖
二.Code除頻器
1.在這邊 t.every()的單位時間是1m sec ,所以t.every(100,Wifi_main)就是0.1 sec 執行一次 Wifi_main 的函式。
t.every(100, Wifi_main);
2. 所以delaytime 的單位時間在Wifi_main 的函式裡就是 0.1 秒 , 原地數10次就等於1秒。
if (delaytime==10){ //delay 1 sec delaytime=0; if(debug.find("OK")){ Wifi_State=1; //next setting wifi mode } else{ Wifi_State=0; //back }}else{delaytime++;}
三.規劃狀態
1.在這裡就直接圖解了。每個狀態都有自己不同的工作,而切換狀態的頻率就是 t.every()的時間倒數。
四.完成
留言列表