ArduinoとSTM32マイコンをつないでマイコンシステム開発をしてみる その18 ~検証実験⑩~
マイコンシステム開発の要件定義から総合テストまでの工程をたどってみます。
題材としては、空調管理システムにします。
機材はいま手元にあるArduino1台とSTM32マイコン1台を使います。
実装に入る前に検証実験をおこないます
以下の3点をおこないます。
① STM32で計測した気温データをSPI通信でArduinoに送信。
1)STM32単体で、計測した気温データをUSB経由で端末エミュレータに出力。(完了)
2)SPI通信でSTM32からArduinoにテストデータを送信。(完了)
② Arduinoは気温データを受信し、LCDに表示。(今回おこないます)
③ ArduinoからSTM32に制御データを送信し、LEDを点灯。
前回はSPI通信でSTM32からArduinoにテストデータを送信することに成功しました
今回、
Arduinoは気温データを受信し、LCDに表示します。
まずは、LCDにテストデータを表示してみます。
1.配線
まずは、ブレッドボードにLCDを取り付けました
Arduinoに結線します
LCDにI2Cモジュールが付いていないので、I2C接続ができません。
LCDを直接Arduinoに接続します。
けっこうケーブルを使いました(笑)
2.テストプログラム作成
LCDの出力テストを行います。
#include <SPI.h>
#include <LiquidCrystal.h>
volatile byte receivedData;
volatile bool dataAvailable = false;
// LiquidCrystalオブジェクトの作成(ピン指定)
LiquidCrystal lcd(8, 9, 7, 6, 5, 4);
void setup() {
Serial.begin(9600);
Serial.println("SPI Slave Initialized");
// SPIスレーブの初期化
//pinMode(SS, INPUT);
pinMode(MISO, OUTPUT);
SPCR |= _BV(SPE); // SPI Enable
SPCR &= ~_BV(MSTR); // スレーブモード
// 割り込みでデータ受信
SPCR |= _BV(SPIE);
lcd.begin(16, 2); // LCDを16x2モードで初期化
lcd.print("Test!"); // LCDに文字を表示
}
ISR(SPI_STC_vect) {
receivedData = SPDR; // 受信データを取得
dataAvailable = true;
}
void loop() {
if (dataAvailable) {
Serial.print("Received Data: 0x");
Serial.println(receivedData, HEX);
dataAvailable = false;
}
}
LCDに ”Test!” と出力するコードを追加しました。
lcd.begin(16, 2); // LCDを16x2モードで初期化
lcd.print("Test!"); // LCDに文字を表示
3.テスト実行
LCDに出力されましたが、表示が薄いです。
VOピンに10kΩの抵抗をはさんでGNDに接続しましたが、1MΩの抵抗に変えてみます。
キレイに出力されました!