以前の記録"Arduino,いざEthernetへ."に記載したプログラムを改訂したので,ここに載せます. 最近またArduinoに触れる機会が増えたことと,Dustin BoswellとTrevor Foucherの著作である"リーダブルコード"を読んだことがきっかけです. より安定した動作とより読みやすいコードを目指して,行数は増えましたが,改変した結果をぜひ共有させてください.
改訂点
改訂点は,
追記:
- 読みやすさが損なわれない程度にコードをより小さな単位へと分割したこと.
- GETパラメタをより適切に扱うようにしたこと.
- コメントを付加したこと.
- 動作を安定させたこと.
GET /?9=ON HTTP/1.1
Host: 192.168.11.22
Connection: keep-alive
...以下略
というように,必ず先頭行にGETパラメタ(キーと値のペア)があります. そこで今回,先頭行をfirstLineOfRequestなるString型変数に丸々代入,あとでその中からGETパラメタのキーと値を探りだす方法を採りました. これにより,キーと値をそれぞれ取り出すことが出来るようになり,プログラム中で自由に使えるようになりました. 自由度の向上です. 本プログラム中ではキーにディジタルピン番号を,値に"ON"か"OFF"かを指定出来るようになっています. サブルーチン"changeOutputPinsStatusBasedOn"中でgetKeyというString型変数にはGETパラメタのキーが代入され,getValueには値が代入されています. 使い方次第で可能性が広がるコードです. Webブラウザという一般的なソフトウェアから,ニッチなWebサーバ(Arduino)上のI/Oを操れるとは,なかなか乙ではありませんか?
Host: 192.168.11.22
Connection: keep-alive
...以下略
追記:
EthernetシールドにSDカードが挿入されている場合,上のプログラムがうまく動作しない場合があります. SDカードを取り外して失くさないよう大切にしまっておくと期待通りの動作を得ることが出来るかもしれません. もしSDカードを取り外したくない場合は次のコードをsetup()内に追記してください.
void setup() {
...
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
...
}
...
pinMode(4, OUTPUT);
digitalWrite(4, HIGH);
...
}
8644836129874758701
https://www.storange.jp/2014/04/arduino-ethernet.html
https://www.storange.jp/2014/04/arduino-ethernet.html
Arduino Ethernet シールド [改訂増分版]
2014-04-30T20:32:00+09:00
https://www.storange.jp/2014/04/arduino-ethernet.html
Hideyuki Tabata
Hideyuki Tabata
200
200
72
72