2

現在、大学の学生で、私のプログラミングクラスに先んじて、ポインタを少し楽しむことにしました。これは、特定のシリアル入力を受け取り、Teensy++2.0に接続した3つのLEDの状態を変更することになっています。しかし、それは私に最初の入力を返すだけのようです。
http://arduino.cc/en/Serial/ReadBytesUntil
これはReadBytesUntil()の私のリファレンスです入力は#、#、###になります(例として1,1,255)
基本的に私の質問はReadBytesUntil( )コンマを扱いますか?もしそうなら、ここで何が起こっているのですか?

編集-私は私の先生に尋ねました、そして彼でさえそれがうまくいかない理由の手がかりがありません。

char *dataFinder(char *str){
  while (*str != ','){
    str++;
  }
  str++;
  return str;
}

void inputDecoder(){
  str = incomingText;
  whichLED = *str;
  dataFinder(str);
  onoff = *str;
  dataFinder(str);
  powerLevel = *str;
}



void loop(){
  int length;
  if (Serial.available() > 0 ){      //this is basically: if something is typed in, do       something.
length = Serial.readBytesUntil(13,incomingText, 10);  //reads what is typed in, and stores it in incomingVar
incomingText[length]=0;  ///swapping out cr with null 
inputDecoder();
//ledControl();
Serial.print("Entered:");
//incomingText[9]=0;
Serial.println(incomingText);  //Here for testing, to show what values I'm getting back.
Serial.println(whichLED);
Serial.println(onoff);
Serial.println(powerLevel);
}
  delay(1000);
}
4

1 に答える 1

1

strininputDecoder()はグローバルスコープからのものであり、ローカルスコープを持つinと同じではありませんstrdataFinder()

このASCII画像がメモリのレイアウトであると想像してください。

  str
+-----+-----+-----+-----+     +-----+-----+-----+-----+-----+-----+-----+-----+
|  *  |     |     |     | ... |  1  |  ,  |  1  |  ,  |  2  |  5  |  5  | \n  |
+--|--+-----+-----+-----+     +-----+-----+-----+-----+-----+-----+-----+-----+
   | 
   |
   \-----------------------------^

渡すstrdataFinder()、ポインタのコピーが作成されます。これを呼び出しますstr'

  str         str'
+-----+-----+-----+-----+     +-----+-----+-----+-----+-----+-----+-----+-----+
|  *  |     |  *  |     | ... |  1  |  ,  |  1  |  ,  |  2  |  5  |  5  | \n  |
+--|--+-----+--|--+-----+     +-----+-----+-----+-----+-----+-----+-----+-----+
   |           \-----------------^
   |
   \-----------------------------^

dataFinder()増分するときstr、それは本当に変化していますstr'

  str         str'
+-----+-----+-----+-----+     +-----+-----+-----+-----+-----+-----+-----+-----+
|  *  |     |  *  |     | ... |  1  |  ,  |  1  |  ,  |  2  |  5  |  5  | \n  |
+--|--+-----+--|--+-----+     +-----+-----+-----+-----+-----+-----+-----+-----+
   |           \-----------------------------^
   |
   \-----------------------------^

次に、戻ったときに、文字列の先頭を指しているinputDecoder()間接参照を参照します。str

次を使用して、の値をstr'グローバルに割り当てることができます。str

str = dataFinder(str);

またはdataFinder()、引数を取らないように変更して、変数をコピーしないようにします。

于 2012-11-26T15:08:28.527 に答える