智能車復工日記【1】——菜單索引回顧

解析結構元素

菜單構建的基本單元是遊標和目錄數組。
遊標具有4個移動屬性的結構體:上、下、進入、退出

typedef struct
{
    uint8 current;
    uint8 up;
    uint8 down;
//    uint8 left;           //左右鍵控制參數值的增大或者減小,這裏我們不將它納入菜單屬性
//    uint8 right;  
    uint8 enter;
    uint8 back;
    void (*current_operation)();
}key_table;

通過改變遊標,到達對應索引值的目錄
遊標定義爲全局變量。

uint8 func_index=0;

處於不同索引值,運行對應的函數(oled顯示函數或是運行函數,一般來說調參函數將依附於顯示函數)

void (*current_operation_index)();

下面是索引目錄:
142以後可能會費用,在此不做解釋
索引函數,前五個值的含義:【當前目錄索引】、【遊標上移指向的目錄索引】、【遊標下移指向的目錄索引】、【遊標進入指向的目錄索引】、【遊標退出指向的目錄索引】

key_table table[174]=
{
    
    {0,141,1,2,0,(*fun0)},// 第1層 【camera】
    {1,0,19,4,1,(*fun1)},// 第1層 【machine】
    {2,32,3,8,0,(*fun2)},// 第2層 【camera】->【live picture】
    {3,2,30,9,0,(*fun3)},// 第2層 【camera】->【tuning】       調參
    {4,29,5,4,1,(*fun4)},// 第2層 【machine】->【setpoint】(sPID)
    {5,4,6,5,1,(*fun5)},// 第2層【machine】->【KP】(sPID)
    {6,5,7,6,1,(*fun6)},// 第2層【machine】->【KI】(sPID)
    {7,6,15,7,1,(*fun7)},// 第2層【machine】->【KD】(sPID)
    {8,8,8,8,2,(*fun8)},// 第3層【camera】->【live picture】的具體實現
    {9,17,10,9,3,(*fun9)},// 第3層【camera】->【tuning】->【AUTO_EXP】
    {10,9,11,10,3,(*fun10)},// 第3層【camera】->【tuning】->【EXP_TIME】
    {11,10,12,11,3,(*fun11)},// 第3層【camera】->【tuning】->【FPS】
    {12,12,13,12,3,(*fun12)},// 第3層【camera】->【tuning】->【LR_OFFSET】
    {13,12,14,13,3,(*fun13)},// 第3層【camera】->【tuning】->【UD_OFFSET】
    {14,13,17,14,3,(*fun14)},// 第3層【camera】->【tuning】->【GAIN】
    {15,7,16,15,1,(*fun15)},// 第2層 【machine】->【setpoint】(wPID)
    {16,15,20,16,1,(*fun16)},// 第2層【machine】->【KP】(wPID)
    {17,14,9,18,3,(*fun17)},// 第3層【camera】->【tuning】->【Threshold_mode】
    {18,18,18,18,17,(*fun18)},  //第4層【camera】->【tuning】->若【Threshold_mode】爲人爲修改模式,可以進入到閾值賦值界面
    {19,1,34,19,19,(*fun19)},     //調節補線的模式【mode1】:最小二乘法補線【mode2】:利用左右線偏移量補線 【mode3】:利用上一行左右線補線(廢棄!!!!)
    {20,16,21,20,1,(*fun20)},// 第2層【machine】->【KI】(wPID)
    {21,20,22,21,1,(*fun21)},// 第2層【machine】->【KD】(wPID)
    {22,21,23,22,1,(*fun22)},// 第2層【machine】->max_hight
    {23,22,24,23,1,(*fun23)},// 第2層【machine】->max_low
    {24,23,25,24,1,(*fun24)},// 第2層【machine】->max_middle
    {25,24,26,25,1,(*fun25)},// 第2層【machine】->【setpoint】(small_wPID)
    {26,25,27,26,1,(*fun26)},// 第2層【machine】->【KP】(small_wPID)
    {27,26,28,27,1,(*fun27)},// 第2層【machine】->【KI】(small_wPID)
    {28,27,29,28,1,(*fun28)},// 第2層【machine】->【KD】(small_wPID)
    {29,28,4,29,1,(*fun29)},// 第2層【machine】->k調節差速
    {30,3,32,31,0,(*fun30)},// 第2層 【camera】->【read picture】
    {31,31,31,31,30,(*fun31)},// 第2層 【camera】->【read picture】具體實現
    {32,30,2,33,0,(*fun32)},// 第2層 【camera】->【load picture】
    {33,33,33,33,32,(*fun33)},// 第2層 【camera】->【load picture】具體實現
    {34,19,37,35,34,(*fun34)},// 第1層 【wenhao】
    {35,47,36,35,34,(*fun35)},// 第2層 【wenhao】【KP】
    {36,35,47,36,34,(*fun36)},// 第2層 【wenhao】【KD】
    {37,34,40,38,37,(*fun37)},//第1層 【middle s】
    {38,46,39,38,37,(*fun38)},//第2層 【middle s】【KP】
    {39,38,46,39,37,(*fun39)},//第2層 【middle s】【KD】
    {40,37,48,41,40,(*fun40)},//第1層 【coder】
    {41,51,42,41,40,(*fun41)},//第2層 【coder】【LP】
    {42,41,43,42,40,(*fun42)},//第2層 【coder】->【LI】
    {43,42,44,43,40,(*fun43)},//第2層 【coder】【LD】
    {44,43,45,44,40,(*fun44)},//第2層 【coder】【RP】
    {45,44,51,45,40,(*fun45)},//第2層 【coder】->【RI】
    //{46,45,41,46,40,(*fun46)},//第2層 【coder】【RD】
    {46,39,38,46,37,(*fun46)},//第2層 【middle s】【目標值】
    {47,36,35,47,34,(*fun47)},//第2層 【wenhao】【目標值】
    {48,40,52,49,48,(*fun48)},//第1層 【flash】
    {49,50,50,49,48,(*fun49)},//第1層 【flash】-【if save】   //左右按鍵控制yes or no
    {50,49,49,50,48,(*fun50)},//第1層 【flash】-【if read】
    {51,45,41,51,40,(*fun51)},//第2層 【coder】->【RD】
    {52,48,59,53,52,(*fun52)},//第1層 【huandao50】舵機pd   //入環和在環和出環
    {53,69,54,53,52,(*fun53)},//第2層 【入環 speed】(50)   
    {54,53,55,54,52,(*fun54)},//第2層 【在環 speed】(50)
    {55,54,56,55,52,(*fun55)},//第2層 【出環 speed】(50)
    {56,55,57,56,52,(*fun56)},//第2層 【入環】舵機p(50)
    {57,56,58,57,52,(*fun57)},//第2層 【入環】舵機d(50)
    {58,57,67,58,52,(*fun58)},//第2層 【在環】舵機p(50)
    {59,52,70,60,59,(*fun59)},//第1層 【打腳行】
    {60,66,61,60,59,(*fun60)},//第2層 【打腳行-直到】
    {61,60,62,61,59,(*fun61)},//第2層 【打腳行-彎道】
    {62,61,63,62,59,(*fun62)},//第2層 【打腳行-小s】
    {63,62,64,63,59,(*fun63)},//第2層 【打腳行-中s】
    {64,63,65,64,59,(*fun64)},//第2層 【打腳行-環島-入環】
    {65,64,66,65,59,(*fun65)},//第2層 【打腳行-環島-在環】
    {66,65,60,66,59,(*fun66)},//第2層 【打腳行-環島-出環】
    {67,58,68,67,52,(*fun67)},//第2層 【在環】舵機d(50)
    {68,67,69,68,52,(*fun68)},//第2層 【出環】舵機p(50)
    {69,68,53,69,52,(*fun69)},//第2層 【出環】舵機d (50)
    {70,59,71,75,70,(*fun70)},//第1層 【huandao_60】舵機pd   //入環和在環和出環
    {71,70,72,84,71,(*fun71)},//第1層 【huandao_70】舵機pd   //入環和在環和出環
    {72,71,73,93,72,(*fun72)},//第1層 【huandao_80】舵機pd   //入環和在環和出環
    {73,72,74,102,73,(*fun73)},//第1層 【huandao_90】舵機pd   //入環和在環和出環
    {74,73,120,111,74,(*fun74)},//第1層 【huandao_100】舵機pd   //入環和在環和出環
    {75,83,76,75,70,(*fun75)},//第2層 【入環 speed】 (60)  
    {76,75,77,76,70,(*fun76)},//第2層 【在環 speed】(60)
    {77,76,78,77,70,(*fun77)},//第2層 【出環 speed】(60)
    {78,77,79,78,70,(*fun78)},//第2層 【入環】舵機p (60)
    {79,78,80,79,70,(*fun79)},//第2層 【入環】舵機d (60)
    {80,79,81,80,70,(*fun80)},//第2層 【在環】舵機p (60)
    {81,80,82,81,70,(*fun81)},//第2層 【在環】舵機d (60)
    {82,81,83,82,70,(*fun82)},//第2層 【出環】舵機p (60)
    {83,82,75,83,70,(*fun83)},//第2層 【出環】舵機d (60)
    {84,92,85,84,71,(*fun84)},//第2層 【入環 speed】(70)  
    {85,84,86,85,71,(*fun85)},//第2層 【在環 speed】(70)
    {86,85,87,86,71,(*fun86)},//第2層 【出環 speed】(70)
    {87,86,88,87,71,(*fun87)},//第2層 【入環】舵機p (70)
    {88,87,89,88,71,(*fun88)},//第2層 【入環】舵機d (70)
    {89,88,90,89,71,(*fun89)},//第2層 【在環】舵機p (70)
    {90,89,91,90,71,(*fun90)},//第2層 【在環】舵機d (70)
    {91,90,92,91,71,(*fun91)},//第2層 【出環】舵機p (70)
    {92,91,84,92,71,(*fun92)},//第2層 【出環】舵機d (70)
    {93,102,94,93,72,(*fun93)},//第2層 【入環 speed】(80)  
    {94,93,95,94,72,(*fun94)},//第2層 【在環 speed】(80)
    {95,94,96,95,72,(*fun95)},//第2層 【出環 speed】(80)
    {96,95,97,96,72,(*fun96)},//第2層 【入環】舵機p (80)
    {97,96,98,97,72,(*fun97)},//第2層 【入環】舵機d (80)
    {98,97,99,98,72,(*fun98)},//第2層 【在環】舵機p (80)
    {99,98,100,99,72,(*fun99)},//第2層 【在環】舵機d (80)
    {100,99,101,100,72,(*fun100)},//第2層 【出環】舵機p (80)
    {101,100,93,101,72,(*fun101)},//第2層 【出環】舵機d (80)
    {102,110,103,102,73,(*fun102)},//第2層 【入環 speed】(90)  
    {103,102,104,103,73,(*fun103)},//第2層 【在環 speed】(90)
    {104,103,105,104,73,(*fun104)},//第2層 【出環 speed】(90)
    {105,104,106,105,73,(*fun105)},//第2層 【入環】舵機p (90)
    {106,105,107,106,73,(*fun106)},//第2層 【入環】舵機d (90)
    {107,106,108,107,73,(*fun107)},//第2層 【在環】舵機p (90)
    {108,107,109,108,73,(*fun108)},//第2層 【在環】舵機d (90)
    {109,108,110,109,73,(*fun109)},//第2層 【出環】舵機p (90)
    {110,109,102,110,73,(*fun110)},//第2層 【出環】舵機d (90)
    {111,119,112,111,74,(*fun111)},//第2層 【入環 speed】(100)  
    {112,111,113,112,74,(*fun112)},//第2層 【在環 speed】(100)
    {113,112,114,113,74,(*fun113)},//第2層 【出環 speed】(100)
    {114,113,115,114,74,(*fun114)},//第2層 【入環】舵機p (100)
    {115,114,116,115,74,(*fun115)},//第2層 【入環】舵機d (100)
    {116,115,117,116,74,(*fun116)},//第2層 【在環】舵機p (100)
    {117,116,118,117,74,(*fun117)},//第2層 【在環】舵機d (100)
    {118,117,119,118,74,(*fun118)},//第2層 【出環】舵機p (100)
    {119,118,111,119,74,(*fun119)},//第2層 【出環】舵機d (100)
    {120,74,129,121,120,(*fun120)},//第1層 【選擇環島1-8的大小】
    {121,128,122,121,120,(*fun121)},//第2層 【選擇環島1的大小】
    {122,121,123,122,120,(*fun122)},//第2層 【選擇環島2的大小】
    {123,122,124,123,120,(*fun123)},//第2層 【選擇環島3的大小】
    {124,123,125,124,120,(*fun124)},//第2層 【選擇環島4的大小】
    {125,124,126,125,120,(*fun125)},//第2層 【選擇環島5的大小】
    {126,125,127,126,120,(*fun126)},//第2層 【選擇環島6的大小】
    {127,126,128,127,120,(*fun127)},//第2層 【選擇環島7的大小】
    {128,127,121,128,120,(*fun128)},//第2層 【選擇環島8的大小】
    {129,120,138,130,129,(*fun129)},//第1層 【選擇差速的大小】
    {130,137,131,130,129,(*fun130)},//第2層 【小S差速】
    {131,130,132,131,129,(*fun131)},//第2層 【中S差速】
    {132,131,133,132,129,(*fun132)},//第2層 【huan50差速】
    {133,132,134,133,129,(*fun133)},//第2層 【huan60差速】
    {134,133,135,134,129,(*fun134)},//第2層 【huan70差速】
    {135,134,136,135,129,(*fun135)},//第2層 【huan80差速】
    {136,135,137,136,129,(*fun136)},//第2層 【huan90差速】
    {137,136,130,137,129,(*fun137)},//第2層 【huan100差速】
    {138,129,139,142,138,(*fun138)},//第1層 【deltaP_max】
    {139,138,140,150,139,(*fun139)},//第1層 【deltaP_min】
    {140,139,141,158,140,(*fun140)},//第1層 【deltaD_max】
    {141,140,0,166,141,(*fun141)},//第1層 【deltaD_max】
    {142,149,143,142,138,(*fun142)},//第2層 【0】
    {143,142,144,143,138,(*fun143)},//第2層 【1】
    {144,143,145,144,138,(*fun144)},//第2層 【2】
    {145,144,146,145,138,(*fun145)},//第2層 【3】
    {146,145,147,146,138,(*fun146)},//第2層 【4】
    {147,146,148,147,138,(*fun147)},//第2層 【5】
    {148,147,149,148,138,(*fun148)},//第2層 【6】
    {149,148,142,149,138,(*fun149)},//第2層 【7】
    {150,157,151,150,139,(*fun150)},//第2層 【0】
    {151,150,152,151,139,(*fun151)},//第2層 【1】
    {152,151,153,152,139,(*fun152)},//第2層 【2】
    {153,152,154,153,139,(*fun153)},//第2層 【3】
    {154,153,155,154,139,(*fun154)},//第2層 【4】
    {155,154,156,155,139,(*fun155)},//第2層 【5】
    {156,155,157,156,139,(*fun156)},//第2層 【6】
    {157,156,150,157,139,(*fun157)},//第2層 【7】
    {158,165,159,158,140,(*fun158)},//第2層 【0】
    {159,158,160,159,140,(*fun159)},//第2層 【1】
    {160,159,161,160,140,(*fun160)},//第2層 【2】
    {161,160,162,161,140,(*fun161)},//第2層 【3】
    {162,161,163,162,140,(*fun162)},//第2層 【4】
    {163,162,164,163,140,(*fun163)},//第2層 【5】
    {164,163,165,164,140,(*fun164)},//第2層 【6】
    {165,164,158,165,140,(*fun165)},//第2層 【7】
    {166,173,167,166,141,(*fun166)},//第2層 【0】
    {167,166,168,167,141,(*fun167)},//第2層 【1】
    {168,167,169,168,141,(*fun168)},//第2層 【2】
    {169,168,170,169,141,(*fun169)},//第2層 【3】
    {170,169,171,170,141,(*fun170)},//第2層 【4】
    {171,170,172,171,141,(*fun171)},//第2層 【5】
    {172,171,173,172,141,(*fun172)},//第2層 【6】
    {173,172,166,173,141,(*fun173)},//第2層 【7】

};

菜單圖示

描述

菜單缺點:

1、當有些目錄沒有用處想刪除時,不易刪除,需要改動所有的索引值,因爲一旦遊標指向不存在的索引值將會導致棧溢出.
2、框架一旦定下,修改及其困難,在目錄逐漸擴大時,這種弊端體現地越發明顯。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章