2019年2月17日 星期日

MPU-6050三軸加速度陀螺儀6DOF模組 GY-521


這個模組能夠輸出六個數據,三個軸的傾斜角度跟加速度,但是角度是偵測水平變化,而加速度則是偵測線性運動的變化,在還沒開始使用前,自己就感到很困惑,因為拿到這個模組時,很懷疑這麼小的東西要怎麼偵測這兩種數據,尤其是還有陀螺儀,印象中,陀螺儀不就是一個陀螺在轉嗎?

於是上網用"mems 陀螺儀"查看看,了解是利用科氏力(科裡奧利力(Coriolis))的原理,在微電機裡面也不是真的有個陀螺,詳細就不去研究了,先知道個大概之後,就來用看看吧。

然後,又遇到問題了,我根本不知道有什麼SCL,SDA之類的,查到了SDA (Serial Data line),SCL (Serial Clock Line),的說明,這是兩個裝置通訊所用的接腳,至於通訊用的協定則是採用I2C,因為這個模組用的通訊協定是I2C,所以就會使用這兩個接腳,我有查到接腳的說明,路徑如下
https://www.mschoeffler.de/2017/10/05/tutorial-how-to-use-the-gy-521-module-mpu-6050-breakout-board-with-the-arduino-uno/
好,那arduino上呢?

  • VCC (The breakout board has a voltage regulator. Therefore, you can connect the board to 3.3V and 5V sources.)
  • GND
  • SCL (Serial Clock Line of the I2C protocol.)
  • SDA (Serial Data Line of the I2C protocol.)
  • XDA (Auxiliary data => I2C master serial data for connecting the module to external sensors.)
  • XCL (Auxiliary clock => I2C master serial clock for connecting the module to external sensors.)
  • AD0 (If this pin is LOW, the I2C address of the board will be 0x68. Otherwise, if the pin is HIGH, the address will be 0x69.)
  • INT (Interrupt digital output)


因為我用的是arduino nano,就查了一下接腳,A5是SCL,A4則是SDA
網路上有很多文章,我是參考底下這篇
http://dory168.blogspot.com/p/gy-521sensormpu-6050dmp-ic.html

函式庫是底下路徑,要注意的是所需要的函式庫是放在Arduino目錄下
https://github.com/jrowberg/i2cdevlib

還有,文章中有提到驗證會出現錯誤,我抓的版本沒有,也許有修正錯誤了
因為有輸出數據,就不想去研究了

看到了數字,就想試試看圖像化的效果,
但是,在下載  “Toxi” 函式庫時遇到問題,因為這個連結過去的好像不是,就GOOGLE了一下,從網站首頁找下底下的網址
https://bitbucket.org/postspectacular/toxiclibs/downloads/

結果,安裝processing的時候又遇到了問題,出現警告訊息說有檔案遺失而無法安裝,於是試了幾個版本,最新版都不行,防毒都關了也沒用,只有2.2.1可以開啟,但是編譯的時候卻出現錯誤,看來是JVM的版本不合,抓了各種JVM都不行,就卡在這裡了。

而且發現,瞬間超過某個角度之後,MPU6050就會當掉,又再上網查了之後知道這是抓data時會頓停的問題,但是就必須要連arduino都要重開,所以又在找到下面的文章,使用他的程式碼後就好了。
http://microchip.eefocus.com/module/forum/thread-57814-1-1.html









2019年2月13日 星期三

Mini MP3 Player

為了想要用arduino控制音效,所以淘了這個撥放器回來試試看,一看到底下說明整個就傻住了,竟然要發送指令,這,我不會啊,幸好賣家提供了一篇文章









https://stonez56.blogspot.com/2015/03/arduino-dfplayer-mini-mp3-module.html

原始文章應該出自底下
https://t93093.wordpress.com/2017/08/03/arduino-%E6%B8%AC%E8%A9%A6-dfplayer-mini-mp3-%E6%92%AD%E6%94%BE%E6%A8%A1%E7%B5%84/

但是,看的時候不仔細,多花了點時間,所以依照自己的方式做紀錄,
先到底下路徑抓函式庫放到arduino的libraries
https://github.com/DFRobot/DFPlayer-Mini-mp3

#include <DFPlayer_Mini_Mp3.h>

聲音檔的放置方式:
在準備的micro SD卡裡面新增"mp3" 資料夾,把聲音檔放進這個資料夾
而聲音檔要先以四個數字命名0001~9999,在寫arduino程式碼的時候,要使用哪個聲音檔,不管前面的0,比如0001寫1就可以,
mp3_play (1);         //播放0001的聲音檔

測試用的程式碼,注意接腳用的是0、1,所以傳程式碼時先不要接
#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>

//
void setup () {
Serial.begin (9600);
mp3_set_serial (Serial); //set Serial for DFPlayer-mini mp3 module
mp3_set_volume (15);
}


//
void loop () {     
mp3_play (1);
        delay (6000);
}

聲音檔名的數字之後就可以加文字,比如0001test.mp3,

我也拆了一條USB線,測試讀卡功能,插到電腦上,還真的有抓到勒


只是,有個困惱的地方,接喇叭的正負極並沒有清楚的標示,實際上測試則是怎麼接都可以,但SPK2接正極的時候雜音比較少,至於要沒雜音的話,

依照官方的說法,需要接個1k的電阻,不過,上述的測試程式碼不能使用底下的接腳,因為是接10、11,所以為了符合底下的接腳說明,稍微修改了一下





#include <SoftwareSerial.h>
#include <DFPlayer_Mini_Mp3.h>

SoftwareSerial mySoftwareSerial(10, 11); // RX, TX

void setup() {
 Serial.begin (9600);
 mySoftwareSerial.begin(9600);
 mp3_set_serial (mySoftwareSerial); //set Serial for DFPlayer-mini mp3 module
 mp3_set_volume (20);

}

void loop () {     
 mp3_play (1); //play 0001.mp3
 delay(10)
}




官方也有提供函式庫跟範例
http://wiki.dfrobot.com.cn/index.php/(SKU:DFR0299)DFPlayer_Mini%E6%A8%A1%E5%9D%97

接著,我叫兒子錄了兩句話,把它接到otto上,只不過otto的10跟11是用來接嘴巴的Led,因為線太亂,我沒有接,修改成遇到障礙物發出人聲警告。

題外話,因為我本來是用mblock寫程式,但是不知道怎麼把MP3player加進去,所以想用arduino 的IDE來編輯程式碼,但是,不管怎麼compiler都失敗,後來,到下面下載函式庫放到libraries裡面就可以了。
https://github.com/stembotvn/OttoDIY_mBlock_Extension





2019年1月6日 星期日

Arduino的快速使用說明

市面上已經有太多書了,我自己買了不下五本,也看了很多網站,但每次要開始寫的時候又要重新看,所以在理解之後以自己的方式整理,重新再看的時候比較快進入狀況。

在連結Arduino之後,電腦有可能無法正確認識到,因為驅動程式不正確

有一個可能性是使用了CH340C的晶片,安裝正確的驅動程式安裝就可以指派一個COM
這個COM號碼就是要在編輯Arduino程式的時候使用的。

電腦可以認識Arduino之後,就要連接Arduino來使用了。
我們要去Arduino的網站下載軟體來安裝,
https://www.arduino.cc/

WIN10的話,要用APP的版本,才有反應
打開程式後,設定好開發版,處理器,序列埠



arduino的程式,是分成兩個區塊來設定
第一塊是對於arduino板子的設定,比如哪個接腳是輸入,哪個接腳是輸出
void setup() //初始化變數,設定接腳模式
{
}

第二個區塊是要執行的程式碼

void loop()
{
}

底下的例子是將接腳13設定成輸出訊號的模式,相對的,也會有輸入的模式,比如使用sensor來接收數據的時候。
第一區塊就是
void setup() {
pinMode(13, OUTPUT);
}

在上面設定好哪個接腳要做輸出之後,再來第二個是動作,比如要輸出開或關,延遲多久,
底下的例子是,開0.001秒之後,關1秒,再開1秒,再關0.001秒
所以,第二區塊就是
void loop() {
digitalWrite(13, HIGH);
delay(1);
digitalWrite(13, LOW);
delay(1000);
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1);
}


上面是設定單一接腳的時候,如果要接一個以上,追加就可以,底下是個例子,不過
void setup() {
pinMode(13, OUTPUT);
pinMode(10, OUTPUT);
}

有幾個接腳須注意,13是接到內部的一個LED,所以上面的程式會讓板子上的LED亮,另外,有幾個接腳也跟內部相連,比如D0跟D1,是跟RX跟TX相連,這兩個接腳就不建議使用,A0至A5分別可視為D14至D19


更進一步,在設定板子之前,是可以先宣告變數跟各種條件
這種在設定需要控制多個接腳以及多種狀態時,非常好用

設定全域變數
const int led[ ]={3,9,10,11}; //宣告一個一維陣列,它是一個不能變動的常數,其型態是int,
int varNums; //宣告一個int型態的變數,用來指定有幾種模式
int ledNums; //宣告一個int型態的變數,用來指定各個模式下各led的亮度
const int brightness[7] [4] = //宣告一個二維陣列,有7列(模式),每一列有4個值(led的亮度),
{ {250,0,0,0}, //第一種模式
{100,250,0,0}, //第二種模式
{50,100,250,0}, //第三種模式
{5,50,100,250}, //第四種模式
{0,5,50,100}, //第五種模式
{0,0,5,50}, //第六種模式
{0,0,0,5}, //第七種模式
};


然後在要執行的程式碼裡面,加上這些模式


void loop()
{
 for (varNums=0; varNums<7; varNums++) //從第一種亮燈模式開始,在小於7次之前,每次加一
{
for (ledNums=0;ledNums<4;ledNums++) //從第一個接腳開始,在小於4次之前,每次加一
analogwrite(led[ledNums],brightness[varNums][ledNums]);
//將每個模式下的每個接腳的led狀態讀過一次並輸出
delay(100); //延遲0.1秒
}
}

也可以把另外寫好的函式庫功能給放進來,這些函式庫先寫在某個檔案裏面是,
副檔名是h,比如說****.h,然後在arduino的程式碼一開頭的地方,寫上#include <****.h>就可以了




2018年12月20日 星期四

Tone

為了讓OTTO發出不同的聲音,想要用無源蜂鳴器發出音樂
找到了將MIDI轉換成TONE程式碼的網站

先到底下網站抓midi檔
https://musescore.com/dashboard

然後到底下網站,將midi檔轉成arduino的tone函數用的程式碼
https://extramaster.net/tools/midiToArduino/

2018年12月19日 星期三

藍芽HC-05跟HC-06

會想使用藍芽,是因為要自己安裝OTTO,一開始買了《超圖解Arduino 互動設計入門》,但還是看不懂,還好作者有繼續補充,在參考底下說明之後,大概有了一些了解
https://swf.com.tw/?p=693

連線方式參考底下
https://swf.com.tw/?p=712


HC-06比較簡單,通電之後,只要不配對,就是AT MODE,

但是,HC-05就比較麻煩,要先讓KEY腳位通電之後,才可以送電給藍芽模組,所以有些已經焊好底板的模組,會拉一個按鈕在底板上,只要一直按著按鈕,再通電,然後放掉,就可以進入AT MODE去做設定了。

可是,外觀不知道怎麼判斷

注意,有些HC-06模組的AT指令輸入方式跟HC-05一樣,其實,在測試幾個模組之後,發現對岸的商品真的,嗯,變化多端,因為有的指令甚至是綜合兩種模式,有機會在一一列出來。

HC-05的接線跟Arduino的程式可以參考底下文章
https://www.instructables.com/id/Modify-The-HC-05-Bluetooth-Module-Defaults-Using-A/

接線方式
HC-05 GND --- Arduino GND Pin
HC-05 VCC (5V) --- Arduino 5V,  3.3V比較安全 
HC-05 TX --- Arduino Pin 10 (soft RX)
HC-05 RX --- Arduino Pin11 (soft TX)
HC-05 Key或EN (PIN 34) --- Arduino Pin 9

程式碼,底下所謂的"再接電"指的是手動,先不對藍芽通電,再手動接上去
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(10, 11); // RX | TX

void setup()
{
  pinMode(9, OUTPUT);  // 先接電HC-05 pin 34 (key) ,再接電給藍芽模組
  digitalWrite(9, HIGH);
  Serial.begin(9600);
  Serial.println("Enter AT commands:");
  BTSerial.begin(38400);  // HC-05 default speed in AT command more
}

void loop()
{

  // Keep reading from HC-05 and send to Arduino Serial Monitor
  if (BTSerial.available())
    Serial.write(BTSerial.read());

  // Keep reading from Arduino Serial Monitor and send to HC-05
  if (Serial.available())
    BTSerial.write(Serial.read());
}

實際要連線時卻有遇到問題,可以從下圖看到一開始是失敗的,ERROR兩次之後才成功,找不到原因,而且幾乎每次都這樣。


輸入AT COMMAND,操作可以參考底下這一篇
https://home.gamer.com.tw/creationDetail.php?sn=3905171

底下的設定內容是以OTTO當例子
設定名稱:"AT+NAME=Zowi"
設定密碼:"AT+PSWD=1234"
設定速率:"AT+UART=115200,1,0"


在我買到的模組裡面,還有一種設定密碼的方法,AT+PIN1234:將連線密碼換為「1234」



底下是從購買模組的網站抓來的內容。

HC-05蓝牙转串口适配器模块组 CSR主从一体51单片机

            
产品介绍:
绝对原厂,支持主从一体,可用AT命令切换主从。
资料:http://pan.baidu.com/s/1nuOjQel
【产品系列命名规则介绍】:本公司蓝牙核心模块产品有:
HC-05是主从一体化的蓝牙串口模块,主从可指令切换,指令丰富齐全(供电电压 3.3V~3.6V)
HC-06是主从一体化的蓝牙串口模块,主从可指令切换,指令少于HC-05,使用简单。(供电电压 3.3V~3.6V)
主机:用来搜索从设备,不能被其他设备搜索。(带白点的蓝牙模块)
从机:用来被搜索的设备,不能主动搜索其他设备。
主从连上以后就相当于一根串口线使用,这个时候就不分主从,也就是透传模式。
【本模块可设置为主机或从机,主机能和从机配对通信,从机与从机之间或主机与主机之间不能通信,从机能和电脑、手机等的蓝牙配对通信,购买时默认为从机】
【注:HC-05主机可以和06从机互相配对】
1、 采用CSR主流蓝牙芯片,蓝牙V2.0协议标准。
2、模块供电电压:3.3V~3.6V。
3、 默认参数:波特率 9600、配对码 1234、工作模式 从机。
4、 核心模块尺寸大小为:27mm x 13 mm x 2mm。
5、 工作电流:配对中:30~40mA   配对完毕未通信:2~8Ma    通信中:8mA   无休眠。
6、 通讯距离:空旷条件下10M,正常使用环境  8M左右。
7、 用于GPS导航系统,水电煤气抄表系统,工业现场采控系统,可以与蓝牙笔记本电脑、电脑加蓝牙适配器、PDA等设备进行无缝连接。
8、可以对STC单片机无线升级和下载程序。
凡带有蓝牙功能的产品必须通过BQB认证,否则该产品就会被蓝牙技术联盟(BluetoothSpecialInterest Group, 简称SIG) 视为侵权。具有BQB认证的蓝牙产品更有利于出口到海外市场!不管是拿来研发或是代销都有质量保证!
 引  脚名称  说明
 1
     TX            模块串口发送脚(TTL电平,不能直接接RS232电平),可直接接单片机的RX
 2 RX 模块串口接收脚(TTL电平,不能直接接RS232电平),可直接接单片机的TX
 12 VCC 电源3.3V
 13 GND 地
 32 LED 配对状态输出显示
 34 KEY 用于进入AT状态,高电平有效(悬空默认为低电平)
模块进入AT指令有两种方法
1:在模块上电之前(也可以同时),把KEY脚设置为高电平(或接VCC),然后再对模块上电。此时LED慢闪(2S一次),模块进入AT状态,波特率固定为38400.
2:在模块上电的时候,把KEY脚设置为低电平(或接GND),此时LED快闪(1S两次),然后再把KEY脚设置为高电平(或接VCC),模块也会进入AT指令,但是LED依旧快闪,此时波特率为默认波特率9600.
电脑与单片机数据传输
下图中的USB-TTL参数架为广州汇承最新研发的参数架HC-USB-P,专门为HC蓝牙系列产品量身定做功能强大的参数架。客户可以用该参数架对模块进行更改参数和检测,大大方便了客户使用蓝牙模块过程中遇到的各种问题。
产品特性:
1、led引脚指示蓝牙连接状态,输出脉冲表示没有蓝牙连接,输出高表示蓝牙已连接并打开了端口
2、电源电压3.3V,未配对时电流约30mA,配对后约8mA,绝对禁止接反电源!电源绝对禁止超过4.2V!
3、接口电平3.3V,可以直接连接各种单片机(51,AVR,PIC,ARM,MSP430等),5V单片机最好串联一个1K电阻再与模块直接连接,无需MAX232也不能经过MAX232!
4、空旷地有效距离10米,超过10米也是可能的,但不对此距离的连接质量做保证
5、配对以后当全双工串口使用,无需了解任何蓝牙协议,但仅支持8位数据位、1位停止位、无奇偶校验的通信格式,这也是最常用的通信格式,不支持其他格式。
6、在未建立蓝牙连接时支持通过AT指令设置波特率、名称、配对密码,设置的参数掉电保存。蓝牙连接以后自动切换到透传模式
7、体积小巧(2.7cm*1.3cm),工厂贴片生产,保证贴片质量。
8、该链接为从机,从机能与各种带蓝牙功能的电脑、蓝牙主机、大部分带蓝牙的手机、PDA、PSP等智能终端配对,从机之间不能配对
AT指令集
HC-05嵌入式蓝牙串口通讯模块(以下简称模块)具有两种工作模式:命令响应工作模式和自动连接工作模式,在自动连接工作模式下模块又可分为主(Master)、从(Slave)和回环(Loopback)三种工作角色。当模块处于自动连接工作模式时,将自动根据事先设定的方式连接的数据传输;当模块处于命令响应工作模式时能执行下述所有AT命令,用户可向模块发送各种    AT  指令,为模块设定控制参数或发布控制命令。通过控制模块外部引脚(PIO11)输入电平,可以实现模块工作状态的动态转换。
串口模块用到的引脚定义:
1、PIO8连接LED,指示模块工作状态,模块上电后闪烁,不同的状态闪烁间隔不同。
2、PIO9连接LED,指示模块连接成功,蓝牙串口匹配连接成功后,LED长亮。
3、PIO11模块状态切换脚,高电平-->AT命令响应工作状态,低电平或悬空-->蓝牙常规工作状态。
4、模块上已带有复位电路,重新上电即完成复位。
设置为主模块的步骤:
1、PIO11一直置高,然后对模块上电。
2、上电以后,模块进入AT命令响应状态。
3、超级终端或其他串口工具,设置波特率38400,数据位8位,停止位1位,无校验位,无流控制。
4、串口发送字符“AT+ROLE=1\r\n”,成功返回“OK\r\n”,其中\r\n为回车换行。
5、PIO置低,重新上电,模块为主模块,自动搜索从模块,建立连接。


藍芽CC2541


低待机功耗 90uA~400uA
远连接距离 100英尺/60米
快反应速度 0.4秒
安卓、苹果、PC、MAC全通用.
收发无字节限制,最高可达3K Bytes/秒
不需要做MFI
IOS系统支持.
Android 4.3系统完美支持.
主从一体模块,具有透传,远控,PIO采集三种功能,通过AT指令集进行切换和设置.
蓝牙串口模块一样,在不改PCB和下位机程序的情况下轻松升级到蓝牙4.0!
蓝牙串口模块,采用TI CC2541,尺寸为28*13*2.3mm

素人組Otto

我最早是到thingiverse的網站抓3D圖檔,
https://www.thingiverse.com/thing:2398231

但是發現底下的網站還有其他的類型
https://wikifactory.com/+OttoDIY#project

而要找程式碼時,是到雲林SONG去抓的,
https://yunlinsong.blogspot.com/2016/12/arduino-otto.html

因為整個過程紊亂且資訊散落,自己又記不住這麼多,所以寫一篇作為紀錄

要注意的是,藍芽的HC-05跟HC-06設定,會因為買到的模組版本不一樣,連接時的設定也會不一樣,我以為比較簡單的HC-06一直無法穩定連線,反而是HC-05順利成功,因為要進入AT MODE設定,而HC-05跟HC-06進入的方法不一樣,另外早期買的藍牙模組CC41-A跟新版的android無法連線,這些問題就開不同文章記錄。

基本上,想要玩藍芽遙控的OTTO只需要可以連線就好,不管是哪一種規格,只要先設定好連線用的名稱跟密碼就可以,還有一個要注意的是藍牙直接連到RX跟TX,所以想把程式傳送到arduino的時候,需要把藍牙模組拔掉,不然沒辦法順利傳進去。

藍芽的連線設定說明寫在另外一篇,
完成底下設定的內容就好
設定名稱:"AT+NAME=Zowi"
設定密碼:"AT+PSWD=1234"
設定速率:"AT+UART=115200,1,0"


雖然安裝Otto的影片網路上很多,但是大部分就比較簡略,底下這個影片應該是一個素人安裝的,所以比較仔細,不過最好先看完一次,因為他嘗試好幾次才會對,先看完才不會跟著一起嘗試錯誤。
https://www.hackster.io/ottoplus/otto-diy-arduino-bluetooth-robot-easy-to-3d-print-33406c


還有,在做了三隻之後,個人經驗是不用先校正馬達,而是邊安裝邊校正,我是分階段進行,先安裝上股關節的馬達,校正後再把撥片裝上去,接著安裝膝蓋關節的馬達,校正後再把撥片裝上去,如果先校正好再安裝,在過程中可能會動到,安裝撥片上去就不準了。

依據行進方式跟外觀的不同,我分成三種類型,因為寫程式的時候要分清楚
1.兩隻腳
2.兩隻腳跟兩隻手
3.輪胎或履帶

一開始安裝的時候,也是糊里糊塗的,每個程式都不清楚,最後我只有使用底下兩個
OTTO_ServoHome:這是校正馬達用的
OTTO_BT              :這是有藍芽連線功能,測試的時候,好幾個功能不能用,比如MODE

如果不使用藍芽遙控功能,而是要自己編輯動作寫程式的話,我是使用mblock (mBlock 3 for PC),

http://www.mblock.cc/mblock-software/

安裝好mBlock之後,要讓它認識otto的功能的話,還要安裝extension裡面的ottodiy,接著把arduino相關的功能都安裝好之後,就可以連線,把程式碼傳過去了
我是看底下的影片才有點概念
https://www.youtube.com/watch?v=6cpj8iwdlck


基本款就是會走跟偵測前方障礙物,雖然還有其他,但是我只看到touch sensor跟麥克風,而RGB LED我就不知道要裝哪裡。

在進化一點,就有表情了,一樣都可以在底下網站找到各種外型
https://wikifactory.com/+OttoDIY#project


拆解OTTO的動作
除了預設好的動作之後,因為自己也想試試看有沒有其他動作,所以就繼續參考雲林SONG的說明
https://yunlinsong.blogspot.com/2018/01/otto.html

說實話,對於不是本科系的我看得很吃力,只好按部就班的一個一個寫下來
OTTO_BT是用藍芽控制otto的動作,裡面預設20種,在接收到藍芽指令之後,做出相對應的動作,就是底下這段程式碼
void move(int moveId){
  bool manualMode = false;

  switch (moveId) {

第17個的動作是
    case 17: //M 17 500
      Otto.shakeLeg(1,T,1);

呼叫了shakeleg函式,帶有三個參數,於是搜尋otto.cpp,發現了底下的程式碼

//---------------------------------------------------------
//-- Otto gait: Shake a leg
//--  Parameters:
//--    steps: Number of shakes
//--    T: Period of one shake
//--    dir: RIGHT=Right leg LEFT=Left leg
//---------------------------------------------------------
void Otto::shakeLeg (int steps,int T,int dir){

  //This variable change the amount of shakes
  int numberLegMoves=2;

  //Parameters of all the movements. Default: Right leg
  int shake_leg1[4]={90, 90, 58, 35}; 
  int shake_leg2[4]={90, 90, 58, 120};
  int shake_leg3[4]={90, 90, 58, 60};
  int homes[4]={90, 90, 90, 90};

  //Changes in the parameters if left leg is chosen
  if(dir==-1)   
  {
    shake_leg1[2]=180-35;
    shake_leg1[3]=180-58;
    shake_leg2[2]=180-120;
    shake_leg2[3]=180-58;
    shake_leg3[2]=180-60;
    shake_leg3[3]=180-58;
  }

  //Time of the bend movement. Fixed parameter to avoid falls
  int T2=1000; 
  //Time of one shake, constrained in order to avoid movements too fast.         
  T=T-T2;
  T=max(T,200*numberLegMoves);

  for (int j=0; j<steps;j++)
  {
  //Bend movement
  _moveServos(T2/2,shake_leg1);
  _moveServos(T2/2,shake_leg2);

    //Shake movement
    for (int i=0;i<numberLegMoves;i++)
    {
    _moveServos(T/(2*numberLegMoves),shake_leg3);
    _moveServos(T/(2*numberLegMoves),shake_leg2);
    }
    _moveServos(500,homes); //Return to home position
  }

  delay(T);
}

本來想試著照樣自己做個動作,竟然出現
compilation terminated.
編譯時發生錯誤

In file included from Otto.cpp:10:0:
Otto.h:6:20: fatal error: EEPROM.h: No such file or directory
 #include <EEPROM.h>

但是,我明明沒有看到include otto.h,而且在寫otto程式的時候,也不會出現錯誤,在交叉比對之下,發現mblock並沒有把EEPROM 給include進來,只好打開arduino IDE自己編輯。

後來,把電腦關掉重開就好了。

因為分解動作的程式碼對我來說還是很困難,所以我自己寫號碼上去,一個一個觀察

土法煉鋼的寫出一個抖右腳的動作。