kakunin
Dependencies: ADXL345 HMC6352 Motor PID SoftPWM mbed
Revision 1:56dc085d9e2d, committed 2015-07-05
- Comitter:
- WAT34
- Date:
- Sun Jul 05 08:18:46 2015 +0000
- Parent:
- 0:7ec77e777058
- Child:
- 2:b8e04b6dc9ab
- Child:
- 5:ec9f341817ef
- Commit message:
- ?????
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ADXL345.lib Sun Jul 05 08:18:46 2015 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/aberk/code/ADXL345/#bd8f0f20f433
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Motor.lib Sun Jul 05 08:18:46 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/simon/code/Motor/#f265e441bcd9
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/PID.lib Sun Jul 05 08:18:46 2015 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/aberk/code/PID/#6e12a3e5af19
--- a/main.cpp Wed Jul 01 07:17:03 2015 +0000
+++ b/main.cpp Sun Jul 05 08:18:46 2015 +0000
@@ -1,18 +1,98 @@
#include "mbed.h"
-
+#define mC 3920.072
+#define mD 293.665
+#define mE 329.628
+#define mF 349.228
+#define mG 391.995
+#define mA 440.000
+#define mB 493.883
+#define PI 3.14159265358979
+#include "mbed.h"
+#include "ADXL345.h"
+#include "PID.h"
+#include "Motor.h"
+Timeout sho;
+Timeout rev;
+PwmOut sp1(p25);
BusOut air(p15,p16);
BusOut air2(p17,p18);
DigitalIn sw(p10,PullUp);
DigitalIn sw2(p11,PullUp);
-int main() {
+ADXL345 accell(p5,p6,p7,p8);
+PID tilt(0.1, 0.0, 0.0, 0.1);
+Motor motor(p12,p13,p21);
+int c;
+void sound()
+{
+ float mm[]= {mC,mD,mE,mF,mG,mA,mB,mC*2};
+
+ sp1.period(1.0/mm[0]);
+ sp1.write(0.5f);
+}
+void shoot()
+{
+ if (sw == 0) {
+ air = 1;
+ air2 = 1;
+ }
+ sp1.write(0.0f);
+ c = 0;
+ wait(1);
+}
+void ret()
+{
+ if (sw2 == 0) {
+ air = 2;
+ air2 = 2;
+ }
+ wait(1);
+ sp1.write(0.0f);
+ c = 0;
+}
+int main()
+{
+ int gd[3];
+ float tc;
+ double x,y,z;
+ //====加速度センサの準備============
+ //Go into standby mode to configure the device.
+ accell.setPowerControl(0x00);
+
+ //設定, +/-16g, 4mg/LSB.
+ accell.setDataFormatControl(0x0B);
+
+ //データレートを3200Hzに設定。
+ accell.setDataRate(ADXL345_3200HZ);
+
+ //計測モード設定
+ accell.setPowerControl(0x08);
+ //====発射角度PID設定===============
+ //角度センサの値の範囲
+ tilt.setInputLimits(PI,-PI);
+ //出力の設定
+ tilt.setOutputLimits(-1.0,1.0);
+ tilt.setMode(AUTO_MODE);
while(1) {
- if (sw == 0){
- air = 1;
- air2 = 1;
- }else if(sw2 == 0){
- air =2;
- air2 = 2;
- }else{
+ //加速度センサの値で角度を調整。
+ accell.getOutput(gd);
+ x = gd[0]/4*0.001;
+ y = gd[1]/4*0.001;
+ z = gd[2]/4*0.001;
+ tilt.setProcessValue(atan2(x,y));
+ tc = tilt.compute();
+ motor.speed(tc);
+ printf("%f\n\r",atan2(x,y));
+
+ //発射官制
+ if (sw == 0 && c == 0) {
+ sound();
+ sho.attach(&shoot,3.0);
+ c = 1;
+ } else if(sw2 == 0 && c == 0) {
+ sound();
+ rev.attach(&ret,3.0);
+ c = 1;
+ } else {
air = 0;
air2 = 0;
}