Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed SB1602E MSCFILESytem FatFileSystemCpp TextLCD
Diff: main.cpp
- Revision:
- 0:a6417f504b9d
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Wed Apr 08 01:18:43 2020 +0000
@@ -0,0 +1,170 @@
+/* Monitoring System Program
+* @Kikkawa
+* @ver.1 2020/04/05, ver.2 2020/04/05
+*
+* LCD(20*4), LCD(デカ文字,SB1602E), CAN, USBmemory, indicator, hazard, horn
+*/
+#include "mbed.h"
+#include "TextLCD.h" //LCD(4*20)ライブラリ
+#include "SB1602E.h" //LCD(デカ文字)ライブラリ
+#include "MSCFileSystem.h" //USBメモリのライブラリ
+
+DigitalOut myled(LED1);
+DigitalOut myled1(LED2);
+DigitalOut myled2(LED3);
+DigitalOut myled3(LED4);
+
+/*インパネ周りの設定*/
+Ticker flipper0;
+DigitalOut overCharge(p22); //過充電LED点灯用
+DigitalOut overDisCharge(p23); //過放電LED点灯用
+DigitalOut winkR_Out(p5); //ウィンカー右_出力
+DigitalOut winkL_Out(p6); //ウィンカー左_出力
+DigitalOut horn_Out(p8); //ホーン_出力
+DigitalOut brake_Out(p7); //ブレーキ_出力
+InterruptIn P_SW(p24); //Pボタン_入力(テレメトリ送信とかUSBメモリ保存ファイル切り替えとかに使用予定)
+InterruptIn winkR_SW(p21); //ウィンカー右スイッチ入力 kiban5
+InterruptIn winkL_SW(p10); //ウィンカー左スイッチ入力
+InterruptIn horn_SW(p12); //ホーンスイッチ入力
+InterruptIn hazard_SW(p11); //ハザードスイッチ入力
+InterruptIn brake_SW(p9); //ブレーキ入力
+bool P_SW_pre = 0;
+bool winkR_SW_pre = 0;
+bool winkL_SW_pre = 0;
+bool hazard_SW_pre = 0;
+void toukarui_init(void);
+
+/*LCD(20*4)の設定 (lcd1)*/
+TextLCD lcd1(p15, p16, p17, p18, p19, p20); // RS, E, DB4, DB5, DB6, DB7
+void lcd1_printf(void); //LCDに文字表示する関数
+int lcd1_cnt = 0;
+
+/*LCD(デカ文字)の設定 (lcd2)*/
+I2C i2c( p28, p27 );
+SB1602E lcd2( i2c ); // SDA, SCL
+int lcd2_cnt = 0;
+
+/*USBメモリの設定*/
+MSCFileSystem msc("usb"); // Mount flash drive under the name "msc"
+void MSC_init(void); //USBの初期設定関数
+void write_MSC(void); //USBへデータを書き込む関数
+FILE *fp;
+
+
+void winker_flip() {
+ if( hazard_SW_pre ) {
+ myled1 = !myled1;
+ myled2 = !myled2;
+ }
+ else if( winkL_SW_pre ) {
+ myled1 = !myled1;
+ }
+ else if( winkR_SW_pre ){
+ myled2 = !myled2;
+ }
+ else {
+ myled1 = 0;
+ myled2 = 0;
+ }
+}
+
+void P_SW_handler() {
+ P_SW_pre = !P_SW_pre;
+}
+
+void winkR_SW_handler() {
+ winkR_SW_pre = !winkR_SW_pre;
+}
+
+void winkL_SW_handler() {
+ winkL_SW_pre = !winkL_SW_pre;
+}
+
+void hazard_SW_handler() {
+ hazard_SW_pre = !hazard_SW_pre;
+ winkR_SW_pre = 0;
+ winkL_SW_pre = 0;
+ myled1 = 0;
+ myled2 = 0;
+}
+
+void horn_SW_handler() {
+ if( !horn_SW.read() ){ //ホーンSWを押しているとき
+ myled3 = 1;
+ horn_Out = 1;
+ }
+ else { //ホーンSWを離しているとき
+ myled3 = 0;
+ horn_Out = 0;
+ }
+}
+
+void lcd1_printf(){
+ lcd1.locate(0, 1);
+ lcd1.printf( "%d", lcd1_cnt );
+}
+
+void lcd2_printf(){
+ lcd2.printf( 0, "Hello world!\r" ); // line# (0 or 1), string
+// lcd2.printf( 1, " %d\r", lcd1_cnt, lcd1_cnt, lcd1_cnt ); // \rがないと座標が右にシフトしていく
+// lcd2.printf( 1, "%d %d %d\r", lcd1_cnt, lcd1_cnt, lcd1_cnt ); // \rがないと座標が右にシフトしていく
+// lcd2.printf( 1, "%d %d %d\r", lcd1_cnt, lcd1_cnt, lcd1_cnt ); // \rがないと座標が右にシフトしていく
+
+}
+
+void MSC_init(){ //USBメモリの初期設定関数
+ fp = fopen( "/usb/test.csv", "a"); //ファイルを開く "W"は新規作成して書き込み,"a"は上書き(Fileなければ新規作成書き込み)
+ printf("USB fileopen0!\r\n");
+ if ( fp == NULL ) {
+ printf("USBmemory ERROR!\r\n");
+ exit(1);
+ }
+ fprintf(fp,"a,b,c,d,e,f,g\n"); //ファイル書き込み
+ fclose(fp); //ファイルを閉じる
+ printf("USB file close!\n");
+}
+
+void write_MSC(){ //USBメモリにデータ書き込む関数
+ if ( (fp= fopen( "/usb/MPPT.csv", "a")) == NULL ){ //ファイルを開く, aは上書きの命令(ファイルが存在しなければ新規作成する)
+ printf("USB error\r\n");
+ exit(1);
+ }
+// fprintf(fp,"%f,%f,%f,%f,%f,%f\n", Vin1, Cin1, Vout1, Vout1, temp1, temp2); //ファイル書き込み
+ fclose(fp); //ファイルを閉じる
+}
+
+void toukarui_init(){
+ P_SW.mode( PullUp ); // 内蔵プルアップを使う
+ winkR_SW.mode( PullUp ); // 内蔵プルアップを使う
+ winkL_SW.mode( PullUp ); // 内蔵プルアップを使う
+ horn_SW.mode( PullUp ); // 内蔵プルアップを使う
+ hazard_SW.mode( PullUp ); // 内蔵プルアップを使う
+
+ P_SW.rise(&P_SW_handler); //立ち下がり割り込みを設定
+ winkR_SW.rise(&winkR_SW_handler); //立ち上がり割り込みを設定
+ winkL_SW.rise(&winkL_SW_handler); //立ち上がり割り込みを設定
+ horn_SW.fall(&horn_SW_handler); //立ち上がり割り込みを設定
+ horn_SW.rise(&horn_SW_handler); //立ち上がり割り込みを設定
+ hazard_SW.rise(&hazard_SW_handler); //立ち上がり割り込みを設定
+
+ flipper0.attach(&winker_flip, 0.67); // the address of the function to be attached (flip) and the interval (2 seconds)
+}
+
+int main() {
+ wait(0.001);
+ lcd1.cls();
+ wait(0.001);
+ lcd1.locate(0, 0);
+ lcd1.printf( "Hello world!");
+
+ MSC_init(); //USBメモリ初期化
+ toukarui_init();
+ while(1) {
+ lcd1_printf(); //LCD(20*4)への文字表示をする関数
+ lcd2_printf(); //LCD(デカ文字)への文字表示をする関数
+ lcd1_cnt++;
+
+ write_MSC(); //USBメモリへ書き込む関数
+ wait(1.0);
+ }
+}