標籤:

【圖形化學習 Arduino】(五)串口調試四神器

在使用 Arduino 製作比較複雜的項目時,往往需要進行調試。大多數情況下,Arduino 是不能單步跟蹤調試的,只能通過串口輸出信息來調試。然而,串口直接輸出字元串的方式,在數據量較大的情況下,不是很直觀,難以觀察到數據的規律。本文將介紹四種可視化的 Arduino 串口調試工具,分別是 —— Processing、SerialChart、mBlock 和串口顯示屏。

Processing

  • 易用度:☆☆☆

  • 通用性:

  • 可視度:

Processing 是一門數據可視化的編程語言,與 Arduino 頗有淵源。Arduino 的 IDE 就是基於 Processing 的開源 IDE 改寫而成的,二者風格類似(都很難用←_←)。Arduino 語言是基於 C++,而 Processing 語言是基於 Java 的。

Arduino 運行於單片機上,Processingn運行於 PC,二者通過串口通信,Processing 就可以將nArduino 中的某些數據以圖形化的方式顯示出來。以陀螺儀+加速度計模塊 MPU6050 為例,Processingn將陀螺儀的姿態以直觀的方式顯示,便於調試。

其中 Arduino 代碼只是讀取陀螺儀數據並通過串口轉發到 Processing:

#include "MeOrion.h"n#include <Wire.h>nnMeGyro gyro;ndouble x, y, z;nnvoid setup()n{n Serial.begin(9600);n gyro.begin();n}nnvoid loop()n{n gyro.update();nn x = gyro.getAngleX();n Serial.print("x=");n Serial.print(x);n y = gyro.getAngleY();n Serial.print(" y=");n Serial.print(y);n z = gyro.getAngleZ();n Serial.print(" z=");n Serial.println(z);n delay(100);n}nnvoid sendData(char *startAddr, int length)n{n for (int i = 0; i < length; ++i)n {n Serial.write(startAddr[length]);n }n}n

而 Processing 中讀取數據,並顯示為 3D 圖形:

import processing.serial.*;nnSerial myPort;nnfloat x = 0;nfloat y = 0;nfloat z = 0;nnvoid setup()n{n size(700, 700, P3D);n noFill();n n myPort = new Serial(this, Serial.list()[0], 9600);n myPort.bufferUntil(n);n}nnvoid draw()n{n background(0);n translate(width / 2, height / 2, -width / 2);n rotateX(x / 180 * PI);n rotateY(y / 180 * PI);n rotateZ(z / 180 * PI);n stroke(200);n box(8*4, 24*4, 180*4);n}nn// Listen to the event. When buffer filled, run this method.nvoid serialEvent(Serial p)n{n String inString = p.readString();n String[] strArray = inString.split(" ");n for (int i = 0; i < strArray.length; ++i)n {n strArray[i] = strArray[i].substring(2);n //print(strArray[i]);n }n x = Float.parseFloat(strArray[0]);n y = Float.parseFloat(strArray[1]);n z = Float.parseFloat(strArray[2]);n n println("x = " + x + ", y = " + y + ", z = " + z);n}n

二者的總代碼量不超過 80 行,卻實現了 3D 顯示陀螺儀狀態的功能。

點擊鏈接查看動圖:

用 Processing 調試的優勢在於顯示效果好,可以 3D 顯示,甚至添加材質、光線等渲染效果,也可以通過插件導入 3D 模型進行增強顯示。劣勢在於需要編寫兩部分的代碼,一部分是 Arduino 代碼,另一部分是 Processing 的顯示代碼。

SerialChart

  • 易用度:☆☆

  • 通用性:☆☆

  • 可視度:☆

SerialChart 是一個串口調試軟體,可以將串口接收到的數據以曲線圖表的形式顯示出來。在調試 PID 參數、監視感測器狀態等場合下,具有相當的實用性。可以通過簡單地編輯配置文件來修改軟體參數,如顯示範圍、柵格大小、曲線顏色等。SerialChart 只能識別類似 *.csv 格式的數據包,即只使用英文半形逗號、空格、回車這三種符號分割的數據。

舉個例子,將一個溫濕度感測器接到 Makeblock Orion 上,並燒錄以下代碼:

#include "MeOrion.h"nnMeHumiture humiture(PORT_3);nnvoid setup()n{n Serial.begin(9600);n}nnvoid loop()n{n humiture.update();n Serial.print(humiture.getHumidity());n Serial.print(",");n Serial.println(humiture.getTemperature());n delay(300);n}n

配置 SerialChart 後,就可以在軟體中實時監測感測器的狀態了。

點擊鏈接查看動圖:

mBlock

  • 易用度:☆

  • 通用性:☆☆

  • 可視度:☆

mBlock 是 Makeblock 團隊基於 MIT Media Lab 的作品 Scratch 製作的一個圖形化編程工具,與 Scratch 的區別在於:mBlock 完美兼容 Arduino 硬體,並且可以根據圖形化程序實時生成 Arduino 代碼。

mBlock 用於調試 Arduino 時,優勢在於,可以便捷地編輯所要調試的各個模塊,無需反覆燒錄程序,而且可以使用鍵盤和滑鼠與 Arduino 硬體進行交互,對於初期的模塊化調試來說十分方便。

例如,以下「程序」可以使用鍵盤來控制電機的轉動,用來測試電機的功能。

測試過程:

使用 mBlock 測試電機運轉—在線播放—優酷網,視頻高清在線觀看 http://v.youku.com/v_show/id_XMTM3MjMxOTM0OA==.html

串口顯示屏

  • 易用度:☆☆

  • 通用性:

  • 可視度:☆

在 從未見過有如此易用的串口彩屏 一文中,筆者曾介紹過一款串口顯示屏,可以通過簡單的串口指令顯示文字和圖形。類似功能的顯示屏都可以作為實時顯示的調試工具。

這個視頻展示了一個用顯示屏實時顯示溫度感測器數據的案例:

超級易用的 TFT 彩屏—在線播放—優酷網,視頻高清在線觀看 http://v.youku.com/v_show/id_XMTMzMzE5OTgzMg==.html
推薦閱讀:

電氣小混混的環境盒子——持續更新
當樂高遇見Arduino:樂高喊你吃飯啦~
Arduino可通過哪些方式把數據發送到互聯網
Openlab Taipei的TaiwanDuino

TAG:Arduino |