kakunin

Dependencies:   ADXL345 HMC6352 Motor PID SoftPWM mbed

Files at this revision

API Documentation at this revision

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

ADXL345.lib Show annotated file Show diff for this revision Revisions of this file
Motor.lib Show annotated file Show diff for this revision Revisions of this file
PID.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- /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;
         }