2017-04-13 72 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,并消除所有作为函数参数传递的嵌套指针,现在它的工作原理