{"id":146,"date":"2012-02-21T15:27:23","date_gmt":"2012-02-21T06:27:23","guid":{"rendered":"http:\/\/www.gvc-on.net\/?page_id=146"},"modified":"2014-01-21T14:52:22","modified_gmt":"2014-01-21T05:52:22","slug":"arduino-pic-data-io-by-i2c-wire-library","status":"publish","type":"page","link":"https:\/\/www.gvc-on.net\/?page_id=146","title":{"rendered":"Arduino I2C PIC DATA I\/O (Wire Library)"},"content":{"rendered":"<p>Arduino\u306bI2C\u63a5\u7d9a\u3057\u305fPIC\u3068\u30c7\u30fc\u30bf\u3092\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u3001Arduino\u5074\u306e\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u3067\u3059\u3002<br \/>\n\u30b5\u30f3\u30d7\u30eb\u3067\u306f4\u30d0\u30a4\u30c8\u306e\u30c7\u30fc\u30bf\u3092PIC\u304b\u3089\u53d7\u3051\u3066\u3001\u305d\u308c\u3092\u305d\u306e\u307e\u307e\u53d7\u3051\u305f\u9806\u756a\u3067GVC\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u30b7\u30ea\u30a2\u30eb\u304b\u3089\u9001\u4fe1\u3057\u3066\u3044\u307e\u3059\u3002<br \/>\nGVC\u306e\u30c7\u30fc\u30e2\u30f3\u3067\u3042\u308bgvcd\u3067\u30b7\u30ea\u30a2\u30eb\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d7\u3051\u308b\u4e8b\u3092\u60f3\u5b9a\u3057\u3066\u3044\u307e\u3059\u306e\u3067\u3001\u5b9f\u969b\u306e\u30c7\u30fc\u30bf\u306e\u8a08\u7b97\u306a\u3069\u306fArduino\u3088\u308a\u3082\u305f\u3076\u3093\u5f37\u529b\u306a\u51e6\u7406\u80fd\u529b\u306e\u6709\u308bgvcd\u5074(Linux\u5074)\u3067\u884c\u3063\u3066\u3001\u6700\u7d42\u7684\u306bsyslog\u306b\u51fa\u529b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<pre class=\"brush: cpp; title: ; notranslate\" title=\"\">\r\n\/\/ --------------------------------------------------\r\n\/\/ Global Versatile Controler\r\n\/\/ --------------------------------------------------\r\n\/\/ --------------------------------------------------\r\n\/\/ Memo\r\n\/\/ --------------------------------------------------\r\n\/\/ ------------------------------\r\n\/\/ BASE\r\n\/\/ ------------------------------\r\n\/\/ New BSD License. Copyright (c) 2011-2012, Future Versatile Group\r\n\/\/ All rights reserved.\r\n\/\/\r\n\/\/ 2011.11.04 T.Kabu\r\n\/\/ 2011.11.18 H.A.\r\n\/\/ 2011.12.02 Arduino-IDE VerUp to 1.0\r\n\/\/ 2011.12.13 T.Kabu \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u30d9\u30fc\u30b9\u306a\u306e\u3067\u3001\u5b9a\u6570\u3092\u5404\u30e2\u30b8\u30e5\u30fc\u30eb\u306b\u5225\u9014\u8a18\u8ff0\u3068\u3057\u305f\r\n\/\/\r\n\/\/ \u203b\u3053\u306e\u30bd\u30fc\u30b9\u306f\u30b5\u30f3\u30d7\u30eb\u3067\u3059\u3002GVC\u30d7\u30ed\u30c8\u30b3\u30eb\u306f\u73fe\u5728\u3082\u4ed5\u69d8\u7b56\u5b9a\u4e2d\u306a\u306e\u3067\u30bd\u30fc\u30b9\u304c\u5909\u66f4\u306b\u306a\u308b\u5834\u5408\u304c\u3042\u308a\u307e\u3059\u3002\r\n\r\n\/\/---------------------------------------------------\r\n\/\/ include\r\n\/\/---------------------------------------------------\r\n#include &lt;Wire.h&gt;                \/\/ for I2C device\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Const Define\r\n\/\/ --------------------------------------------------\r\n#define    SOFTNAME        &quot;Global Versatile Controler&quot;\r\n#define    SOFTVER         &quot;0.00&quot;\r\n\r\n#define    GVC_MSG_MAX     64           \/\/ Arduino have only 1024Bytes!!\r\n\r\n#define    GVC_MSG_END     0x00         \/\/ Message delimiter\r\n\r\n#define    GVC_MSG_OTHER   '!'          \/\/ START, RESET, INFO, etc\r\n\r\n#define    GVC_DEV_00    0              \/\/ GVC DEVICE NO 0 (DO NOT USE THIS!!)\r\n#define    GVC_DEV_01    1              \/\/ GVC DEVICE NO 1\r\n#define    GVC_DEV_02    2              \/\/ GVC DEVICE NO 2\r\n#define    GVC_DEV_03    3              \/\/ GVC DEVICE NO 3\r\n#define    GVC_DEV_04    4              \/\/ GVC DEVICE NO 4\r\n#define    GVC_DEV_05    5              \/\/ GVC DEVICE NO 5\r\n\r\n#define    LED    13                    \/\/ LED Port\r\n\r\n\/\/ ------------------------------\r\n\/\/ Define PIC(12F1822) IN\/OUT\r\n\/\/ ------------------------------\r\n#define    PIC_ADDRESS      0x20        \/\/ I2C Device ID : PIC(12F1822)\r\n\r\n#define    GVC_MSG_PICDIO   0x20        \/\/ PIC(12F1822) DATA IN\/OUT\r\n\r\n#define    GVC_PICDIO_SIZE   8          \/\/ GVC PIC DATA ONLY MESSAGE SIZE = 8 bytes\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Structure\r\n\/\/ --------------------------------------------------\r\n\/\/ ------------------------------\r\n\/\/ GVC Message : BASIC\r\n\/\/ ------------------------------\r\nstruct _GVC_MSG_BASIC\r\n{\r\n  char    msg_type;                    \/\/ Message Type\r\n  char    dev_num;                     \/\/ Module No.\r\n  char    msg_format;                  \/\/ Message Format\r\n  char    msg_data&#x5B;GVC_MSG_MAX];       \/\/ Message Data\r\n};\r\n\r\n\/\/ ------------------------------\r\n\/\/ GVC Message : PIC(12F1822) IN\/OUT\r\n\/\/ ------------------------------\r\nstruct _GVC_MSG_PICDATAINOUT\r\n{\r\n    char    msg_type;                  \/\/ Message Type\r\n    char    dev_num;                   \/\/ Module No.\r\n    char    msg_format;                \/\/ Message Format\r\n    char    msg_data&#x5B;4];               \/\/ Message Data\r\n    char    msg_end ;                  \/\/ Message End\r\n};\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Variable Param\r\n\/\/ --------------------------------------------------\r\n\/\/ ------------------------------\r\n\/\/ GVC Message Length\r\n\/\/ ------------------------------\r\nint gvc_msg_len;\r\n\r\n\/\/ ------------------------------\r\n\/\/ GVC Message : FIRST\r\n\/\/ ------------------------------\r\nchar GVC_FIRST_MSG&#x5B;] = {0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xab, 0x00};\r\n\r\n\/\/ ------------------------------\r\n\/\/ GVC Message : BASIC\r\n\/\/ ------------------------------\r\nstruct _GVC_MSG_BASIC    gvc_msg;\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Sub Routine\r\n\/\/ --------------------------------------------------\r\n\/\/ ------------------------------\r\n\/\/ Send Start Frame\r\n\/\/ ------------------------------\r\nvoid send_startframe()\r\n{\r\n  \/\/ GVC Message Set (First message)\r\n  \/\/ Serial OUTPUT\r\n  Serial.write((uint8_t *)&amp;GVC_FIRST_MSG, 9);\r\n\r\n  \/\/ GVC Message Set (First message)\r\n  \/\/ Serial OUTPUT\r\n  Serial.write((uint8_t *)&amp;GVC_FIRST_MSG, 9);\r\n\r\n  \/\/ GVC Message Set (First message)\r\n  \/\/ Serial OUTPUT\r\n  Serial.write((uint8_t *)&amp;GVC_FIRST_MSG, 9);\r\n}\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Setup\r\n\/\/ --------------------------------------------------\r\nvoid setup()\r\n{\r\n    \/\/ Start Serial Port\r\n    Serial.begin(9600);\r\n\r\n    \/\/ Send Start Frame\r\n    send_startframe();\r\n\r\n    \/\/ GVC Message Set (Init message)\r\n    gvc_msg.msg_type = GVC_MSG_OTHER;  \/\/ '!'\r\n    gvc_msg.dev_num = GVC_DEV_01; \/\/ DEVICE NUM (1..254)\r\n    gvc_msg.msg_format = 0x00;    \/\/ 0x00 = INITIAL Message\r\n    sprintf(gvc_msg.msg_data, &quot;%s %s&quot;, SOFTNAME, SOFTVER);\r\n    \/\/ GVC Message Length Set (Dont forget NULL!!)\r\n    gvc_msg_len = 3 + strlen(gvc_msg.msg_data) + 1;\r\n    \/\/ Serial OUTPUT\r\n    Serial.write((uint8_t *)&amp;gvc_msg, gvc_msg_len);\r\n\r\n    \/\/ GVC Message Set (Start message)\r\n    gvc_msg.msg_type = GVC_MSG_OTHER;  \/\/ '!'\r\n    gvc_msg.dev_num = GVC_DEV_01; \/\/ DEVICE NUM (1..254)\r\n    gvc_msg.msg_format = 0x10;    \/\/ 0x10 = NORMAL Message\r\n    sprintf(gvc_msg.msg_data, &quot;GVC START&quot;);\r\n    \/\/ GVC Message Length Set (Dont forget NULL!!)\r\n    gvc_msg_len = 3 + strlen(gvc_msg.msg_data) + 1;\r\n    \/\/ Serial OUTPUT\r\n    Serial.write((uint8_t *)&amp;gvc_msg, gvc_msg_len);\r\n\r\n    \/\/ Setup LED\r\n    pinMode(LED,OUTPUT);\r\n\r\n    \/\/ Open I2C device\r\n    Wire.begin();\r\n}\r\n\r\n\/\/ ------------------------------\r\n\/\/ Get DATA from PIC(12F1822)\r\n\/\/ ------------------------------\r\nvoid get_picdataio(void * msg_ptr)\r\n{\r\n    struct _GVC_MSG_PICDATAINOUT    *gvc_pic;    \/\/ GVC\u30e1\u30c3\u30bb\u30fc\u30b8(PIC DATA I\/O)\r\n    byte    i2c_cmd&#x5B;] = {0x01, 0x11, 0x00};      \/\/ I2C\u7528\u30b3\u30de\u30f3\u30c9\u3001Arduino\u306ebyte\u3068Linux\u306ebyte\u578b\u306f\u9055\u3046\u304b\u3082\u3057\u308c\u306a\u3044\u306e\u3067\u6ce8\u610f\r\n    char    data&#x5B;4];                             \/\/ PIC\u304b\u3089\u306e\u30c7\u30fc\u30bf\r\n\r\n    \/\/ GVC Message Set (Temparature message)\r\n    gvc_pic = (struct _GVC_MSG_PICDATAINOUT *)msg_ptr;\r\n\r\n    \/\/ PIC(12F1822)\u306b\u5bfe\u3057\u3066\u30c7\u30fc\u30bf\u8981\u6c42\r\n    Wire.beginTransmission(PIC_ADDRESS);         \/\/ PIC(12F1822)\u306e\u30c7\u30d0\u30a4\u30b9ID\u306b\u5bfe\u3057\u3066\r\n    Wire.write(i2c_cmd, 3);                      \/\/ I2C\u30b3\u30de\u30f3\u30c9\u3092\u9001\u4fe1\r\n    Wire.endTransmission();                      \/\/ \u9001\u4fe1\u7d42\u4e86\r\n    Wire.requestFrom(PIC_ADDRESS, 4);            \/\/ PIC(12F1822)\u304b\u3089\u30c7\u30fc\u30bf\u30924\u30d0\u30a4\u30c8\u3092\u53d7\u4fe1\u3059\u308b\r\n\r\n    \/\/ \u30c7\u30fc\u30bf\u304c\u6765\u308b\u307e\u3067\u30eb\u30fc\u30d7\u3057\u3066\u5f85\u3064\r\n    while (Wire.available() &lt; 1)\r\n    {\r\n        \/\/ \u5fc5\u8981\u306a\u3089\u30bf\u30a4\u30de\u30fc\u5272\u308a\u8fbc\u307f\u3092\u7528\u610f\u3057\u3066\u3001\u30bf\u30a4\u30e0\u30a2\u30a6\u30c8\u2192\u30a8\u30e9\u30fc\u51e6\u7406\u3068\u3059\u308b\u3053\u3068\r\n    }\r\n\r\n    \/\/ \u30c7\u30fc\u30bf\u3092\u53d7\u4fe1\r\n    gvc_pic-&gt;msg_data&#x5B;0] = Wire.read();                \/\/ \uff11\u30d0\u30a4\u30c8\u53d7\u4fe1\r\n    gvc_pic-&gt;msg_data&#x5B;1] = Wire.read();                \/\/ \uff11\u30d0\u30a4\u30c8\u53d7\u4fe1\r\n    gvc_pic-&gt;msg_data&#x5B;2] = Wire.read();                \/\/ \uff11\u30d0\u30a4\u30c8\u53d7\u4fe1\r\n    gvc_pic-&gt;msg_data&#x5B;3] = Wire.read();                \/\/ \uff11\u30d0\u30a4\u30c8\u53d7\u4fe1\r\n    Wire.endTransmission();               \/\/ \u9001\u4fe1\u7d42\u4e86\r\n\r\n    gvc_pic-&gt;msg_type = GVC_MSG_PICDIO;    \/\/ PIC(12F1822) DATA IN\/OUT\r\n    gvc_pic-&gt;dev_num = GVC_DEV_04;         \/\/ \u30c7\u30d0\u30a4\u30b9\u756a\u53f7(GVC\u306b\u63a5\u7d9a\u3055\u308c\u3066\u3044\u308b\u30c7\u30d0\u30a4\u30b9\u3068\u3057\u3066\u306e\u756a\u53f7...4\u3068\u3044\u3046\u306e\u306f\u9069\u5f53\u3067\u3059)\r\n    gvc_pic-&gt;msg_format = 0x01;            \/\/ FORMAT No.1 (TBD)\r\n\/\/    memcpy(gvc_pic-&gt;msg_data, data, 4);    \/\/ ... \u4e0a\u3067\u76f4\u63a5\u5165\u308c\u3066\u3044\u308b\u306e\u3067\u4e8c\u5ea6\u624b\u9593\u306f\u3057\u306a\u3044\r\n    gvc_pic-&gt;msg_end = GVC_MSG_END;        \/\/ NULL\r\n    \/\/ GVC Message Length Set (Dont forget NULL!!)\r\n}\r\n\r\n\/\/ --------------------------------------------------\r\n\/\/ Main loop\r\n\/\/ --------------------------------------------------\r\nvoid loop()\r\n{\r\n    \/\/ 1\u30b5\u30a4\u30af\u30eb\u958b\u59cb\u6642\u306bArduino\u306eLED\u70b9\u706f\uff08\u30dc\u30fc\u30c9\u306e\u52d5\u4f5c\u78ba\u8a8d\uff09\r\n    digitalWrite(13, HIGH);\r\n\r\n    \/\/ Send Start Frame\r\n    send_startframe();\r\n\r\n    \/\/ PIC(12F1822)\u304b\u3089\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\r\n    get_picdataio(&amp;gvc_msg);\r\n\r\n    \/\/ \u53d6\u5f97\u30c7\u30fc\u30bf\u3092gvcd\u306b\u9001\u4fe1\r\n    Serial.write((uint8_t *)&amp;gvc_msg,   GVC_PICDIO_SIZE);\r\n\r\n    \/\/ 1\u30b5\u30a4\u30af\u30eb\u7d42\u4e86\u6642\u306bArduino\u306eLED\u6d88\u706f\r\n    digitalWrite(13, LOW);\r\n\r\n    \/\/ 1\u79d2\u5f85\u3064\r\n    delay(1000);\r\n}\r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Arduino\u306bI2C\u63a5\u7d9a\u3057\u305fPIC\u3068\u30c7\u30fc\u30bf\u3092\u3084\u308a\u53d6\u308a\u3059\u308b\u305f\u3081\u306e\u3001Arduino\u5074\u306e\u30b5\u30f3\u30d7\u30eb\u30bd\u30fc\u30b9\u3067\u3059\u3002 \u30b5\u30f3\u30d7\u30eb\u3067\u306f4\u30d0\u30a4\u30c8\u306e\u30c7\u30fc\u30bf\u3092PIC\u304b\u3089\u53d7\u3051\u3066\u3001\u305d\u308c\u3092\u305d\u306e\u307e\u307e\u53d7\u3051\u305f\u9806\u756a\u3067GVC\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3067\u30b7\u30ea\u30a2\u30eb\u304b\u3089\u9001\u4fe1\u3057\u3066 &hellip; <a href=\"https:\/\/www.gvc-on.net\/?page_id=146\">\u7d9a\u304d\u3092\u8aad\u3080 <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":521,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-146","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=146"}],"version-history":[{"count":7,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/146\/revisions"}],"predecessor-version":[{"id":524,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/146\/revisions\/524"}],"up":[{"embeddable":true,"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=\/wp\/v2\/pages\/521"}],"wp:attachment":[{"href":"https:\/\/www.gvc-on.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}