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.
Revision 0:ebf41685fa06, committed 2016-10-21
- Comitter:
- kohacraft
- Date:
- Fri Oct 21 02:04:30 2016 +0000
- Commit message:
- ver1.0
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
| mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 000000000000 -r ebf41685fa06 main.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Fri Oct 21 02:04:30 2016 +0000
@@ -0,0 +1,113 @@
+//はじめての手作りマイコンロボット実験セットのプログラムです
+#include "mbed.h"
+
+PwmOut ude1(dp1); //右の腕のサーボモータ制御に使います
+PwmOut ude2(dp2); //左の腕のサーボモータ制御に使います
+
+DigitalOut asi1(dp18); //右のモーターを動かすのに使います
+DigitalOut asi2(dp24); //左のモーターを動かすのに使います
+
+DigitalOut sp(dp4); //モーター動作中の時にONになります
+
+
+DigitalIn mae(dp10); //両方のモータを回すためのスイッチをつなぎます
+DigitalIn hidari(dp11); //左のモータを回すためのスイッチをつなぎます
+DigitalIn migi(dp9); //右のモータを回すためのスイッチをつなぎます
+
+DigitalOut me1(dp13); //まばたきする目のLEDをつなぎます
+DigitalOut me2(dp14); //まばたきする目のLEDをつなぎます
+
+
+//タイマー割り込みでうでをふる
+//sin関数を使い振り子のようになめらかに行ったり来たりするようサーボモーターを動かします
+Ticker udehuriTimer;
+float kakudo=0.0;
+void udehuri() {
+ kakudo += 360/100; //タイマー割り込みが実行されるごとにsin関数の角度を360/100度ずつ増やします
+ //100の部分を50などに減らすと腕の振りが速くなり、200などに増やすと振りが遅くなります
+ if( kakudo > 360 ) //最大角度を超えたら0度に戻す
+ kakudo = 0.0;
+ float ude;
+ ude = ( sin( kakudo *2*3.14/360 ) + 1.0 )/1.5 + 1.0; //1から2くらいになる
+ //sin( kakudo *2*3.14/360 )+1.0 は0→2→0→2と0~2の範囲でなめらなに行ったり来たりする式です
+ //その値を1.5で割るので0~1.3の範囲で変化し、最後に1.0を足すので1.0~2.3の範囲の値になります。
+ //サーボモーターに設定できる値は0.5~2.5の範囲内です。この時サーボの角度は約180度動きます
+ //上記のプログラムでは約半分の100度程度腕を振ります
+ //ude = ( sin( kakudo *2*3.14/360 ) + 1.0 )/1.0 + 0.5;
+ //とすると0.5~2.5の範囲になり、腕が最大の振り幅の180度になります
+ ude = ude / 20.0; //サーボのPWMの幅の比率に変換します
+
+ ude1 = ude;
+ ude2 = ude;
+}
+
+//タイマー割り込みでまばたきさせる
+Ticker blink;
+void mabataki(){
+ me1 = 0; //目のLEDをOFFします
+ me2 = 0;
+ wait(0.05); //0.05秒待って
+ me1 = 1; //目のLEDをONします
+ me2 = 1;
+}
+
+int main() {
+
+
+ asi1 = 0;
+ asi2 = 0;
+ ude1.period_ms(20); //サーボモーターの制御信号の周期が20msなのでその設定をします
+ ude2.period_ms(20);
+ ude1 = 1.5/20.0; //腕を真ん中の角度にします
+ ude2 = 1.5/20.0;
+
+ me1 = 1;
+ me2 = 1;
+ blink.attach(&mabataki, 4.0); //4秒ごとにまばたきのプログラムが実行されるようタイマー割り込みをセットします
+ while(1)
+ {
+ //前ボタンでで両方の足が回る
+ if( mae == 1 )
+ {
+ sp = 1;
+ udehuriTimer.attach(&udehuri, 0.02);//0.02秒ごとに腕振りのプログラムが実行されるようタイマー割り込みをセットします
+ asi1 = 1; //右のモーターを回転させます
+ asi2 = 1; //左のモーターを回転させます
+ wait(0.1); //0.1秒モータを回転させたまま待ちます
+ udehuriTimer.detach(); //腕振りのタイマー割り込みを終了させます
+ asi1 = 0; //右のモーターを停止させます
+ asi2 = 0; //左のモーターを停止させます
+ }
+
+ //右ボタンで右のモーターが回る
+ if( migi == 1 )
+ {
+ sp = 1;
+ udehuriTimer.attach(&udehuri, 0.02);
+ asi1 = 1; //右のモーターを回転させます
+ wait(0.1);
+ udehuriTimer.detach();
+ asi1 = 0; //右のモーターを停止させます
+ }
+
+ //左ボタンで左のモーターが回る
+ if( hidari == 1 )
+ {
+ sp = 1;
+ udehuriTimer.attach(&udehuri, 0.02);
+ asi2 = 1; //左のモーターを回転させます
+ wait(0.1);
+ udehuriTimer.detach();
+ asi2 = 0; //左のモーターを停止させます
+ }
+
+ //全てのボタンを押してなければ音楽を止める
+ if( mae == 0 && migi == 0 && hidari == 0)
+ {
+ sp = 0;
+ }
+
+ }
+
+
+}
diff -r 000000000000 -r ebf41685fa06 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Fri Oct 21 02:04:30 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/25aea2a3f4e3 \ No newline at end of file