I2C 接続の LCD AQM1602XA-RN-GBW 用のライブラリの使用例. Demo program of library for LCD 1602XA-RN-GBW connected using I2C interface.

Dependencies:   mbed UIT_AQM1602

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