2017-04-13 85 views
0

我發瘋。我可以看到沒有理由爲什麼以下不起作用。它總是返回值的地址,而不是值本身。指針不工作返回地址不珍惜

我曾經嘗試都十幾個不同的方式初始化指針和引用指針無濟於事。

初始化和循環

//INIT the Motors 
    //Motor MOTORNAME(PWM_SHIELD_POSITION, POINTER TO PWM SHIELD) 
    Motor LFUpper; 
    Motor* ptr1 = &LFUpper; 
    Motor LFLower; 
    Motor* ptr2 = &LFUpper; 
    Motor RFUpper; 
    Motor* ptr3 = &LFUpper; 
    Motor RFLower; 
    Motor* ptr4 = &RFLower; 
    Motor BRUpper; 
    Motor* ptr5 = &BRUpper 
    Motor BRLower; 
    Motor* ptr6 = &BRLower 
    Motor BLUpper; 
    Motor* ptr7 = &BLUpper 
    Motor BLLower; 
    Motor* ptr8 = &BLLower 


    //Init The Menu System 
    Menu MenuSys(ptr1, ptr2, ptr3, ptr4, ptr5, ptr6, ptr7, ptr8); 


void setup() { 
    // put your setup code here, to run once: 
    Serial.begin(9600); 
    Serial2.begin(9600); 
    Serial.print("HELLO"); 
    ptr1->INIT(FRONT_UPPER_LEFT_MOTOR); 
    ptr1->INIT(FRONT_LOWER_LEFT_MOTOR); 
    ptr1->INIT(FRONT_UPPER_RIGHT_MOTOR); 
    ptr1->INIT(FRONT_LOWER_RIGHT_MOTOR); 
    ptr1->INIT(BACK_UPPER_RIGHT_MOTOR); 
    ptr1->INIT(BACK_LOWER_RIGHT_MOTOR); 
    ptr1->INIT(BACK_UPPER_LEFT_MOTOR); 
    ptr1->INIT(BACK_LOWER_LEFT_MOTOR); 
} 

void loop() { 
    // put your main code here, to run repeatedly: 
    // Poll The Menu For Changes 

    MenuSys.MenuPoll(); 
} 

菜單句柄

Menu::Menu(Motor *LFUpper1, Motor *LFLower1, Motor *RFUpper1, Motor *RFLower1, Motor *RBUpper1, Motor *RBLower1, Motor *LBUpper1, Motor *LBLower1) 
{ 
    LFUpper = LFUpper1; 
    LFLower = LFLower1; 
    RFUpper = RFUpper1; 
    RFLower = RFLower1; 
    LBUpper = LBUpper1; 
    LBLower = LBLower1; 
    RBUpper = RBUpper1; 
    RBLower = RBLower1; 
} 

void Menu::MenuPoll() 
{ 
    if (Serial2.available()) 
    { 
    String readVal; 
    int rw = 0; 
    readVal = Serial2.readString(); 
    Serial.println(readVal); 
    if (readVal.startsWith("W")) 
    { 
     rw = 1; 
    } 
    else 
    { 
     rw = 0; 
    } 
    int MenuCommand = readVal.substring(1, 4).toInt(); 
    int Value = readVal.substring(4, readVal.length()).toInt(); 

    MenuHandler(rw, MenuCommand, Value); 
    } 
} 

void Menu::MenuHandler(int rw, int MenuCommand, int Value) 
{ 
    Serial.println(rw); 
    Serial.println(MenuCommand); 
    Serial.println(Value); 
    switch (MenuCommand) { 
     case 111: 
     if (rw == 1) 
     { 
     Serial.print(LFUpper->pwmMIN); 
     LFUpper->pwmMIN = Value; 
     } 

Serial.print(LFUpper->pwmMIN);不打印正確的值

+1

它打印什麼值,你期望什麼值 – chbchb55

回答

0

它看起來像你正在服用錯了對象的地址。

Motor LFUpper; 
Motor* ptr1 = &LFUpper; 
Motor LFLower; 
Motor* ptr2 = &LFUpper; 
Motor RFUpper; 
Motor* ptr3 = &LFUpper; 

大概應該是

Motor LFUpper; 
Motor* ptr1 = &LFUpper; 
Motor LFLower; 
Motor* ptr2 = &LFLower; 
Motor RFUpper; 
Motor* ptr3 = &RFUpper; 

而且你ptr1->INIT()阻止所有呼叫INITptr1

+0

關於我從我的臨時窗口中複製並粘貼的Appoligies已經修復這些問題後,我固定的,它仍然沒有工作,我發現,我還以爲會修一些其它問題,實際上是由它,所以它通過循環工作的第一次,但隨後打破它..例如,如果值這是第一次看是123到我會得到123和下我是越來越喜歡和529000我沒有做週期之間的數據的任何操作。所以我回到方塊1,並消除了所有作爲函數參數傳遞的嵌套指針,現在它可以工作。 – RMech

0

我發現,我認爲會解決它其他一些問題,並實際上是由它,所以它通過循環工作的第一次,但隨後打破它..例如,如果有人在看值爲123在第一時間通過我會得到123,接下來我得到了529000,並且我沒有對循環之間的數據進行任何操作。所以我回到方形1,並消除所有作爲函數參數傳遞的嵌套指針,現在它的工作原理