Changeset 321 for EcnlProtoTool/trunk/mrbgems/mruby-arduino/src/sServo.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/mrbgems/mruby-arduino/src/sServo.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 1 1 /* 2 * ãµã¼ãã»ãã¼ãé¢é£2 * サーボ・ハード関連 3 3 * 4 4 * Copyright (c) 2016 Wakayama.rb Ruby Board developers … … 22 22 23 23 /******************************************************/ 24 /* ãµã¼ãåºåãä»»æã®ãã³ã«å²ãå½ã¦ã¾ã: Servo.attach*/24 /* サーボ出力を任意のピンに割り当てます: Servo.attach*/ 25 25 /* Servo.attach(ch, pin[,min,max])*/ 26 /* ch: ãµã¼ãã®ãã£ãã« 0ï½11ã¾ã§æå®ã§ãã¾ã*/ 27 /* pin: å²ãå½ã¦ããã³çªå·*/ 28 /* min: ãµã¼ãã®è§åº¦ã0度ã®ã¨ãã®ãã«ã¹å¹ 29 (ãã¤ã¯ãç§)ãããã©ã«ãã¯544*/ 30 /* max: ãµã¼ãã®è§åº¦ã180度ã®ã¨ãã®ãã«ã¹å¹ 31 (ãã¤ã¯ãç§)ãããã©ã«ãã¯2400*/ 26 /* ch: サーボのチャネル 0~11まで指定できます*/ 27 /* pin: 割り当てるピン番号*/ 28 /* min: サーボの角度が0度のときのパルス幅(マイクロ秒)。デフォルトは544*/ 29 /* max: サーボの角度が180度のときのパルス幅(マイクロ秒)。デフォルトは2400*/ 32 30 /******************************************************/ 33 31 mrb_value mrb_servo_attach(mrb_state *mrb, mrb_value self) … … 42 40 43 41 if (pinno >= 20) { 44 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/45 } 46 47 /* n ã2以ä¸ã®ã¨ãã¯ãminãå¼æ°ã«ç¡ãã®ã§ã*/42 return mrb_nil_value(); /*戻り値は無しですよ。*/ 43 } 44 45 /* nが2以下のときは、minが引数に無いので、 */ 48 46 if (n <= 2) { 49 47 min = 544; 50 48 } 51 49 52 /* n ã3以ä¸ã®ã¨ãã¯ãmaxãå¼æ°ã«ç¡ãã®ã§ã*/50 /* nが3以下のときは、maxが引数に無いので、 */ 53 51 if (n <= 3) { 54 52 max = 2400; … … 56 54 57 55 if (ch < 0 || ch >= ATTACH_MAX) { 58 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/56 return mrb_nil_value(); /*戻り値は無しですよ。*/ 59 57 } 60 58 … … 66 64 pin = get_pin(pintype_pwmout, pinno); 67 65 if (pin == NULL) 68 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/66 return mrb_nil_value(); /*戻り値は無しですよ。*/ 69 67 70 68 servo[ch] = pin; … … 72 70 servo[ch]->max = max; 73 71 74 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/75 } 76 77 /******************************************************/ 78 /* ãµã¼ãã®è§åº¦ãã»ãããã¾ã: Servo.write*/72 return mrb_nil_value(); /*戻り値は無しですよ。*/ 73 } 74 75 /******************************************************/ 76 /* サーボの角度をセットします: Servo.write*/ 79 77 /* Servo.write(ch,angle)*/ 80 /* ch: ãµã¼ãã®ãã£ãã« 0ï½11ã¾ã§æå®ã§ãã¾ã*/81 /* angle: è§åº¦ 0ï½180*/78 /* ch: サーボのチャネル 0~11まで指定できます*/ 79 /* angle: 角度 0~180*/ 82 80 /******************************************************/ 83 81 mrb_value mrb_servo_write(mrb_state *mrb, mrb_value self) … … 91 89 92 90 if (ch < 0 || ch >= ATTACH_MAX) { 93 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/91 return mrb_nil_value(); /*戻り値は無しですよ。*/ 94 92 } 95 93 96 94 if (servo[ch] == NULL) { 97 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/95 return mrb_nil_value(); /*戻り値は無しですよ。*/ 98 96 } 99 97 … … 106 104 pwmout_pulsewidth_us(&servo[ch]->pwmout, (angle * (max - min)) / 180 + min); 107 105 108 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/109 } 110 111 /******************************************************/ 112 /* ãµã¼ãã¢ã¼ã¿ã«usåä½ã§è§åº¦ãæå®ãã: Servo.us*/106 return mrb_nil_value(); /*戻り値は無しですよ。*/ 107 } 108 109 /******************************************************/ 110 /* サーボモータにus単位で角度を指定する: Servo.us*/ 113 111 /* Servo.us(ch,us)*/ 114 /* ch: ãµã¼ãã®ãã£ãã« 0ï½11ã¾ã§æå®ã§ãã¾ã*/ 115 /* us: åºåããããã«ã¹ã®å¹ 116 1ï½19999, 0ã§åºå OFF*/ 117 /* ãµã¼ãã¢ã¼ã¿ã«ä¸ãããããã«ã¹ã¯20mså¨æã§ã1å¨æä¸ã®Highã®æéãç´æ¥æå®ããã*/ 118 /* å®è³ªçã«PWMåºåãé£ç¶å転ã¿ã¤ãã®ãµã¼ãã§ã¯ãå転ã®ã¹ãã¼ããè¨å®ãããã¨ãã§ããã*/ 112 /* ch: サーボのチャネル 0~11まで指定できます*/ 113 /* us: 出力したいパルスの幅 1~19999, 0で出力 OFF*/ 114 /* サーボモータに与えられるパルスは20ms周期で、1周期中のHighの時間を直接指定する。*/ 115 /* 実質的にPWM出力。連続回転タイプのサーボでは、回転のスピードが設定することができる。*/ 119 116 /******************************************************/ 120 117 mrb_value mrb_servo_us(mrb_state *mrb, mrb_value self) … … 126 123 127 124 if (ch < 0 || ch >= ATTACH_MAX) { 128 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/125 return mrb_nil_value(); /*戻り値は無しですよ。*/ 129 126 } 130 127 131 128 if (servo[ch] == 0) { 132 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/129 return mrb_nil_value(); /*戻り値は無しですよ。*/ 133 130 } 134 131 135 132 pwmout_pulsewidth_us(&servo[ch]->pwmout, us); 136 133 137 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/138 } 139 140 /******************************************************/ 141 /* æå¾ã«è¨å®ãããè§åº¦ãèªã¿åºã: Servo.read*/134 return mrb_nil_value(); /*戻り値は無しですよ。*/ 135 } 136 137 /******************************************************/ 138 /* 最後に設定された角度を読み出す: Servo.read*/ 142 139 /* Servo.read(ch)*/ 143 /* ch: ãµã¼ãã®ãã£ãã« 0ï½11ã¾ã§æå®ã§ãã¾ã*/144 /* æ»ãå¤*/145 /* ãã¤ã¯ãç§åä½ us(ch) ã§ä¸ããå¤ã¯èªã¿ã¨ããªã*/140 /* ch: サーボのチャネル 0~11まで指定できます*/ 141 /* 戻り値*/ 142 /* マイクロ秒単位 us(ch) で与えた値は読みとれない*/ 146 143 /******************************************************/ 147 144 mrb_value mrb_servo_read(mrb_state *mrb, mrb_value self) … … 166 163 167 164 /******************************************************/ 168 /* ãã³ã«ãµã¼ããå²ãå½ã¦ããã¦ãããã確èªãã: Servo.attached*/165 /* ピンにサーボが割り当てられているかを確認する: Servo.attached*/ 169 166 /* Servo.attached(ch)*/ 170 /* ch: ãµã¼ãã®ãã£ãã« 0ï½11ã¾ã§æå®ã§ãã¾ã*/171 /* æ»ãå¤*/172 /* 1: å²ãå½ã¦ããã¦ãã*/173 /* 0: å²ãå½ã¦ã¯ãªã*/167 /* ch: サーボのチャネル 0~11まで指定できます*/ 168 /* 戻り値*/ 169 /* 1: 割り当てられている*/ 170 /* 0: 割り当てはない*/ 174 171 /******************************************************/ 175 172 mrb_value mrb_servo_attached(mrb_state *mrb, mrb_value self) … … 196 193 197 194 /******************************************************/ 198 /* ãµã¼ãã®åä½ãæ¢ããå²ãè¾¼ã¿ãç¦æ¢ãã: Servo.detach*/195 /* サーボの動作を止め、割り込みを禁止する: Servo.detach*/ 199 196 /* Servo.detach(ch)*/ 200 /* ch: ãµã¼ãã®ãã£ãã« 0ï½9ã¾ã§æå®ã§ãã¾ã*/197 /* ch: サーボのチャネル 0~9まで指定できます*/ 201 198 /******************************************************/ 202 199 mrb_value mrb_servo_detach(mrb_state *mrb, mrb_value self) … … 207 204 208 205 if (ch < 0 || ch >= ATTACH_MAX) { 209 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/206 return mrb_nil_value(); /*戻り値は無しですよ。*/ 210 207 } 211 208 212 209 if (servo[ch] == NULL) { 213 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/210 return mrb_nil_value(); /*戻り値は無しですよ。*/ 214 211 } 215 212 … … 217 214 servo[ch] = 0; 218 215 219 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/220 } 221 222 /******************************************************/ 223 /* ã©ã¤ãã©ãªãå®ç¾©ãã¾ã*/216 return mrb_nil_value(); /*戻り値は無しですよ。*/ 217 } 218 219 /******************************************************/ 220 /* ライブラリを定義します*/ 224 221 /******************************************************/ 225 222 void servo_Init(mrb_state *mrb)
Note:
See TracChangeset
for help on using the changeset viewer.