NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

Arduino IDE(Staticの使い方)

■static

  staticキーワードは変数と組み合わせて使います。
 関数内でstaticを付けて宣言された変数はスタティック変数と呼ばれ、通常のローカル変数とは異なる働きをします。
 ローカル変数は関数が呼ばれるたびに生成と破棄が行われるのに対し、スタティック変数は持続的で、関数が繰り返し呼ばれる間も値が保存されます。スタティック変数は、関数が初めて呼ばれたときに1度だけ生成されます。

 

■使用例

 Arduino IDEで使用するstaticキーワードは以下の通りです。
 試しにこのプログラムを実行すると、線上の2点間をランダムウオーク1します。
 変数stepsizeで一度に動く最大量を決めています。スタティック変数の値が乱数によって、上下します。このテクニックは「ピンクノイズ」※2としても知られています。

#define randomWalkLowRange -20
#define randomWalkHighRange 20
int stepsize, thisTime, total;

void setup() {
  Serial.begin(9600);
}

void loop() {
  stepsize = 5;
  thisTime = randomWalk(stepsize);
  Serial.println(thisTime);
  delay(10);
}

int randomWalk(int moveSize) {
  static int place;      // 現在位置(staticなので値が持続する)
  place = place + (random(-moveSize, moveSize + 1));
  if (place < randomWalkLowRange) {
    place = place + (randomWalkLowRange - place);
  } else if (place > randomWalkHighRange) {
    place = place - (place - randomWalkHighRange);
  }
  return place;
}
イメージ 1
図1:プログラム例

 

■「staticキーワード」

 static  変数の型 変数名:関数が繰り返し呼ばれる間も値が保存されます。

 

 ■補足

1ランダムウォーク(Wikipediaより引用)

 ランダムウォーク(英語: random walk)は、次に現れる位置が確率的に無作為(ランダム)に決定される運動です。
 日本語の別名は乱歩(らんぽ)、酔歩(すいほ)である。 グラフなどで視覚的に測定することで観測可能な現象で、このとき運動の様子は一見して不規則なものになります。

 

2ピンクノイズ(Wikipediaより引用)

 ピンクノイズとは、パワーが周波数に反比例する雑音のこと。
 同じ周波数成分を持つ光がピンク色に見えることからピンクノイズと呼ばれる。
 いわゆる1/fゆらぎを持った信号源をマクロに見た場合も似た感じになる。
 ピンクノイズの波形は、フラクタル状になっていることが知られている。
 オクターブバンドと呼ばれる帯域ごとのエネルギーが一様になるため、様々な音響測定に使用される。

 

■参考

 参考に上記プログラムをArduinoで実行して得られた20,000点のデータをグラフ化したもの図1に、またこのデータをヒストグラム化したものを図2に示します。
 上記プログラムより、stepsize(moveSize)が5で有る事からloopの都度±5の範囲で乱数を生成しており、+15を超えるもしくは-15未満のplace値を持つ時はrandomWalkLow(High)Rangeを逸脱する可能性があります。
 Rangeが±20を逸脱した際にはそれを打ち消す逆方向にplace値が補正される事から、±20により近いplace値を持つ時程、図2の通り出現頻度が高い傾向に有ります。

 
イメージ 1
図1:Arduinoによって生成したピンクノイズ
 
イメージ 2
図2:図1ピンクノイズのヒストグラム
 

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【ArduinoIDE reference】目次に戻る