文件名:_BruGi 第一部分(頭文件引用知押、初始化)

這個(gè)文件是這個(gè)項(xiàng)目的主文件,它包含了setup()鹃骂、loop()這兩個(gè)arduino的核心函數(shù)台盯。下面逐行分析:

頭文件引用:


首先是頭文件的引用,通過(guò)這里能看到這個(gè)程序中各個(gè)文件在項(xiàng)目中起到的作用畏线。

#include <EEPROM.h> //用來(lái)處理Arduino的EEPROM的寫入和讀取静盅,這是Arduino的官方庫(kù)

#include <Wire.h>//用來(lái)處理I2C通信,這是Arduino的官方庫(kù)

#include#<arv/pgmspace.h>//用來(lái)處理往FLASH(應(yīng)該也是指的EEPROM吧?)中寫入數(shù)據(jù)的

#include "definitions.h"//該文件里定義了對(duì)這個(gè)項(xiàng)目一些可設(shè)置參數(shù)蒿叠。例如:驅(qū)動(dòng)電機(jī)的PWM頻率明垢,PID的相關(guān)參數(shù),遠(yuǎn)程遙控的數(shù)據(jù)格式市咽,I2C的通訊頻率痊银,PWM生成端口選用等等。

#include "MPU6050.h"//不用說(shuō)了施绎,肯定是用來(lái)操作陀螺儀和加速度計(jì)MPU6050數(shù)據(jù)的溯革,第三方庫(kù)。

#include "SerialCommand.h"http://這個(gè)是用來(lái)處理Arduino IDE的串口通訊實(shí)時(shí)發(fā)送的命令的谷醉,應(yīng)該可以用來(lái)通過(guò)電腦的串口來(lái)對(duì)BruGI進(jìn)行調(diào)試和設(shè)置致稀,第三方庫(kù)

#include "EEPROMAnything.h"//同樣是用來(lái)處理EEPROM的讀寫的,里面定義了兩個(gè)函數(shù)俱尼,里面調(diào)用了之前引用的EEPROM.H中的定義的函數(shù)抖单,EEPROM.write()和EEPROM.read(),這兩個(gè)函數(shù)只能讀取一個(gè)地址遇八,而這個(gè)頭文件中重新定義兩個(gè)新函數(shù)矛绘,可以讀寫任意長(zhǎng)度的EEPROM內(nèi)容。

#include "PinChangeInt.h"http://用來(lái)快速響應(yīng)處理外部中斷的第三方庫(kù)文件押蚤,這是庫(kù)文件的介紹:點(diǎn)這里

#include "Timer1.h"//跟計(jì)時(shí)和延時(shí)功能相關(guān)函數(shù)

#include "Trace.h"http://用來(lái)通過(guò)串口實(shí)時(shí)顯示各種跟蹤數(shù)據(jù)的各個(gè)函數(shù)

#include "variables.h"//定義配置參數(shù)的結(jié)構(gòu)體蔑歌,定義了默認(rèn)參數(shù)設(shè)置羹应,還有用于電機(jī)驅(qū)動(dòng)和MPU6050數(shù)據(jù)處理揽碘、遠(yuǎn)程控制等各種變量

#include "fastMathRoutines.h"? ? // orientationRoutines.h中用到的一些快速計(jì)算函數(shù)

#include "orientationRoutines.h"? // 從加速度計(jì)中計(jì)算姿態(tài)

#include "RCdecode.h"? ? ? ? ? ? // 遙控器信號(hào)解碼,實(shí)現(xiàn)通過(guò)輸入伺服信號(hào)來(lái)移動(dòng)攝像機(jī)

#include "BLcontroller.h"? ? ? ? // 電機(jī)的驅(qū)動(dòng)功能和計(jì)時(shí)器的設(shè)置

#include "SerialCom.h"? ? ? ? ? ? // 利用串口進(jìn)行配置和通訊的通訊協(xié)議


MPU6050 mpu;? ? ? ? ? ? // 創(chuàng)建一個(gè)MPU6050對(duì)象

SerialCommand sCmd;? ? // 創(chuàng)建一個(gè)SerialCommand對(duì)象

初始化函數(shù)


void setup()

{

// just for debugging

#ifdef STACKHEAPCHECK_ENABLE

stackCheck();

heapCheck();

#endif//堆棧檢查园匹?具體的功能不太清楚雳刺,應(yīng)該是檢查堆棧的大小和首尾地址。但是哪里用到堆棧裸违?還不清楚掖桦,uint32_t stackTop = 0xffffffff;uint32_t stackBottom = 0;uint32_t heapTop = 0;uint32_t heapBottom = 0xffffffff;用到的時(shí)候繼續(xù)分析,原注釋是用來(lái)debug的供汛。

initControlPanelPins();//用來(lái)初始化控制面板針腳枪汪,初始化了ST_LED0(4引腳),ST_LED1(7引腳)的引腳模式為輸出模式怔昨,PB_PIN(12引腳)的引腳模式為上拉輸入

LEDPIN_PINMODE//把8號(hào)引腳設(shè)置為輸出模式

CH2_PINMODE//把4號(hào)引腳設(shè)置為輸出模式雀久,條件是未使用控制面板,否則什么都執(zhí)行

CH3_PINMODE//把7號(hào)引腳設(shè)置為輸出模式趁舀,條件是為使用控制面板赖捌,否則是什么都執(zhí)行

// Start Serial Port

Serial.begin(115200);//設(shè)定串口通訊速率為115200

// send Version Number and welcome message

printMessage(MSG_INFO, F("BruGi ready"));//這個(gè)函數(shù)是一個(gè)消息打印函數(shù),第一個(gè)參數(shù)代表消息類型(除了通知類型之外還有警告矮烹、錯(cuò)誤越庇、版本等類型)罩锐,后面代表要繼續(xù)打印的字符串

printMessage(MSG_VERSION, F(""));//打印當(dāng)前版本號(hào)

// Set Serial Protocol Commands

setSerialProtocol();//這是用來(lái)設(shè)置串口命令,一共設(shè)置了sd卤唉、we涩惑、re、par桑驱、gc境氢、ac、sbv碰纬、ver萍聊、he等這個(gè)命令,具體的使用方法還要參考SerialCommand庫(kù)文件的說(shuō)明

// Init BL Controller

initBlController();//設(shè)置用來(lái)控制電機(jī)的3悦析、5寿桨、6、9强戴、10亭螟、11引腳為OUTPUT模式,根據(jù)配置文件中配置pwm的頻率來(lái)對(duì)計(jì)時(shí)器進(jìn)行配置骑歹,分別是8KHz预烙、32KHz、4KHz三種道媚。開啟timer1的中斷扁掸,關(guān)閉arduino標(biāo)準(zhǔn)的計(jì)時(shí)器中斷,并開啟timer1的中斷用來(lái)電機(jī)控制

// Init Sinus Arrays

initMotorStuff();//關(guān)閉中斷最域,計(jì)算正弦曲線數(shù)組谴分,開啟中斷

// switch off PWM Power

motorPowerOff();//關(guān)閉0號(hào)電機(jī)和1號(hào)電機(jī)的PWM輸出的波形

// Read Config, initialize if version does not match or CRC fails

config.configSet = readConfigSetNumberFromEEPROM(); // get set number from EEPROM

readEEPROM();

if (config.versEEPROM != VERSION_EEPROM)

{

printMessage(MSG_WARNING, F("EEPROM version mismatch, initialized to default"));

setDefaultParameters();

writeEEPROM();

}//這幾行是從EEPROM中讀取EEPROM版本號(hào),如果不對(duì)則按照程序中定義的默認(rèn)配置來(lái)進(jìn)行參數(shù)設(shè)置镀脂,并將默認(rèn)配置寫回EEPROM中

// Start I2C and Configure Frequency

Wire.begin();

TWSR = 0;? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? // no prescaler => prescaler = 1

TWBR = ((16000000L / I2C_SPEED) - 16) / 2; // change the I2C clock rate

TWCR = 1<<TWEN;//這幾行是開啟I2C通訊牺蹄,設(shè)置I2C的通訊時(shí)鐘頻率

// Initialize MPU

initResolutionDevider();//設(shè)定MPU的單位量程

// init I2C and MPU6050

if (initI2C()) {

// Init IMU variables

initIMU();//如果I2C初始化成功,初始化IMU

// Gyro Offset calibration

if (config.gyroCal) {

gyroCalibrateCmd();//陀螺儀校準(zhǔn)

}

} else {

gimState = GIM_ERROR;

}

// set sensor orientation

initSensorOrientation();//初始化傳感器方位

// Init PIDs parameters

initPIDs();//初始化PID參數(shù)

// init RC variables

initRC();//初始化遙控參數(shù)

// Init RC-Input

initRCPins();//初始化遙控輸入

LEDPIN_OFF//熄滅8號(hào)引腳的LED

CH2_OFF//4號(hào)引腳輸出設(shè)置為low

CH3_OFF//7號(hào)引腳輸出設(shè)置為low

}


水平有限薄翅,歡迎大家找出錯(cuò)誤一同完善沙兰。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市翘魄,隨后出現(xiàn)的幾起案子鼎天,更是在濱河造成了極大的恐慌,老刑警劉巖熟丸,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件训措,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)绩鸣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門怀大,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人呀闻,你說(shuō)我怎么就攤上這事化借。” “怎么了捡多?”我有些...
    開封第一講書人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵蓖康,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我垒手,道長(zhǎng)蒜焊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任科贬,我火速辦了婚禮泳梆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘榜掌。我一直安慰自己优妙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開白布憎账。 她就那樣靜靜地躺著套硼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胞皱。 梳的紋絲不亂的頭發(fā)上邪意,一...
    開封第一講書人閱讀 49,764評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音朴恳,去河邊找鬼抄罕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛于颖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播嚷兔,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼森渐,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了冒晰?” 一聲冷哼從身側(cè)響起同衣,我...
    開封第一講書人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎壶运,沒想到半個(gè)月后耐齐,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年埠况,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耸携。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡辕翰,死狀恐怖夺衍,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情喜命,我是刑警寧澤沟沙,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站壁榕,受9級(jí)特大地震影響矛紫,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜牌里,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一含衔、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧二庵,春花似錦贪染、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至因妙,卻和暖如春痰憎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背攀涵。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工铣耘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人以故。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓蜗细,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親怒详。 傳聞我的和親對(duì)象是個(gè)殘疾皇子炉媒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • Arduino Due有14個(gè)數(shù)字I/O,6個(gè)模擬I/O昆烁,一個(gè)復(fù)位開關(guān)吊骤,一個(gè)ICSP下載口,7-12v電源供電静尼。 ...
    麥牛2013閱讀 3,324評(píng)論 0 8
  • 來(lái)看一下每個(gè)模塊都是干什么的: 官方固件下載: (機(jī)翻簡(jiǎn)單校對(duì), 有些模塊我也不太懂) 中文說(shuō)明 https://...
    Zszen閱讀 22,626評(píng)論 2 54
  • 串口操作 串口操作需要的頭文件 #include /*標(biāo)準(zhǔn)輸入輸出定義*/ #include /*標(biāo)準(zhǔn)函數(shù)庫(kù)定...
    旅行家John閱讀 1,297評(píng)論 0 3
  • "大眾創(chuàng)新 萬(wàn)眾創(chuàng)業(yè)",學(xué)校對(duì)于創(chuàng)客教育日漸重視,熱情高漲,紛紛開始創(chuàng)客教育課程,有條件的打造學(xué)校創(chuàng)客實(shí)驗(yàn)室,不吝...
    少兒創(chuàng)客閱讀 15,161評(píng)論 11 52
  • 淚滴落窗檐白粉,杜宇聲聲催心肝 传泊,柳絲芊芊輕揮臂,向行人挽鸭巴。 無(wú)言獨(dú)憑欄眷细,錦服難御心底寒。夜色如墨染離恨奕扣,燈火闌珊薪鹦。
    水木寧閱讀 269評(píng)論 17 14