前言
Wio Terminal 自帶的LCD螢幕讓我們檢視資料更容易了。藉由將數值顯示在螢幕上比單純使用Serial monitor更方便,也能在沒有電腦的時候使用。但螢幕的大小有限,因此需要有翻頁功能,此時就需要使用中斷(Interrupt),這也是開發 Arduino 這類 MCU 程式時的重要技巧。
| 撰寫/攝影 |
邱柏憲 |
| 時間 |
30 分鐘 |
材料表 |
|
| 難度 |
0.5(滿分5) |
歡迎參考阿吉老師所錄製的 tinyML 小教室,使用 Edge Impulse 來辨識手勢,非常有趣喔!
本文
使用中斷(Interrupt)的好處是程式會直接停下當下的動作,優先執行中斷事件所指定的程式碼,這與 delay() 不同,且可以避免程式執行到一半時按下按鈕沒有反應。
底下是使用兩種方式時的簡單流程圖:

Wio Terminal可使用五向開關以及上面的ABC三個按鈕觸發中斷,
注意:由於五向開關和按鈕A的中斷連接腳位是一樣的,同時宣告會導致兩個都無法使用,只能擇一宣告
以下是中斷的宣告以及使用方式:
[pastacode lang=”cpp” manual=”%2F%2F%E8%A8%AD%E5%AE%9A%E7%82%BA%E4%B8%8A%E6%8B%89%E6%88%96%E4%B8%8B%E6%8B%89%E9%9B%BB%E9%98%BB%0ApinMode(WIO_5S_UP%2C%20INPUT_PULLUP)%3B%0A%0A%2F%2F%E9%96%8B%E5%95%9F%E8%A7%B8%E7%99%BC%E8%85%B3%E4%BD%8D%0A%2F%2Fbutton_handler_up%20%E4%BB%A3%E8%A1%A8%E8%A6%81%E5%9F%B7%E8%A1%8C%E7%9A%84%E5%87%BD%E5%BC%8F%E5%90%8D%E7%A8%B1%0AattachInterrupt(digitalPinToInterrupt(WIO_5S_UP)%2C%C2%A0%20button_handler_up%2C%20FALLING)%3B%0A%0A%2F%2F%E8%A7%B8%E7%99%BC%E5%BE%8C%E7%9A%84%E5%9F%B7%E8%A1%8C%E5%8B%95%E4%BD%9C%0Avoid%20button_handler_up()%20%7B%0A%C2%A0%20%C2%A0%20Serial.println(%22button%20Up%22)%3B%0A%C2%A0%20%C2%A0%20delay(100)%3B%0A%C2%A0%20%C2%A0%20mode%20%3D%201%3B%0A%7D” message=”” highlight=”” provider=”manual”/]
上述程式碼中,WIO_5S_UP 指的是 Wio Terminal 五向開關的向上按鈕,此外還有WIO_5S_DOWN, WIO_5S_LEFT,WIO_5S_RIGHT 和 WIO_5S_PRESS2 等同一個按鈕的不同事件。
另外還有三個按鈕可用:WIO_KEY_A,WIO_KEY_B 與 WIO_KEY_C,如下圖

Arduino 的 attachinterrupt 指令的詳細介紹請點我,如果只需使用基礎功能可以使用本文的範例程式碼即可。更多細節設定就請自行參考連結中的說明。
Wio temrinal 中斷範例
以下範例使用Wio Terminal內建的光感測器、加速度和聲音感測器以及五向項開關的右、下、左,當然還有顯示用的LCD,由於都是內建的元件,因此額外接線,Wio Terminal 拿出來就好,非常方便。
此外本範例程式也會使用到 seeed 的 line_chart 範例,筆者覺得該範例相當實用,可以輕鬆把各類資料以折線圖的方式顯示於 Wio Terminal 內建的 LCD。
[pastacode lang=”cpp” manual=”TFT_eSPI%20tft%3B%0ATFT_eSprite%20spr%20%3D%20TFT_eSprite(%26tft)%3B%0Atft%20.begin()%3B%0Atft.setRotation(3)%3B%0Aspr.createSprite(TFT_HEIGHT%2C%20TFT_WIDTH)%3B%0Aspr.setRotation(3)%3B%0Aspr.setTextColor(TFT_BLACK%2C%20TFT_BLACK)%3B%0Aspr.setTextSize(2)%3B%0A%20%0Aif%20(data.size()%20%3D%3D%20MAX_SIZE)%20%7B%20%0A%2F%2F%E7%95%B6%E8%B3%87%E6%96%99%E7%AD%86%E6%95%B8%E5%A4%AA%E5%A4%9A%E6%99%82%E5%B0%87%E6%9C%80%E8%88%8A%E4%B8%80%E7%AD%86%E7%9A%84%E6%95%B8%E5%80%BC%E4%B8%9F%E6%A3%84%0A%20%20%20%20%20%20%20%20data.pop()%3B%0A%20%20%20%20%7D%0A%20%20%20%20data.push(val)%3B%20%2F%2F%E5%B0%87%E6%9C%80%E6%96%B0%E7%9A%84%E4%B8%80%E7%AD%86%E8%B3%87%E6%96%99%E5%AF%AB%E5%85%A5%0A%20%0A%20%20%20%20%2F%2F%E8%A8%AD%E5%AE%9A%E5%9C%96%E8%A1%A8%E6%A8%99%E9%A1%8C%E9%83%A8%E5%88%86%EF%BC%8C%E6%AD%A4%E8%99%95%E6%98%AF%E8%81%B2%E9%9F%B3%E6%84%9F%E6%B8%AC%E5%99%A8%0A%20%20%20%20auto%20header%20%3D%20%20text(0%2C%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value(%22Microphone%20Reading%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.align(center)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.color(TFT_WHITE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.valign(vcenter)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.width(spr.width())%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.thickness(2)%3B%0A%20%0A%20%20%20%20header.height(header.font_height(%26spr)%20*%202)%3B%0A%20%20%20%20header.draw(%26spr)%3B%20%0A%20%0A%20%20%2F%2F%E6%8A%98%E7%B7%9A%E5%9C%96%E8%A8%AD%E5%AE%9A%20%20%0A%20%20%2F%2F%E9%80%99%E9%87%8D%E9%BB%9E%E5%9C%A8%E6%96%BC.value(data)%20%E4%B8%AD%E7%9A%84data%0A%20%20%2F%2F%E5%B0%B1%E6%98%AF%E5%B8%8C%E6%9C%9B%E7%94%B1%E6%8A%98%E7%B7%9A%E5%9C%96%E6%89%80%E7%B9%AA%E8%A3%BD%E7%9A%84%E6%95%B8%E5%80%BC%0A%20%20%2F%2F%E9%80%99%E4%BA%9B%E6%95%B8%E5%80%BC%E6%87%89%E5%85%88%E5%84%B2%E5%AD%98%E6%96%BC%E9%99%A3%E5%88%97%E4%B8%AD%20%20%0A%20%20%20%20%0A%20%20%20auto%20content%20%3D%20line_chart(20%2C%20header.height())%3B%0A%20%20%20%20%20%20%20%20%20content%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.height(spr.height()%20-%20header.height()%20*%201.5)%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.width(spr.width()%20-%20content.x()%20*%202)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.based_on(0.0)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.show_circle(false)%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.max_size(MAX_SIZE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value(data)%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.color(TFT_RED)%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.backgroud(TFT_WHITE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.draw(%26spr)%3B%0A” message=”” highlight=”” provider=”manual”/]
最後分別是三種感測器的畫面顯示,可使用五向開關的左、下、右來即時切換。希望本文分享的功能能對大家有幫助,完整程式碼列於文末。
[pastacode lang=”cpp” manual=”%23include%22LIS3DHTR.h%22%20%2F%2F%E5%8A%A0%E9%80%9F%E5%BA%A6%E6%84%9F%E6%B8%AC%E5%99%A8%E5%87%BD%E5%BC%8F%E5%BA%AB%0A%23include%20%3CWire.h%3E%0A%23include%20%3CTFT_eSPI.h%3E%0A%23include%20%22seeed_line_chart.h%22%20%2F%2FWio%20Terminal%E5%9C%96%E8%A1%A8%E5%87%BD%E5%BC%8F%E5%BA%AB%0A%23define%20MAX_SIZE%2030%0ALIS3DHTR%3CTwoWire%3E%20%20lis%3B%0A%0Aint%20mode%3B%0Aint%20brightness%3B%0A%0Adoubles%20data%3B%20%0Adoubles%20accelerator_readings%5B3%5D%3B%0A%0A%2F%2F%E8%A7%B8%E7%99%BC%E5%95%9F%E5%8B%95%E5%BE%8C%E6%89%80%E8%A6%81%E5%9F%B7%E8%A1%8C%E7%9A%84%E5%8B%95%E4%BD%9C%0Avoid%20button_handler_down()%20%7B%20Serial.println(%22button%20Down%22)%3Bdelay(100)%3B%20mode%20%3D%201%3B%7D%0Avoid%20button_handler_left()%20%7B%20Serial.println(%22button%20left%22)%3Bdelay(100)%3B%20mode%20%3D%202%3B%7D%0Avoid%20button_handler_right()%20%7B%20Serial.println(%22button%20Right%22)%3Bdelay(100)%3B%20mode%20%3D%203%3B%7D%0A%0A%2F*%E5%85%B6%E4%BB%96%E8%A7%B8%E7%99%BC%0Avoid%20button_handler_up()%20%7B%20Serial.println(%22button%20Up%22)%3B%20delay(100)%3B%20mode%20%3D%204%3B%7D%0Avoid%20button_handler_press()%20%7B%20Serial.println(%22button%20Press%22)%3Bdelay(100)%3B%20mode%20%3D%205%3B%7D%0Avoid%20button_handler_B()%20%7B%20Serial.println(%22button%20Press%22)%3Bdelay(100)%3B%20mode%20%3D%206%3B%7D%0Avoid%20button_handler_C()%20%7B%20Serial.println(%22button%20Press%22)%3Bdelay(100)%3B%20mode%20%3D%207%3B%7D%0A*%2F%0A%0ATFT_eSPI%20tft%3B%0ATFT_eSprite%20spr%20%3D%20TFT_eSprite(%26tft)%3B%0A%0Avoid%20setup()%20%7B%0A%20%20Serial.begin(9600)%3B%0A%20%20lis.begin(Wire1)%3B%0A%20%20lis.setOutputDataRate(LIS3DHTR_DATARATE_25HZ)%3B%0A%20%20lis.setFullScaleRange(LIS3DHTR_RANGE_2G)%3B%0A%0A%20%20%2F%2F%E8%A8%AD%E5%AE%9A%E4%BA%94%E9%A0%85%E9%96%8B%E9%97%9C%E7%82%BA%E4%B8%8A%E6%8B%89%E6%88%96%E4%B8%8B%E6%8B%89%E9%9B%BB%E9%98%BB%0A%20%20%0A%20%20pinMode(WIO_5S_DOWN%2C%20INPUT_PULLUP)%3B%0A%20%20pinMode(WIO_5S_LEFT%2C%20INPUT_PULLUP)%3B%0A%20%20pinMode(WIO_5S_RIGHT%2C%20INPUT_PULLUP)%3B%0A%0A%20%20%2F*%E5%85%B6%E4%BB%96%E8%A8%AD%E5%AE%9A%0A%20%20pinMode(WIO_5S_UP%2C%20INPUT_PULLUP)%3B%0A%20%20pinMode(WIO_5S_PRESS%2C%20INPUT_PULLUP)%3B%0A%20%20pinMode(WIO_KEY_B%2C%20INPUT_PULLUP)%0A%20%20pinMode(WIO_KEY_C%2C%20INPUT_PULLUP)%0A%20%20*%2F%0A%20%20%0A%20%20%2F%2F%E8%A8%AD%E5%AE%9A%E6%8C%89%E9%88%95%E8%A2%AB%E5%A6%82%E4%BD%95%E6%8C%89%E4%B8%8B%E6%99%82%E6%9C%83%E5%95%9F%E5%8B%95%E8%A7%B8%E7%99%BC%EF%BC%8C%E6%9C%89%E6%8C%89%E4%B8%8B%E6%88%96%E6%8C%89%E4%B8%8B%E5%BE%8C%E6%94%BE%E9%96%8B%0A%20%20%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_5S_DOWN)%2C%20%20%20button_handler_down%2C%20%20FALLING)%3B%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_5S_LEFT)%2C%20%20%20button_handler_left%2C%20%20FALLING)%3B%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_5S_RIGHT)%2C%20%20button_handler_right%2C%20FALLING)%3B%0A%0A%20%20%2F*%E5%85%B6%E4%BB%96%E8%A7%B8%E7%99%BC%E8%A8%AD%E5%AE%9A%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_5S_UP)%2C%20%20%20%20%20button_handler_up%2C%20%20%20%20FALLING)%3B%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_5S_PRESS)%2C%20%20button_handler_press%2C%20FALLING)%3B%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_KEY_B)%2C%20%20button_handler_B%2C%20FALLING)%3B%0A%20%20attachInterrupt(digitalPinToInterrupt(WIO_KEY_C)%2C%20%20button_handler_C%2C%20FALLING)%3B%0A%20%20*%2F%0A%0A%20%20%0A%20%20%2F%2FLCD%E9%A1%AF%E7%A4%BA%E8%A8%AD%E5%AE%9A%0A%20%20tft%20.begin()%3B%0A%20%20tft.setRotation(3)%3B%0A%20%20spr.createSprite(TFT_HEIGHT%2C%20TFT_WIDTH)%3B%0A%20%20spr.setRotation(3)%3B%0A%20%20spr.setTextColor(TFT_BLACK%2C%20TFT_BLACK)%3B%0A%20%20spr.setTextSize(2)%3B%0A%20%20delay(500)%3B%0A%7D%0A%0Avoid%20loop()%20%7B%0A%0A%0A%20%20%2F%2F%E6%A0%B9%E6%93%9A%E8%A7%B8%E7%99%BC%E5%BE%8C%E6%9B%B4%E6%94%B9mode%E7%9A%84%E6%95%B8%E5%AD%97%E6%B1%BA%E5%AE%9A%E8%A6%81%E5%81%9A%E7%9A%84%E5%8B%95%E4%BD%9C%0A%20%20switch(mode)%7B%0A%20%20%2F%2F%E4%B8%8B%0A%20%20case%201%20%3A%0A%20%20spr.drawString(%222%22%2C%2040%2C%2040)%3B%20%20%20%0A%20%20chartMicro()%3B%0A%20%20break%3B%0A%0A%20%20%2F%2F%E5%B7%A6%0A%20%20case%202%20%3A%0A%20%20chartAccel()%3B%0A%20%20break%3B%0A%0A%20%20%2F%2F%E5%8F%B3%20%20%0A%20%20case%203%20%3A%0A%20%20chartLight()%3B%0A%20%20break%3B%0A%0A%0A%20%20%2F*….%20%20%0A%20%20case%204%20%3A%0A%20%20%E5%9F%B7%E8%A1%8C%E5%8B%95%E4%BD%9C%0A%20%20break%0A%20%20*%2F%0A%20%20%7D%0A%20%20%2F%2F%E8%BC%B8%E5%87%BA%E7%95%AB%E9%9D%A2%0A%20%20spr.pushSprite(0%2C%200)%3B%0A%7D%0A%0A%0A%2F%2F%E5%85%89%E6%84%9F%E5%80%BC%E4%BB%A5%E5%9C%96%E8%A1%A8%E9%A1%AF%E7%A4%BA%0Avoid%20chartLight()%0A%7B%0A%20%20brightness%20%3D%20analogRead(WIO_LIGHT)%3B%0A%20%20spr.fillSprite(TFT_WHITE)%3B%0A%20%20if%20(data.size()%20%3E%20MAX_SIZE)%0A%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20data.pop()%3B%20%2F%2F%20this%20is%20used%20to%20remove%20the%20first%20read%20variable%0A%20%20%20%20%7D%0A%20%20%20%20data.push(brightness)%3B%20%2F%2F%20read%20variables%20and%20store%20in%20data%0A%0A%20%20%20%20%2F%2F%20Settings%20for%20the%20line%20graph%20title%0A%20%20%20%20auto%20header%20%3D%20text(0%2C%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value(%22Light%20Sensor%20Readings%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.align(center)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.valign(vcenter)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.width(spr.width())%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.thickness(2)%3B%0A%0A%20%20%20%20header.height(header.font_height(%26spr)%20*%202)%3B%0A%20%20%20%20header.draw(%26spr)%3B%20%2F%2F%20Header%20height%20is%20the%20twice%20the%20height%20of%20the%20font%0A%0A%20%20%20%20%2F%2F%20Settings%20for%20the%20line%20graph%0A%20%20%20%20auto%20content%20%3D%20line_chart(20%2C%20header.height())%3B%20%2F%2F(x%2Cy)%20where%20the%20line%20graph%20begins%0A%20%20%20%20content%0A%20%20%20%20%20%20%20%20.height(spr.height()%20-%20header.height()%20*%201.5)%20%2F%2F%20actual%20height%20of%20the%20line%20chart%0A%20%20%20%20%20%20%20%20.width(spr.width()%20-%20content.x()%20*%202)%20%20%20%20%20%20%20%20%20%2F%2F%20actual%20width%20of%20the%20line%20chart%0A%20%20%20%20%20%20%20%20.based_on(0.0)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Starting%20point%20of%20y-axis%2C%20must%20be%20a%20float%0A%20%20%20%20%20%20%20%20.show_circle(false)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20drawing%20a%20cirle%20at%20each%20point%2C%20default%20is%20on.%0A%20%20%20%20%20%20%20%20.value(data)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20passing%20through%20the%20data%20to%20line%20graph%0A%20%20%20%20%20%20%20%20.max_size(MAX_SIZE)%0A%20%20%20%20%20%20%20%20.color(TFT_RED)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Setting%20the%20color%20for%20the%20line%0A%20%20%20%20%20%20%20%20.backgroud(TFT_WHITE)%0A%20%20%20%20%20%20%20%20.draw(%26spr)%3B%0A%20%20%20%20delay(100)%3B%0A%7D%0A%0A%2F%2F%E5%8A%A0%E9%80%9F%E5%BA%A6%E5%80%BC%E4%BB%A5%E5%9C%96%E8%A1%A8%E9%A1%AF%E7%A4%BA%0Avoid%20chartAccel()%0A%7B%0A%20%20spr.fillSprite(TFT_WHITE)%3B%0A%20%20%0A%20%20if%20(accelerator_readings%5B0%5D.size()%20%3D%3D%20MAX_SIZE)%20%7B%0A%20%20%20%20%20%20for%20(uint8_t%20i%20%3D%200%3B%20i%3C3%3B%20i%2B%2B)%7B%0A%20%20%20%20%20%20%20%20accelerator_readings%5Bi%5D.pop()%3B%20%2F%2Fthis%20is%20used%20to%20remove%20the%20first%20read%20variable%0A%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%0A%20%20accelerator_readings%5B0%5D.push(lis.getAccelerationX())%3B%20%2F%2Fread%20variables%20and%20store%20in%20data%0A%20%20accelerator_readings%5B1%5D.push(lis.getAccelerationY())%3B%0A%20%20accelerator_readings%5B2%5D.push(lis.getAccelerationZ())%3B%0A%20%20%20%20%2F%2F%20Settings%20for%20the%20line%20graph%20title%0A%20%20%20%20auto%20header%20%3D%20text(0%2C%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value(%22ACCEL%20Sensor%20Readings%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.align(center)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.valign(vcenter)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.width(spr.width())%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.thickness(2)%3B%0A%0A%20%20%20%20header.height(header.font_height(%26spr)%20*%202)%3B%0A%20%20%20%20header.draw(%26spr)%3B%20%2F%2F%20Header%20height%20is%20the%20twice%20the%20height%20of%20the%20font%0A%0A%20%20%20%20%2F%2F%20Settings%20for%20the%20line%20graph%0A%20%20%20%20auto%20content%20%3D%20line_chart(20%2C%20header.height())%3B%20%2F%2F(x%2Cy)%20where%20the%20line%20graph%20begins%0A%20%20%20%20content%0A%20%20%20%20%20%20%20%20.height(spr.height()%20-%20header.height()%20*%201.5)%20%2F%2F%20actual%20height%20of%20the%20line%20chart%0A%20%20%20%20%20%20%20%20.width(spr.width()%20-%20content.x()%20*%202)%20%20%20%20%20%20%20%20%20%2F%2F%20actual%20width%20of%20the%20line%20chart%0A%20%20%20%20%20%20%20%20.based_on(0.0)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Starting%20point%20of%20y-axis%2C%20must%20be%20a%20float%0A%20%20%20%20%20%20%20%20.show_circle(false)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20drawing%20a%20cirle%20at%20each%20point%2C%20default%20is%20on.%0A%20%20%20%20%20%20%20%20.value(%7Baccelerator_readings%5B0%5D%2Caccelerator_readings%5B1%5D%2C%20accelerator_readings%5B2%5D%7D)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20passing%20through%20the%20data%20to%20line%20graph%0A%20%20%20%20%20%20%20%20.max_size(300)%0A%20%20%20%20%20%20%20%20.color(TFT_BLUE%2C%20TFT_RED%2C%20TFT_GREEN)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Setting%20the%20color%20for%20the%20line%0A%20%20%20%20%20%20%20%20.backgroud(TFT_WHITE)%0A%20%20%20%20%20%20%20%20.draw(%26spr)%3B%0A%20%20%20%20delay(10)%3B%0A%7D%0A%0A%2F%2F%E8%81%B2%E9%9F%B3%E6%84%9F%E6%B8%AC%E5%99%A8%E4%BB%A5%E5%9C%96%E8%A1%A8%E9%A1%AF%E7%A4%BA%0Avoid%20chartMicro()%0A%7B%0A%20%20%20spr.fillSprite(TFT_WHITE)%3B%0A%20%0A%20%20%20%20int%20val%20%3D%20analogRead(WIO_MIC)%3B%0A%20%0A%20%20%20%20if%20(data.size()%20%3D%3D%20MAX_SIZE)%20%7B%0A%20%20%20%20%20%20%20%20data.pop()%3B%2F%2Fthis%20is%20used%20to%20remove%20the%20first%20read%20variable%0A%20%20%20%20%7D%0A%20%20%20%20data.push(val)%3B%20%2F%2Fread%20variables%20and%20store%20in%20data%0A%20%0A%20%20%20%20%2F%2FSettings%20for%20the%20line%20graph%20title%0A%20%20%20%20auto%20header%20%3D%20%20text(0%2C%200)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value(%22Microphone%20Reading%22)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.align(center)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.valign(vcenter)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.width(spr.width())%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.thickness(2)%3B%0A%20%0A%20%20%20%20header.height(header.font_height(%26spr)%20*%202)%3B%0A%20%20%20%20header.draw(%26spr)%3B%20%2F%2FHeader%20height%20is%20the%20twice%20the%20height%20of%20the%20font%0A%20%0A%20%20%2F%2FSettings%20for%20the%20line%20graph%0A%20%20%20%20auto%20content%20%3D%20line_chart(20%2C%20header.height())%3B%20%2F%2F(x%2Cy)%20where%20the%20line%20graph%20begins%0A%20%20%20%20%20%20%20%20%20content%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.height(spr.height()%20-%20header.height()%20*%201.5)%20%2F%2Factual%20height%20of%20the%20line%20chart%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.width(spr.width()%20-%20content.x()%20*%202)%20%2F%2Factual%20width%20of%20the%20line%20chart%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.based_on(0.0)%20%2F%2FStarting%20point%20of%20y-axis%2C%20must%20be%20a%20float%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.show_circle(false)%20%2F%2Fdrawing%20a%20cirle%20at%20each%20point%2C%20default%20is%20on.%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.max_size(MAX_SIZE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.value(data)%20%2F%2Fpassing%20through%20the%20data%20to%20line%20graph%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.color(TFT_RED)%20%2F%2FSetting%20the%20color%20for%20the%20line%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.backgroud(TFT_WHITE)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20.draw(%26spr)%3B%0A%20%20%20%20delay(50)%3B%0A%7D” message=”complete code – wio terminal interrupt demo” highlight=”” provider=”manual”/]
Post Views: 424