Changeset 321 for EcnlProtoTool/trunk/mrbgems/mruby-arduino/src/sI2c.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/sI2c.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 * I2C éä¿¡é¢é£2 * I2C通信関連 3 3 * 4 4 * Copyright (c) 2016 Wakayama.rb Ruby Board developers … … 23 23 24 24 /******************************************************/ 25 /* ã¡ã¢ãªã®éæ¾æã«èµ°ã*/25 /* メモリの開放時に走る*/ 26 26 /******************************************************/ 27 27 static void i2c_free(mrb_state *mrb, void *ptr) … … 32 32 33 33 /******************************************************/ 34 /* ãã®æ§é ä½ã®æå³ã¯ããããã£ã¦ããªã*/34 /* この構造体の意味はよくわかっていない*/ 35 35 /******************************************************/ 36 36 static struct mrb_data_type i2c_type = {"I2c", i2c_free}; 37 37 38 38 /******************************************************/ 39 /* I2C ãåæåãã¾ã: I2c.new*/40 /* I2c.new(num) ã*/41 /* num: éä¿¡çªå·(0:SDA-0/SCL-1, 1:SDA-5/SCL-6, 2:SDA-7/SCL-8, 3:SDA-12/SCL-11, 4:SDA-9(26)/SCL-3)*/42 /**/ 43 /* æ»ãå¤*/44 /* I2c ã®ã¤ã³ã¹ã¿ã³ã¹*/39 /* I2Cを初期化します: I2c.new*/ 40 /* I2c.new(num) */ 41 /* num: 通信番号(0:SDA-0/SCL-1, 1:SDA-5/SCL-6, 2:SDA-7/SCL-8, 3:SDA-12/SCL-11, 4:SDA-9(26)/SCL-3)*/ 42 /**/ 43 /* 戻り値*/ 44 /* I2cのインスタンス*/ 45 45 /******************************************************/ 46 46 static mrb_value mrb_i2c_initialize(mrb_state *mrb, mrb_value self) … … 55 55 56 56 if (num <= 0 && num >= WIRE_MAX) { 57 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/57 return mrb_nil_value(); /*戻り値は無しですよ。*/ 58 58 } 59 59 … … 66 66 67 67 /******************************************************/ 68 /* ã¢ãã¬ã¹ã«ãã¼ã¿ãæ¸ãè¾¼ã¿ã¾ã: I2c.write*/68 /* アドレスにデータを書き込みます: I2c.write*/ 69 69 /* I2c.write( deviceID, address, data )*/ 70 /* deviceID: ããã¤ã¹ID*/71 /* address: æ¸ãè¾¼ã¿ã¢ãã¬ã¹*/72 /* data: ãã¼ã¿*/73 /**/ 74 /* æ»ãå¤ã¯ä»¥ä¸ã®ã¨ãã*/75 /* 0: æå*/76 /* 4: ãã®ä»ã®ã¨ã©ã¼*/70 /* deviceID: デバイスID*/ 71 /* address: 書き込みアドレス*/ 72 /* data: データ*/ 73 /**/ 74 /* 戻り値は以下のとおり*/ 75 /* 0: 成功*/ 76 /* 4: その他のエラー*/ 77 77 /******************************************************/ 78 78 mrb_value mrb_i2c_write(mrb_state *mrb, mrb_value self) … … 88 88 89 89 /******************************************************/ 90 /* ã¢ãã¬ã¹ãããã¼ã¿ãèªã¿è¾¼ã¿: I2c.read*/90 /* アドレスからデータを読み込み: I2c.read*/ 91 91 /* I2c.read( deviceID, addressL[, addressH] )*/ 92 /* deviceID: ããã¤ã¹ID*/93 /* addressL: èªã¿è¾¼ã¿ä¸ä½ã¢ãã¬ã¹*/94 /* addressH: èªã¿è¾¼ã¿ä¸ä½ã¢ãã¬ã¹*/95 /**/ 96 /* æ»ãå¤ã¯èªã¿è¾¼ãã å¤*/92 /* deviceID: デバイスID*/ 93 /* addressL: 読み込み下位アドレス*/ 94 /* addressH: 読み込み上位アドレス*/ 95 /**/ 96 /* 戻り値は読み込んだ値*/ 97 97 /******************************************************/ 98 98 mrb_value mrb_i2c_read(mrb_state *mrb, mrb_value self) … … 113 113 114 114 /******************************************************/ 115 /* I2C ããã¤ã¹ã«å¯¾ãã¦éä¿¡ãéå§ããããã®æºåããã: I2c.begin*/115 /* I2Cデバイスに対して送信を開始するための準備をする: I2c.begin*/ 116 116 /* I2c.begin( deviceID )*/ 117 /* ãã®é¢æ°ã¯éä¿¡ãããã¡ãåæåããã ãã§ãå®éã®åä½ã¯è¡ããªããç¹°ãè¿ãå¼ã¶ã¨ãéä¿¡ãããã¡ãå 118 é ã«æ»ãã*/ 119 /* deviceID: ããã¤ã¹ID 0ï½0x7Fã¾ã§ã®ç´ç²ãªã¢ãã¬ã¹*/ 117 /* この関数は送信バッファを初期化するだけで、実際の動作は行わない。繰り返し呼ぶと、送信バッファが先頭に戻る。*/ 118 /* deviceID: デバイスID 0~0x7Fまでの純粋なアドレス*/ 120 119 /******************************************************/ 121 120 mrb_value mrb_i2c_beginTransmission(mrb_state *mrb, mrb_value self) … … 130 129 i2c_byte_write(i2c, deviceID); 131 130 132 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/133 } 134 135 /******************************************************/ 136 /* éä¿¡ãããã¡ã®æ«å°¾ã«æ°å¤ã追å ãã: I2c.lwrite*/131 return mrb_nil_value(); /*戻り値は無しですよ。*/ 132 } 133 134 /******************************************************/ 135 /* 送信バッファの末尾に数値を追加する: I2c.lwrite*/ 137 136 /* I2c.lwrite( data )*/ 138 /* data: ã»ããããå¤*/139 /**/ 140 /* æ»ãå¤ã¯ãéä¿¡ãããã¤ãæ°(ãããã¡ã«æºãããã¤ãæ°)ãè¿ãã*/141 /* éä¿¡ãããã¡(260ãã¤ã)ã«ç©ºã容éãç¡ããã°å¤±æãã¦0ãè¿ã*/137 /* data: セットする値*/ 138 /**/ 139 /* 戻り値は、送信したバイト数(バッファに溜めたバイト数)を返す。*/ 140 /* 送信バッファ(260バイト)に空き容量が無ければ失敗して0を返す*/ 142 141 /******************************************************/ 143 142 mrb_value mrb_i2c_lwrite(mrb_state *mrb, mrb_value self) … … 153 152 154 153 /******************************************************/ 155 /* ããã¤ã¹ã«å¯¾ãã¦I2Cã®éä¿¡ã·ã¼ã±ã³ã¹ãçºè¡ãã: I2c.end*/154 /* デバイスに対してI2Cの送信シーケンスを発行する: I2c.end*/ 156 155 /* I2c.end()*/ 157 /* I2C ã®éä¿¡ã¯ãã®é¢æ°ãå®è¡ãã¦åãã¦å®éã«è¡ãããã*/158 /**/ 159 /* æ»ãå¤ã¯ä»¥ä¸ã®ã¨ãã*/160 /* 0: æå*/161 /* 4: ãã®ä»ã®ã¨ã©ã¼*/156 /* I2Cの送信はこの関数を実行して初めて実際に行われる。*/ 157 /**/ 158 /* 戻り値は以下のとおり*/ 159 /* 0: 成功*/ 160 /* 4: その他のエラー*/ 162 161 /******************************************************/ 163 162 mrb_value mrb_i2c_endTransmission(mrb_state *mrb, mrb_value self) … … 169 168 170 169 /******************************************************/ 171 /* ããã¤ã¹ã«å¯¾ãã¦åä¿¡ã·ã¼ã±ã³ã¹ãçºè¡ããã¼ã¿ãèªã¿åºã: I2c.request*/170 /* デバイスに対して受信シーケンスを発行しデータを読み出す: I2c.request*/ 172 171 /* I2c.request( address, count )*/ 173 /* num: éä¿¡çªå·(0:SDA-0/SCL-1, 1:SDA-5/SCL-6, 2:SDA-7/SCL-8, 3:SDA-12/SCL-11, 4:SDA-9(26)/SCL-3)*/174 /* address: èªã¿è¾¼ã¿éå§ã¢ãã¬ã¹*/175 /* count: èªã¿åºãæ°*/176 /**/ 177 /* æ»ãå¤ã¯ãå®éã«åä¿¡ãããã¤ãæ°ã*/172 /* num: 通信番号(0:SDA-0/SCL-1, 1:SDA-5/SCL-6, 2:SDA-7/SCL-8, 3:SDA-12/SCL-11, 4:SDA-9(26)/SCL-3)*/ 173 /* address: 読み込み開始アドレス*/ 174 /* count: 読み出す数*/ 175 /**/ 176 /* 戻り値は、実際に受信したバイト数。*/ 178 177 /******************************************************/ 179 178 mrb_value mrb_i2c_requestFrom(mrb_state *mrb, mrb_value self) … … 192 191 193 192 /******************************************************/ 194 /* ããã¤ã¹ã«å¯¾ãã¦åä¿¡ã·ã¼ã±ã³ã¹ãçºè¡ããã¼ã¿ãèªã¿åºã: I2c.lread*/193 /* デバイスに対して受信シーケンスを発行しデータを読み出す: I2c.lread*/ 195 194 /* I2c.lread()*/ 196 195 /**/ 197 /* æ»ãå¤ã¯èªã¿è¾¼ãã å¤*/196 /* 戻り値は読み込んだ値*/ 198 197 /******************************************************/ 199 198 mrb_value mrb_i2c_lread(mrb_state *mrb, mrb_value self) … … 204 203 205 204 /******************************************************/ 206 /* ããã¤ã¹ã«å¯¾ãã¦åä¿¡ãããã¡å 207 ã«ãããã¼ã¿æ°ã調ã¹ã: I2c.available*/ 205 /* デバイスに対して受信バッファ内にあるデータ数を調べる: I2c.available*/ 208 206 /* I2c.available()*/ 209 207 /**/ 210 /* æ»ãå¤ã¯ãã¼ã¿æ°*/208 /* 戻り値はデータ数*/ 211 209 /******************************************************/ 212 210 mrb_value mrb_i2c_available(mrb_state *mrb, mrb_value self) … … 217 215 #if 0 218 216 /******************************************************/ 219 /* å¨æ³¢æ°ãå¤æ´ãã: I2c.freq*/217 /* 周波数を変更する: I2c.freq*/ 220 218 /* I2c.freq( Hz )*/ 221 /* Hz: ã¯ããã¯ã®å¨æ³¢æ°ãHzåä½ã§æå®ããã*/222 /* æå¹ãªå¤ã¯1ï½200000ç¨åº¦ãåºæ¬çã«ã½ããã§ãã£ã¦ããã®ã§400kHzã¯åºãªãã*/219 /* Hz: クロックの周波数をHz単位で指定する。*/ 220 /* 有効な値は1~200000程度。基本的にソフトでやっているので400kHzは出ない。*/ 223 221 /******************************************************/ 224 222 mrb_value mrb_i2c_freq(mrb_state *mrb, mrb_value self) … … 230 228 i2c_frequency(i2c, fq); 231 229 232 return mrb_nil_value(); /* æ»ãå¤ã¯ç¡ãã§ããã*/230 return mrb_nil_value(); /* 戻り値は無しですよ。 */ 233 231 } 234 232 #endif 235 233 /******************************************************/ 236 /* ã©ã¤ãã©ãªãå®ç¾©ãã¾ã*/234 /* ライブラリを定義します*/ 237 235 /******************************************************/ 238 236 void i2c_Init(mrb_state *mrb)
Note:
See TracChangeset
for help on using the changeset viewer.