Sample Program for Marutsu-elec MAPLE-mini TypeA board(MARM02-BASE)

Dependencies:   LSM303DLHC RX8025 SDFileSystem TextLCD TouchSense mbed

マルツで販売している MAPLE-mini TypeA基板上のデバイス用のライブラリを集めてみました。
以下の点で不満が残っているので、今後改良する予定です。

  • RTCチップの INTA,INTBが結線されていますが、このライブラリには含まれていません。
  • タッチパッドは裏側を触ればOnになりますが、これが基板の仕様なのかどうか不明です。
  • 圧電ブザーはp20に結線されていて mbed1768ではp20はPWMが使えませんので、DigitalOut で使っています。

2016/06/11 9:54 LCDでアイコンの表示を付け加えました
2016/06/12 SDカードの CD1を利用するようにしました。加速度センサのライブラリを書き直して温度も取得できるようにしました。

Revision:
4:faf01cf17d60
Parent:
3:aae83c4bd9a0
--- a/main.cpp	Sat Jun 11 00:41:33 2016 +0000
+++ b/main.cpp	Sun Jun 12 15:03:15 2016 +0000
@@ -9,7 +9,7 @@
 //RTC RX-8025SA I2C(p28,p27) INTA-p25 INTB-p26
 #include "RX8025.h"
 //地磁気+加速度センサモジュール MLSM303DLHC I2C(p28,p27)
-#include "LSM303DLH.h"
+#include "LSM303DLHC.h"
 //microSD card slot SPI(P5,p6,p7,CS-p22 CD1-p29)
 #include "SDFileSystem.h"
 //基板に作り込みの静電式タッチパッド p15~18
@@ -30,9 +30,21 @@
                 {0x07,0x10},{0x07,0x08},{0x09,0x10},{0x0b,0x10},
                 {0x0d,0x1e},{0x0d,0x1a},{0x0d,0x12},{0x0d,0x02},
                 {0x0f,0x10} }; 
+
 RX8025 rtc(i2c);
-LSM303DLH compass(p28, p27);
-SDFileSystem sd(p5, p6, p7, p22, "sd");
+LSM303DLHC compass(&i2c);
+
+/* SD filesystem with card detection
+ */
+class SDFileSystemCD : public SDFileSystem {
+    DigitalIn card_detect;
+public:
+    SDFileSystemCD(PinName mosi, PinName miso, PinName sclk, PinName cs, PinName cd, const char* name)
+        : SDFileSystem(p5, p6, p7, p22, "sd"), card_detect(cd, PullUp) {
+    }
+    bool cardExist(void) { return card_detect==0; }
+};
+SDFileSystemCD sd(p5, p6, p7, p22, p29, "sd");
 
 //基板の裏側に触らないと ONにならない
 //構造的にそういう仕様っぽいけど、どうなんだろ?
@@ -56,48 +68,47 @@
 MmASpeaker speaker(p20);
 
 int main() {
+    lcd.setContrast(32);
     lcd.cls();
-    lcd.printf("Hello World!\n");
-/* SDカードのテストをするときにはコメントを外してね
-    mkdir("/sd/mydir", 0777);
-    FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
-    if(fp == NULL) {
-        error("Could not open file for write\n");
-    }
-    fprintf(fp, "Hello fun SD Card World!");
-    fclose(fp);
-*/
+    lcd.printf("Hello World!");
+    lcd.locate(0,1);
+    if(sd.cardExist()) {
+        lcd.printf("SDcard Exist");
+        mkdir("/sd/mydir", 0777);
+        FILE *fp = fopen("/sd/mydir/sdtest.txt", "w");
+        if(fp == NULL) {
+            error("Could not open file for write\n");
+        }
+        fprintf(fp, "Hello fun SD Card World!");
+        fclose(fp);
+    } else lcd.printf("No SDcard");
     Times t={0,0,0,0,0,0,0};
     rtc.setTIME(t);
-    compass.setOffset(0.00, 0.00, 0.00);
-    compass.setScale(1.00, 1.00, 1.00);
     sw1.calibration();
     sw2.calibration();
     sw3.calibration();
     sw4.calibration();
+    wait(3.0);
     speaker.beep();
     
     int iconcounter=0;
     while(1) {
         Times t=rtc.getTIME();
-        float hdg = compass.heading();
-        bool s1=sw1.sense(),s2=sw2.sense(),s3=sw3.sense(),s4=sw4.sense();
-        
-        if(s1) speaker.beep(200);
-        else if(s2) speaker.beep(400);
-        else if(s3) speaker.beep(800);
-        else if(s4) speaker.beep(1600);
+        compass.getAccel();
+        compass.getMagnet();
+        int sw=(((sw1.sense()<<1 | sw2.sense())<<1) | sw3.sense())<<1 |sw4.sense();
+        speaker.beep(1600/sw);
         
         lcd.locate(0,0);
-        lcd.printf("%d %d %d %d        ",s1,s2,s3,s4);
+        lcd.printf("%1x  %.1f %d       ", sw, compass.temperature(), compass.accelX());
         lcd.locate(0,1);
-        lcd.printf("%02X:%02X:%02X %.2f", t.hours, t.minutes, t.seconds, hdg);
+        lcd.printf("%02X:%02X:%02X %.1f", t.hours, t.minutes, t.seconds, compass.orientation());
+        lcd.clrIcon();
         lcd.setIcon(icons[iconcounter].address,icons[iconcounter].data); 
+        if(++iconcounter >= MAXICONS) iconcounter=0; 
         myled = 1;
         wait(0.2);
         myled = 0;
         wait(0.2);
-        lcd.setIcon(icons[iconcounter].address,0);
-        if(++iconcounter >= MAXICONS) iconcounter=0; 
     }
 }