Master Swordの吹奏楽部展示時用のプログラムです

Dependencies:   TextLCD mbed

Fork of MIYABI_Drive by Nin_PTD_Mecha

Committer:
iwaki
Date:
Tue Sep 18 04:35:28 2018 +0000
Revision:
3:3707e3934185
Parent:
2:41795d8bc7cb
MasterSword?

Who changed what in which revision?

UserRevisionLine numberNew contents of line
simon 0:fb6bbc10ffa0 1 #include "mbed.h"
iwaki 2:41795d8bc7cb 2 #include "TextLCD.h"
iwaki 3:3707e3934185 3 #include "math.h"
iwaki 2:41795d8bc7cb 4 PwmOut led1(LED1);
iwaki 2:41795d8bc7cb 5 PwmOut led2(LED2);
iwaki 2:41795d8bc7cb 6 PwmOut led3(LED3);
iwaki 2:41795d8bc7cb 7 PwmOut led4(LED4);
iwaki 2:41795d8bc7cb 8
iwaki 2:41795d8bc7cb 9 PwmOut moter1(p21);
iwaki 2:41795d8bc7cb 10 PwmOut moter2(p22);
iwaki 2:41795d8bc7cb 11 DigitalIn sw1(p23);
iwaki 2:41795d8bc7cb 12
iwaki 2:41795d8bc7cb 13 TextLCD lcd(p24, p26, p27, p28, p29, p30); // rs, e, d0-d3
simon 0:fb6bbc10ffa0 14
iwaki 3:3707e3934185 15 void Change_Shine(bool BRIGHT){
iwaki 3:3707e3934185 16
iwaki 3:3707e3934185 17 int i;
iwaki 3:3707e3934185 18
iwaki 3:3707e3934185 19 int t_BecameShine;
iwaki 3:3707e3934185 20 int t_MaxShine;
iwaki 3:3707e3934185 21 int t_MinShine;
iwaki 3:3707e3934185 22 int t_NotShine;
iwaki 3:3707e3934185 23
iwaki 3:3707e3934185 24 float rate;
iwaki 3:3707e3934185 25 float rate_l;
iwaki 3:3707e3934185 26 float Out1;
iwaki 3:3707e3934185 27 float Out2;
iwaki 3:3707e3934185 28
iwaki 3:3707e3934185 29 i = 0;
iwaki 3:3707e3934185 30
iwaki 3:3707e3934185 31 Out1 = 0.0;
iwaki 3:3707e3934185 32 Out2 = 0.0;
iwaki 3:3707e3934185 33 t_BecameShine = 2000;
iwaki 3:3707e3934185 34 t_MaxShine = 150;
iwaki 3:3707e3934185 35 t_MinShine = 400;
iwaki 3:3707e3934185 36 t_NotShine = 1200;
iwaki 3:3707e3934185 37 rate = 0.7;
iwaki 3:3707e3934185 38 rate_l = 0.4;
iwaki 3:3707e3934185 39
iwaki 3:3707e3934185 40
iwaki 3:3707e3934185 41 if(BRIGHT){
iwaki 3:3707e3934185 42 lcd.cls(); //clear
iwaki 3:3707e3934185 43 lcd.locate(0,0);
iwaki 3:3707e3934185 44 lcd.printf("Shining now");
iwaki 3:3707e3934185 45 for(i=0;i <= t_BecameShine ;i++){
iwaki 3:3707e3934185 46
iwaki 3:3707e3934185 47 if(i <= t_MaxShine){
iwaki 3:3707e3934185 48 Out1 = (float)i / t_MaxShine;
iwaki 3:3707e3934185 49 Out2 = (float)i / t_MaxShine;
iwaki 3:3707e3934185 50 }
iwaki 3:3707e3934185 51 else if(i <= t_MinShine) {
iwaki 3:3707e3934185 52 Out1 = (float) 1 - (1 - rate_l)*(i - t_MaxShine)/(t_MinShine - t_MaxShine);
iwaki 3:3707e3934185 53 }
iwaki 3:3707e3934185 54 else{
iwaki 3:3707e3934185 55 Out1 = (float) 1 *(rate - rate_l)*(i - t_MinShine)/(t_BecameShine - t_MinShine) +rate_l;
iwaki 3:3707e3934185 56 }
iwaki 3:3707e3934185 57
iwaki 3:3707e3934185 58 lcd.locate(0,1);
iwaki 3:3707e3934185 59 lcd.printf("%f" ,Out1);
iwaki 3:3707e3934185 60
iwaki 3:3707e3934185 61 moter1 = Out1;
iwaki 3:3707e3934185 62 moter2 = Out1;
iwaki 3:3707e3934185 63 wait(0.001);
iwaki 3:3707e3934185 64 }
iwaki 3:3707e3934185 65 moter1 = rate;
iwaki 3:3707e3934185 66 moter2 = rate;
iwaki 3:3707e3934185 67 }
iwaki 3:3707e3934185 68 else{
iwaki 3:3707e3934185 69 lcd.cls(); //clear
iwaki 3:3707e3934185 70 lcd.locate(0,0);
iwaki 3:3707e3934185 71 lcd.printf("Not shining now");
iwaki 3:3707e3934185 72 moter1 = rate;
iwaki 3:3707e3934185 73 moter2 = rate;
iwaki 3:3707e3934185 74 for(i=0;i<=t_NotShine;i++){
iwaki 3:3707e3934185 75 Out1 = float(rate*(t_NotShine - i)/t_NotShine);
iwaki 3:3707e3934185 76 Out2 = float(rate*(t_NotShine - i)/t_NotShine);
iwaki 3:3707e3934185 77 lcd.locate(0,1);
iwaki 3:3707e3934185 78 lcd.printf("%f" ,Out1);
iwaki 3:3707e3934185 79 moter1 = Out1;
iwaki 3:3707e3934185 80 moter2 = Out2;
iwaki 3:3707e3934185 81 wait(0.001);
iwaki 3:3707e3934185 82 }
iwaki 3:3707e3934185 83 moter1 = 0;
iwaki 3:3707e3934185 84 moter2 = 0;
iwaki 3:3707e3934185 85 }
iwaki 3:3707e3934185 86 }
iwaki 3:3707e3934185 87
simon 0:fb6bbc10ffa0 88 int main() {
iwaki 2:41795d8bc7cb 89
iwaki 3:3707e3934185 90 int s = 0;
iwaki 3:3707e3934185 91 bool BRIGHT = false;
iwaki 2:41795d8bc7cb 92
iwaki 2:41795d8bc7cb 93 sw1.mode( PullUp );
iwaki 3:3707e3934185 94
iwaki 2:41795d8bc7cb 95 moter1 = 0.0;
iwaki 2:41795d8bc7cb 96 moter2 = 0.0;
iwaki 3:3707e3934185 97 moter1.period(0.001);
iwaki 3:3707e3934185 98 moter2.period(0.001);
iwaki 3:3707e3934185 99
iwaki 3:3707e3934185 100 //初期設定を光らないモードに設定
iwaki 3:3707e3934185 101 lcd.cls(); //clear
iwaki 3:3707e3934185 102 lcd.locate(0,0);
iwaki 3:3707e3934185 103 lcd.printf("Not shining now");
iwaki 3:3707e3934185 104
iwaki 3:3707e3934185 105 while(1){
iwaki 3:3707e3934185 106 //トリガのみのカウント
iwaki 2:41795d8bc7cb 107 //チャタリング防止のためタイマ有り
iwaki 3:3707e3934185 108 //一度OFFになったことを検知するステータスフラグ、点灯消灯フラグを用い
iwaki 3:3707e3934185 109 //1回だけ点灯消灯の関数を呼び出す。
iwaki 2:41795d8bc7cb 110 if(sw1 == 0 and s == 0) {
iwaki 2:41795d8bc7cb 111 s = 1;
iwaki 3:3707e3934185 112 led1 = 1;
iwaki 3:3707e3934185 113 BRIGHT = !BRIGHT;
iwaki 3:3707e3934185 114 Change_Shine(BRIGHT);
iwaki 3:3707e3934185 115 wait(0.001);
iwaki 2:41795d8bc7cb 116 }
iwaki 2:41795d8bc7cb 117 else if(sw1 == 1) {
iwaki 2:41795d8bc7cb 118 s = 0;
iwaki 3:3707e3934185 119 led1 = 0;
iwaki 2:41795d8bc7cb 120 }
iwaki 3:3707e3934185 121 wait(0.1);
iwaki 3:3707e3934185 122 }
iwaki 3:3707e3934185 123
simon 0:fb6bbc10ffa0 124 }