Difference between revisions of "CAN Communication"
Line 15: | Line 15: | ||
<br><br> | <br><br> | ||
− | + | OpenCAN() function initialize CAN I/O thread and start it. | |
<syntaxhighlight lang="cpp"> | <syntaxhighlight lang="cpp"> | ||
// Open a CAN data channel | // Open a CAN data channel |
Revision as of 13:36, 2 July 2019
CAN Communication Tutorial
Please download CAN_tutorial.zip file and follow below steps. File:CAN tutorial.zip
CAN_tutorial.zip contains CMakeList.txt, README and grasp directory.
CAN_tutorial.zip contains CMakeList.txt, README and grasp directory.
This tutorial will show how to open & close CAN communication. Also, how to get position data and send pwm to operate Allegro Hand. You will follow step by step with adding sample codes. Source code assumes you have a peak-systems pcan to usb adapter so if you are not using PEAK CAN device, please check your own device CAN api and channel.
simple diagram
Below picture shows a structure of a sample program for this tutorial.
main.cpp
You can find main.cpp in grasp directory. There are 3 functions you have to edit.
OpenCAN() function initialize CAN I/O thread and start it.
// Open a CAN data channel bool OpenCAN() { printf(">CAN(%d): open\n", CAN_Ch); // CAN open int ret = command_can_open(CAN_Ch); if(ret < 0) { printf("ERROR command_can_open !!! \n"); return false; } // initialize CAN I/O thread ioThreadRun = true; pthread_create(&hThread, NULL, ioThreadProc, 0); printf(">CAN: starts listening CAN frames\n"); // set periodic communication parameters(period) printf(">CAN: Comm period set\n"); short comm_period[3] = {3, 0, 0}; // millisecond {position, imu, temperature} ret = command_set_period(CAN_Ch, comm_period); if(ret < 0) { printf("ERROR command_set_period !!! \n"); command_can_close(CAN_Ch); return false; } // servo on printf(">CAN: servo on\n"); ret = command_servo_on(CAN_Ch); if(ret < 0) { printf("ERROR command_servo_on !!! \n"); command_set_period(CAN_Ch, 0); command_can_close(CAN_Ch); return false; } return true; }
static void* ioThreadProc(void* inst)
// --
void CloseCAN()
// --
Whos here now: Members 0 Guests 0 Bots & Crawlers 1 |