Arduinoを書き込み装置としてATtiny45にスケッチを書き込む
前回、Arduino(互換機)からATtiny45へとスケッチを書き込むための配線を行い、ハード的には準備完了。で、今回はソフト編。
実際にスケッチを書いて、それをATtiny45へと書き込んでいきますが、その前にArduino IDE(統合開発環境)の対応デバイスにATtiny45やATtiny2313等を加えていきます。
Arduino IDEを再起動し、 Arduino IDEのメニューバーから[ツール]>[マイコンボード]で確認してみると、ATtiny45、ATtiny2313等々、たくさんのマイコンが無事に追加されています。
因みにArduino IDEは、現行バージョンの Arduino 1.0.5 を使うようにと指示されていますが、私の場合は「私家版 Ardublock」の「arduino-0101-portable3」を使っています。
「1.0 並びにそれ以前バージョンでは動作しません」とあり、「私家版」はArduino-1.0.1をベースにしているとのことで、どうなのかと心配しましたが特に問題なく動いているようです。
メニューの[ツール]から[マイコンボード]を開いてATtiny45 を選択し、同じく[ツール]>[シリアルポート]から使用するポートを選択(私の場合は表示されたポートをそのまま選択)し、最後に[ツール]>[書込装置]で Arduino as ISP を選択して準備完了。
[ファイル]>[スケッチの例]>[02.Digital]>[Button]を選んでみましたが、変数を定義したり、間にコメントが入っていたりで、ちょっと流れが分かりにくかったので、私なりにスッキリさせてみた。
Arduinoのスケッチには必ずsetup( )とloop( )という2つの特別な記述(関数)が必要とのことで、1行目と6行目にあります。
setup( )はスケッチがスタートした時に1度だけ呼び出されるもので、ここでピンモードの設定等を行い、loop( )の方はスケッチの本体であり、LED点滅といった動作を繰り返し行うもの。
前回書いた通り、ATtiny45の3番ピン(PB3)にLEDを、4番ピン(PB4)にスイッチを接続してあるので、2行目、3行目で4番ピンを出力、3番ピンを入力として設定(pinMode)。
そして、7行目で4番ピンの状態を読み取って(digitalRead)、それがHIGHなら3番ピンにHIGHを出力(8行目、digitalWrite)し、そうでないならLOWを出力(11行目)しています。
これでボタンを押されている時はLEDが点灯し、押されていなければ消灯することになります。
それが100行、200行のスケッチとなると、たとえば3番ピンの表記が1ヶ所しかなかったとしても、それを探すのだけでも大変です。さらに10個、20個も変更箇所があるとしたら、これは大惨事。
そんな事態を避けるために、変数というものが活躍するのです。変数とはデータを格納する場所のことで、名前や型(type)、そして「値」を持っています。
下のスケッチの中身(動作)は上のスケッチと全く同じですが、3番ピン(3)、4番ピン(4)というデータをメモリ上のある場所に格納しておいて、その場所に(自分で分かり易い)名前を付けてます。
そのことをスケッチの冒頭(1行目と2行目)で宣言しています。「以下のスケッチの中で、SWPin という記述が出てきたら4を代入しなさい、ledPin という記述の時は3だよ」、って宣言です。
変数の名前(SWPinやledPin)と値(4とか3とか)は分かりやすいですが、型ってのは何?
3行目でも同じく SWState という名前の変数を宣言していますが、この前にかかっている int というのが変数の型で、これは整数を格納する変数だよってことです。
SWPin にも ledPin のも、この int がかかっているので、これも整数型ということです。が、SWPin と ledPin の前には更に const というのがあり、これも型なんです。
この const修飾された変数(の中身)は変更不可となります。つまり、この変数の値を変更することは、これ以降できませんよってことです。
逆に言えば、 const修飾されていない SWState は変更可能だってこと。SWState は、スイッチのオン/オフ状態を格納するので、その時の状態によって変えられないと困ってしまうからです。
11行目で、SWPin(4番ピン)の状態を読み取って SWState に代入しているのがそれです。
いらん説明をくだくだとしてしまいましたが、スケッチは無事にATtiny45に書き込まれ、スイッチのオン/オフに合わせてLEDもキチンとオン/オフ動作をしてくれています。
これで、ArduinoからATtiny45やATtiny2313へとスケッチを書き込む環境の構築完成です。
次回から、この一連のAVRマイコンシリーズの(一旦)最終章の予定です。
実際にスケッチを書いて、それをATtiny45へと書き込んでいきますが、その前にArduino IDE(統合開発環境)の対応デバイスにATtiny45やATtiny2313等を加えていきます。
Arduino IDEの環境設定から
前回も紹介したArduino IDEでATtiny他の開発(Arduino-ISP編)の指示に従って「ATmega/ATtiny記述ファイルアーカイブ」をダウンロードし、インストールしていきます。Arduino IDEを再起動し、 Arduino IDEのメニューバーから[ツール]>[マイコンボード]で確認してみると、ATtiny45、ATtiny2313等々、たくさんのマイコンが無事に追加されています。
因みにArduino IDEは、現行バージョンの Arduino 1.0.5 を使うようにと指示されていますが、私の場合は「私家版 Ardublock」の「arduino-0101-portable3」を使っています。
「1.0 並びにそれ以前バージョンでは動作しません」とあり、「私家版」はArduino-1.0.1をベースにしているとのことで、どうなのかと心配しましたが特に問題なく動いているようです。
メニューの[ツール]から[マイコンボード]を開いてATtiny45 を選択し、同じく[ツール]>[シリアルポート]から使用するポートを選択(私の場合は表示されたポートをそのまま選択)し、最後に[ツール]>[書込装置]で Arduino as ISP を選択して準備完了。
スイッチのオン/オフに連動してLEDがオン/オフするスケッチ
実際にスケッチを書いてみます。[ファイル]>[スケッチの例]>[02.Digital]>[Button]を選んでみましたが、変数を定義したり、間にコメントが入っていたりで、ちょっと流れが分かりにくかったので、私なりにスッキリさせてみた。
- void setup( ) {
- pinMode(4,INPUT);
- pinMode(3,OUTPUT);
- }
- void loop( ) {
- if(digitalRead(4)==HIGH) {
- digitalWrite(3,HIGH);
- }
- else {
- digitalWrite(3,LOW);
- }
- }
Arduinoのスケッチには必ずsetup( )とloop( )という2つの特別な記述(関数)が必要とのことで、1行目と6行目にあります。
setup( )はスケッチがスタートした時に1度だけ呼び出されるもので、ここでピンモードの設定等を行い、loop( )の方はスケッチの本体であり、LED点滅といった動作を繰り返し行うもの。
前回書いた通り、ATtiny45の3番ピン(PB3)にLEDを、4番ピン(PB4)にスイッチを接続してあるので、2行目、3行目で4番ピンを出力、3番ピンを入力として設定(pinMode)。
そして、7行目で4番ピンの状態を読み取って(digitalRead)、それがHIGHなら3番ピンにHIGHを出力(8行目、digitalWrite)し、そうでないならLOWを出力(11行目)しています。
これでボタンを押されている時はLEDが点灯し、押されていなければ消灯することになります。
変数の存在意義
ただ、こんな短いスケッチであれば、3番ピン、4番ピンの表記が全部で5か所しかないので、LEDやスイッチの接続ピンを変更したとしても、全体に修正をかけるのは難しくありません。それが100行、200行のスケッチとなると、たとえば3番ピンの表記が1ヶ所しかなかったとしても、それを探すのだけでも大変です。さらに10個、20個も変更箇所があるとしたら、これは大惨事。
そんな事態を避けるために、変数というものが活躍するのです。変数とはデータを格納する場所のことで、名前や型(type)、そして「値」を持っています。
下のスケッチの中身(動作)は上のスケッチと全く同じですが、3番ピン(3)、4番ピン(4)というデータをメモリ上のある場所に格納しておいて、その場所に(自分で分かり易い)名前を付けてます。
そのことをスケッチの冒頭(1行目と2行目)で宣言しています。「以下のスケッチの中で、SWPin という記述が出てきたら4を代入しなさい、ledPin という記述の時は3だよ」、って宣言です。
- const int SWPin = 4;
- const int ledPin = 3;
- int SWState = 0;
- void setup( ) {
- pinMode(ledPin, OUTPUT);
- pinMode(SWPin, INPUT);
- }
- void loop( ) {
- SWState = digitalRead(SWPin);
- if (SWState == HIGH) {
- digitalWrite(ledPin, LOW);
- }
- else {
- digitalWrite(ledPin, HIGH);
- }
- }
変数の名前(SWPinやledPin)と値(4とか3とか)は分かりやすいですが、型ってのは何?
3行目でも同じく SWState という名前の変数を宣言していますが、この前にかかっている int というのが変数の型で、これは整数を格納する変数だよってことです。
SWPin にも ledPin のも、この int がかかっているので、これも整数型ということです。が、SWPin と ledPin の前には更に const というのがあり、これも型なんです。
この const修飾された変数(の中身)は変更不可となります。つまり、この変数の値を変更することは、これ以降できませんよってことです。
逆に言えば、 const修飾されていない SWState は変更可能だってこと。SWState は、スイッチのオン/オフ状態を格納するので、その時の状態によって変えられないと困ってしまうからです。
11行目で、SWPin(4番ピン)の状態を読み取って SWState に代入しているのがそれです。
いらん説明をくだくだとしてしまいましたが、スケッチは無事にATtiny45に書き込まれ、スイッチのオン/オフに合わせてLEDもキチンとオン/オフ動作をしてくれています。
これで、ArduinoからATtiny45やATtiny2313へとスケッチを書き込む環境の構築完成です。
次回から、この一連のAVRマイコンシリーズの(一旦)最終章の予定です。
- 関連記事
-
- ChaN氏の電子オルゴール、音出しまであと一歩?
- ニコニコ動画をバイブルとしてChaN氏の電子オルゴールを製作
- Arduinoを書き込み装置としてATtiny45にスケッチを書き込む
- 今度はArdublockからArduinoの世界へと第一歩を
- AVR StudioからHIDaspx経由で「Lチカ」プログラム書き込み