Skip to content

Commit 86f9961

Browse files
author
Alex
committed
UCP
1 parent fa6139e commit 86f9961

1 file changed

Lines changed: 134 additions & 0 deletions

File tree

Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
2+
/******************************************************************************
3+
* File Name : Firmata-UCP.ino
4+
* Author : Alex
5+
* Updated : Alex
6+
* Version : V0.5
7+
* Created Date : 24 Aug, 2015
8+
* Description : Firmata-UCP(uArm Communication Protocol)
9+
* License : GNU
10+
* Copyright(C) 2015 UFactory Team. All right reserved.
11+
*******************************************************************************/
12+
13+
#include <Servo.h>
14+
#include <Wire.h>
15+
16+
// Firmata-UCP
17+
#include <EEPROM.h>
18+
#include "uarm_library.h"
19+
#include "ucp.h"
20+
#include "Firmata.h"
21+
22+
23+
void setup()
24+
{
25+
ucp.setFirmwareVersion(UCP_MAJOR_VERSION, UCP_MINOR_VERSION);
26+
ucp.attach(START_SYSEX, sysexCallback);
27+
28+
ucp.begin(57600);
29+
30+
}
31+
32+
void loop()
33+
{
34+
35+
/* STREAMREAD - processing incoming messagse as soon as possible, while still
36+
* checking digital inputs. */
37+
while (ucp.available())
38+
ucp.processInput();
39+
}
40+
41+
42+
void sysexCallback(byte command, byte argc, byte *argv)
43+
{
44+
45+
switch (command) {
46+
case ACTION_CONTROL:
47+
48+
switch(argv[0]){
49+
case AC_COOR_RELA_XYZ:
50+
{
51+
short x = ucp.convertNumToCM(ucp.getValuesAsTwobitBytes(argv[1],argv[2]));
52+
short y = ucp.convertNumToCM(ucp.getValuesAsTwobitBytes(argv[3],argv[4]));
53+
short z = ucp.convertNumToCM(ucp.getValuesAsTwobitBytes(argv[5],argv[6]));
54+
short t = ucp.convertDMSToSec(ucp.getValuesAsTwobitBytes(argv[7],argv[8]));
55+
uarm.moveTo(x,y,z,RELATIVE,t);
56+
if(ucp.debugMode)
57+
{
58+
// Serial.print("X is: ");
59+
// Serial.println(x);
60+
// Serial.print("Y is: ");
61+
// Serial.println(y);
62+
// Serial.print("Z is: ");
63+
// Serial.println(z);
64+
// Serial.print("time is: ");
65+
// Serial.println(t);
66+
}
67+
break;
68+
}
69+
70+
case AC_COOR_ABS_XYZ:
71+
{
72+
short x = ucp.convertNumToCM(ucp.getValuesAsTwobitBytes(argv[1],argv[2]));
73+
short y = ucp.convertNumToCM(ucp.getValuesAsTwobitBytes(argv[3],argv[4]));
74+
short z = ucp.convertNumToCM(ucp.getValuesAsTwobitBytes(argv[5],argv[6]));
75+
short t = ucp.convertDMSToSec(ucp.getValuesAsTwobitBytes(argv[7],argv[8]));
76+
uarm.moveTo(x,y,z,ABSOLUTE,t); //
77+
if(ucp.debugMode)
78+
{
79+
// ucp.sendString("Debug Mode Test");
80+
// Serial.print("X is: ");
81+
// Serial.println(x);
82+
// Serial.print("Y is: ");
83+
// Serial.println(y);
84+
// Serial.print("Z is: ");
85+
// Serial.println(z);
86+
// Serial.print("time is: ");
87+
// Serial.println(t);
88+
}
89+
break;
90+
}
91+
92+
case AC_ANGLE_WITHOUT_OFFSET:
93+
{
94+
short servo_rot = constrain(ucp.getValuesAsTwobitBytes(argv[1],argv[2]),0,180);
95+
short servo_left = constrain(ucp.getValuesAsTwobitBytes(argv[3],argv[4]),0,180);
96+
short servo_right = constrain(ucp.getValuesAsTwobitBytes(argv[5],argv[6]),0,180);
97+
Serial.println("");
98+
Serial.println(servo_rot);
99+
Serial.println(servo_left);
100+
Serial.println(servo_right);
101+
uarm.writeAngle(servo_rot,servo_left,servo_right,servo_rot);
102+
103+
}
104+
105+
case AC_PUMP:
106+
{
107+
if (argv[1] == UCP_SWITCH_ON)
108+
uarm.gripperCatch();
109+
else
110+
uarm.gripperRelease();
111+
break;
112+
}
113+
}
114+
break;
115+
case REPORT_FIRMWARE:
116+
ucp.printFirmwareVersion();
117+
break;
118+
case DEBUG_MODE:
119+
switch(argv[0]){
120+
case UCP_SWITCH_ON:
121+
ucp.debugMode = true;
122+
break;
123+
case UCP_SWITCH_OFF:
124+
ucp.debugMode = false;
125+
break;
126+
}
127+
break;
128+
case UCP_TEST:
129+
// Serial.print("UCP TEST");
130+
break;
131+
}
132+
}
133+
134+

0 commit comments

Comments
 (0)