※この記事の所要時間は1分です。
原因
関数内で使用している変数や関数名(’xxx’)が使える形で定義されていない。
下記の例でいえば、gyro_xなどの変数が全て別のローカルスコープ内に存在しており、参照することが出来ない状態。
スコープについては、こちらの記事で分かりやすく解説されている。詳しく知りたい人は是非。
解決法
簡単で、関数内で使用している変数名を定義してやればよい。
やり方は以下の二通り。
ローカル変数として定義する
loop関数内でしか使わない変数であれば、こちらのやり方がオススメ。
このように、適切な型を頭に付けて必要な変数などを全て定義する。
同じ変数をこの関数外でも使う場合は、引き続き同じエラーが出るので注意。
その場合は次のグローバルスコープに定義する形を取ろう。
グローバル変数として定義する
こちらは、ぐぐーっと場所が変わり、全ての関数の外で定義する。
今回は、わざと分かりやすくプログラムの先頭に書いた。
此方で問題なく動くようになるが、「じゃあ全ての変数をグローバルスコープにしたらいいじゃん」としてしまうと、数千~数万行のソースコードを書く時にとんでもないことになるので注意。
まとめ
必要な定義は必要な範囲の中でだけ、という思想設計で挑むことで、同じ挙動でもプログラムの可読性は桁違いに変わる。
数百行程度の小規模なソースコードを一人で書く分には多少雑に宣言しても問題ないが、最初のうちから「この変数はどこで定義すれば綺麗か」とスコープを意識して書くだけでかなり見栄えが変わるという点だけは留意しておこう。