電子工作はマイコン、電子回路を接続して動作させるには、
回路知識やプログラム知識が必要になる
Arduinoは教育用に開発された簡単なボードと簡易プログラムである
これは、初心者でも入門しやすい
マイコンやC言語を知っている場合は逆に面倒かもしれない、、、、、
初めに、ボードと本を入手しよう
最初に、LEDとスイッチを作る。
リード線の先端はソケットに差しやすいように ピンにしている
Arduino IDE をサイトからダウンロードしよう
プログラムを書いたら、 左のチェックマークをクリックする。 エラーがあると赤文字で表記される
コンパイルできたら、
矢印のマークをクリックすると、ボードにプログラムが転送される
このボードは Arduino UNO R4 WIFI である。
設定すると、基板のファイルがインストールされる。
さて、最初に取り組むのは、LEDの点滅とスイッチ操作である。
これが旨くできると、後は芋づる式にプログラムがつくれるようになる
1) int で ラベルを作る
2) setup で ラベルを定義する
3) プログラムは loop に書き込む
大文字を小文字で書くと エラーになるのが注意である
ーーーーーーーーーーーーーーーー
LED1、LED2 、OUTPUTに定義する ポートは 10と11である
スイッチ2個は inpin と inpin1 で ポートは1と2 INPUTに定義する
タイマーは delay( ***) msで定義する
これで、LED1が HIGH ーー>500msーー>LED1=LOWーーー>500ms
点滅が繰り返される
スイッチは inpin が 0(LOW)になると if文が実行される
スイッチは 抵抗でプルアップしていれば、そのままでもよいが、
マイコン内部でプルアップできるので、
pinMode(inpin, INPUT_PULLUP)
この構文で 内部プルアップしている
動作確認するには、LCD表示器などが便利である
今は表示器がない。
しかし、シリアル通信で、Arduino IDE のシリアルモニターを使う事で、
ある程度、計算値などを 表示できる
ツールの中から、シリアルモニターを起動させる
プログラムの中に
Serial.println(count);
これは、count と言う数字を パソコンの シリアルモニターに表示させている
温湿度デバイス SHT31
最初は本のとおり、SHT31 デバイスを使って I2C通信をしてみよう。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
初めに、AVRマイコンで C言語で動作プログラムは下記になる
//---- 読み取りREAD ondo -------------
void ONDO_READ(void)
{
int i;
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/* 開始条件送出*/
TWDR=0x88;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDR=0x2C;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDR=0x06;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
/* 停止条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTO) |(1<<TWEN);
wait_ms(1);
TWCR = (1<<TWINT)|(1<<TWSTA) |(1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWDR=0x89;
TWCR = (1<<TWINT) | (1<<TWEN);
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //
o_data[1]=ans;
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //
o_data[2]=ans;
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //
o_data[3]=ans;
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //
o_data[4]=ans;
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //
o_data[5]=ans;
TWCR = (1<<TWINT) | (1<<TWEA) | (1<<TWEN); //ACK
while(!(TWCR & (1<<TWINT))); //;TWINT=1まで待機
ans=TWDR; //
o_data[6]=ans;
/* 停止条件送出*/
TWCR = (1<<TWINT)|(1<<TWSTO) |(1<<TWEN);
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
1) アドレス 0x88ーー>0x2C --->0x06 を送り 設定する
2) 0x89 を送ると 6バイトのデータが戻ってくる
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
アルドィーノ プログラムの場合は、アドレス は 0x44 をそのまま送る
beginTransmission(0x44)
Wire.write(0x2c)
Wire.write(0x06)
で設定する
受信は
Wire.requestForm (0x44, 6)
6バイトのデータを受信する Wire.read()
シリアルモニタを起動すると
温度 28.35度
湿度 63.61%