2017-04-13 6 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()ブロックはすべてptr1INITを呼び出す必要があります。

+0

私の一時的なウィンドウからコピー&私はそれを修正すると思ったいくつかの他の問題を発見し、実際にそれがループを介して初めて働いたが、それは破る..例えば、値がそれは私が123を取得し、次に私は529000のようになっていた私はサイクル間のデータ上の操作をしていないを介して初めてだった123を見ていた。だから私は正方形1に戻り、関数引数として渡されたネストされたポインタのすべてを削除して、今は動作します。 – RMech

0

私はそれを修正して実際にそれを作ってループをはじめて動作させたが、次にそれが壊れてしまうといういくつかの問題を発見した。たとえば、それが見ていた値が最初の123私は123を取得し、次に私は529000のようになっていて、私はサイクル間のデータの操作をしませんでした。だから私は正方形1に戻り、関数の引数として渡されたネストされたポインタをすべて取り除き、現在は機能しています。

関連する問題