I2C 接続の LCD AQM1602XA-RN-GBW 用のライブラリの使用例. Demo program of library for LCD 1602XA-RN-GBW connected using I2C interface.
Dependencies: mbed UIT_AQM1602
Diff: main.cpp
- Revision:
- 9:3ccc730c6f1b
- Parent:
- 8:ac09e00d2903
- Child:
- 10:8d358c3dfc7a
diff -r ac09e00d2903 -r 3ccc730c6f1b main.cpp --- a/main.cpp Sat Jul 22 01:57:58 2017 +0000 +++ b/main.cpp Sat Oct 28 13:00:11 2017 +0000 @@ -1,80 +1,78 @@ //---------------------------------------------------------------- -// Demo program for LCD AQM1602XA-RN-GBW using I2C interface -// Pullup resistors for SDA and SCL: 10 kΩ -// Use mbed Rev.129 for Nucleo-F401/446/746 and DISCO-F746 +// LCD 表示器 AQM1602 用クラスライブラリ Aqm1602 の使用例 // -// mbed Rev.130 以降で起こる,割り込み処理での動作不良を修正した -// Aqm1602 クラスを使用 -// DISCO-F746 では動作不良は修正できないようだ +// 動作を確認したボード: Nucleo-F401RE, Nucleo-F411RE, Nucleo-F446RE, +// LPC1768 +// 動作が不良なボード: Nucleo-F302R8, Nucle0-F746ZG, Disco-f746NG // -// 2017/07/22, Copyright (c) 2017 MIKAMI, Naoki +// 使用した mbed ライブラリ: Rev.154 +// 使用した Aqm1602 用ライブラリ: Rev.12 +// +// 2017/10/28, Copyright (c) 2017 MIKAMI, Naoki //---------------------------------------------------------------- +#pragma diag_suppress 870 // マルチバイト文字使用の警告を出ないようにする #include "AQM1602.hpp" -using namespace Mikami; +// タイマ割り込みを使う場合は,次の define 文をコメントアウトする +#define WITHOUT_TIMER_INTERRUPT -Aqm1602 lcd_; // Default, OK -//Aqm1602 lcd_(D14, D15); // OK -//Aqm1602 lcd_(D14, D15, 200000); // OK +using Mikami::Aqm1602; +// 以下は Nucleo の場合 +Aqm1602 lcd_; // OK, Default, D14: SDA, D15: SCL //Aqm1602 lcd_(D14, D15, 200000, true, true); // OK -//Aqm1602 lcd_(PB_3, PB_10); // OK -//Aqm1602 lcd_(PC_9, PA_8); // OK -//Aqm1602 lcd_(PB_4, PA_8); // OK +//Aqm1602 lcd_(PB_4, PA_8); // OK, PB_4: D5, PA_8: D7 + +// 以下は Nucleo を使い,既に生成された I2C のオブジェクトを渡す場合 //I2C i2cObj_(D14, D15); -//Aqm1602 lcd_(i2cObj_); // OK +//Aqm1602 lcd_(i2cObj_); // OK + +// 以下は LPC1768 の場合 +//Aqm1602 lcd_(p9, p10); // OK -// Following: for LPC1114 -//Aqm1602 lcd_(dp5, dp27); // OK -//I2C i2cObj_(dp5, dp27); -//Aqm1602 lcd_(i2cObj_); // OK +#ifdef WITHOUT_TIMER_INTERRUPT +//------------------------------------------------------------------------------ +// タイマ割り込みを使わない場合 +int main() +{ + if (lcd_.IsConnected()) printf("\r\nLCD が接続されています.\r\n"); + else printf("\r\nLCD が接続されていません.\r\n"); + + lcd_.Clear(); + lcd_.WriteString("Using Wait"); -// Following: for LPC1768 -//Aqm1602 lcd_(p9, p10); // OK + int count = 0; + while (true) + { + lcd_.WriteValueXY("%d", count, 0, 1); + printf("%d\r\n", count++); + wait(1); // ここで1秒間待つ + } +} +#else +//------------------------------------------------------------------------------ +// タイマ割り込みを使う場合 Ticker timer_; -#ifdef STM_USER_BUTTON -DigitalIn uButton_(USER_BUTTON); -#endif +// タイマ割り込みに対する割り込みサービスルーチン void TimerIsr() { - static int k = 0; - lcd_.WriteValueXY("%5.1f", (float)(k++/10.0f), 0, 1); -} - -void WaitButton() -{ -#ifdef STM_USER_BUTTON - lcd_.WriteStringXY("Push blue button", 0, 1); - #ifdef STM32F7 - while (uButton_ == 0) {} - #else - while (uButton_ == 1) {} - #endif -#else - wait(1); -#endif - lcd_.ClearLine(1); - wait(0.5); + static int count = 0; + lcd_.WriteValueXY("%d", count, 0, 1); + printf("%d\r\n", count++); } int main() { - if (lcd_.IsConnected()) printf("\r\nConnected\r\n"); - else printf("\r\nDisconnected\r\n"); + if (lcd_.IsConnected()) printf("\r\nLCD は接続されています.\r\n"); + else printf("\r\nLCD は接続されていません.\r\n"); lcd_.Clear(); - lcd_.WriteString("Hello!"); - WaitButton(); // Waiting, push blue user button - lcd_.WriteStringXY("0123456789ABCDEF", 0, 0); - WaitButton(); // Waiting, push blue user button - lcd_.ClearLine(0); - WaitButton(); // Waiting, push blue user button - string str = "AQM1602"; - lcd_.WriteStringXY(str+"XA-RN-GBW", 0, 0); - TimerIsr(); - timer_.attach(&TimerIsr, 0.1f); + lcd_.WriteString("Using Ticker"); + TimerIsr(); // 直ちに "0" を表示するため + timer_.attach(&TimerIsr, 1); while (true) {} } +#endif