之前初次上手應用所寫的程式碼是用到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.完成

 請配合Code一起服用

實驗開始

一.設計流程圖

1. 打開舊版Code

2.可以知道WIFI作傳輸總共有4個步驟: (1.)初始化,測試WIFI模組是否正常。(2.)WIFI模組基本功能設定。(3.)上傳數值至雲端。(4.)錯誤待滯區

3.設計出流程圖

WIFI_Module_flowsheet.png

 二.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()的時間倒數。

WIFI_Module_flowsheet_State.png

 

四.完成




arrow
arrow

    兩隻小豬 發表在 痞客邦 留言(0) 人氣()