Components and supplies
Arduino UNO
Micro servo SG90
Analog joystick (Generic)
Apps and platforms
Arduino IDE
Project description
Code
Pin mapping for board "MeArm Joystick v 1.6.1"
arduino
If you use joystick board "MeArm Joystick v 1.6.1", then replace in source code pin mappings with attached code.
1int basePin = 11; /* Base servo */ 2int shoulderPin = 10; /* Shoulder servo */ 3int elbowPin = 9; /* Elbow servo */ 4int gripperPin = 5; /* Gripper servo - changed */ 5 6int xdirPin = 0; /* Base - joystick1*/ 7int ydirPin = 1; /* Shoulder - joystick1 */ 8int zdirPin = 3; /* Elbow - joystick2 */ 9int gdirPin = 2; /* Gripper - joystick2 */ 10 11int pinRecord = PD2; /* Button record - recommended (A4 is deprecated, will by used for additional joystick) */ 12int pinPlay = PD4; /* Button play - recommended (A5 is deprecated, will by used for additional joystick) - changed */ 13int pinLedRecord = PD3; /* LED - indicates recording (light) or auto play mode (blink ones) - changed */ 14
Source code of MeArm ® robot recording of coordinates (minimalized version)
arduino
In version 1.5.4 was replaced an external resistors by internal pull up resistors. External LED diode was replaced with using internal "L" diode on Arduino UNO board.
1/* meArm analog joysticks version 1.5.4 - UtilStudio.com Dec 2018 2 Uses two analogue joysticks and four servos. 3 4 In version 1.5.4 was replaced an external resistors by internal pull up resistors. 5 External LED diode was replaced with using internal "L" diode on Arduino UNO board. 6 Some bugs was removed. 7 8 First joystick moves gripper forwards, backwards, left and right, 9 button start/stop recording positions. 10 11 Second joystick moves gripper up, down, and closes and opens, 12 button start/stop playing recorded positions. 13 Press button for 2 seconds to autoplay. 14 15 Pins: 16 Arduino Stick1 Stick2 Base Shoulder Elbow Gripper Record/ 17 GND GND GND Brown Brown Brown Brown Auto play 18 5V VCC VCC Red Red Red Red LED 19 A0 HOR 20 A1 VER 21 PD2 BUTT 22 A2 HOR 23 A3 VER 24 PD3 BUTT 25 11 Yellow 26 10 Yellow 27 9 Yellow 28 6 Yellow 29 13 X 30*/ 31#include <Servo.h> 32 33bool repeatePlaying = false; /* Repeatedly is running recorded cycle */ 34int delayBetweenCycles = 2000; /* Delay between cycles */ 35 36int basePin = 11; /* Base servo */ 37int shoulderPin = 10; /* Shoulder servo */ 38int elbowPin = 9; /* Elbow servo */ 39int gripperPin = 6; /* Gripper servo */ 40 41int xdirPin = 0; /* Base - joystick1*/ 42int ydirPin = 1; /* Shoulder - joystick1 */ 43int zdirPin = 3; /* Elbow - joystick2 */ 44int gdirPin = 2; /* Gripper - joystick2 */ 45 46//int pinRecord = A4; /* Button record - backward compatibility */ 47//int pinPlay = A5; /* Button play - backward compatibility */ 48int pinRecord = PD2; /* Button record - recommended (A4 is deprecated, will by used for additional joystick) */ 49int pinPlay = PD3; /* Button play - recommended (A5 is deprecated, will by used for additional joystick) */ 50int pinLedRecord = 13; /* LED - indicates recording (light) or auto play mode (blink ones) */ 51 52const int buffSize = 512; /* Size of recording buffer */ 53 54int startBase = 90; 55int startShoulder = 90; 56int startElbow = 90; 57int startGripper = 0; 58 59int posBase = 90; 60int posShoulder = 90; 61int posElbow = 90; 62int posGripper = 0; 63 64int lastBase = 90; 65int lastShoulder = 90; 66int lastElbow = 90; 67int lastGripper = 90; 68 69int minBase = 0; 70int maxBase = 150; 71int minShoulder = 0; 72int maxShoulder = 150; 73int minElbow = 0; 74int maxElbow = 150; 75int minGripper = 0; 76int maxGripper = 150; 77 78const int countServo = 4; 79int buff[buffSize]; 80int buffAdd[countServo]; 81int recPos = 0; 82int playPos = 0; 83 84int buttonRecord = HIGH; 85int buttonPlay = HIGH; 86 87int buttonRecordLast = LOW; 88int buttonPlayLast = LOW; 89 90bool record = false; 91bool play = false; 92bool debug = false; 93 94String command = "Manual"; 95int printPos = 0; 96 97int buttonPlayDelay = 20; 98int buttonPlayCount = 0; 99 100bool ledLight = false; 101 102Servo servoBase; 103Servo servoShoulder; 104Servo servoElbow; 105Servo servoGripper; 106 107void setup() { 108 Serial.begin(9600); 109 110 pinMode(xdirPin, INPUT); 111 pinMode(ydirPin, INPUT); 112 pinMode(zdirPin, INPUT); 113 pinMode(gdirPin, INPUT); 114 115 pinMode(pinRecord, INPUT_PULLUP); 116 pinMode(pinPlay, INPUT_PULLUP); 117 118 pinMode(pinLedRecord, OUTPUT); 119 120 servoBase.attach(basePin); 121 servoShoulder.attach(shoulderPin); 122 servoElbow.attach(elbowPin); 123 servoGripper.attach(gripperPin); 124 125 StartPosition(); 126 127 digitalWrite(pinLedRecord, HIGH); 128 delay(1000); 129 digitalWrite(pinLedRecord, LOW); 130} 131 132void loop() { 133 134 buttonRecord = digitalRead(pinRecord); 135 buttonPlay = digitalRead(pinPlay); 136 137 // Serial.print(buttonRecord); 138 // Serial.print("\ "); 139 // Serial.println(buttonPlay); 140 // for testing purposes 141 142 if (buttonPlay == LOW) 143 { 144 buttonPlayCount++; 145 146 if (buttonPlayCount >= buttonPlayDelay) 147 { 148 repeatePlaying = true; 149 } 150 } 151 else buttonPlayCount = 0; 152 153 if (buttonPlay != buttonPlayLast) 154 { 155 if (record) 156 { 157 record = false; 158 } 159 160 if (buttonPlay == LOW) 161 { 162 play = !play; 163 repeatePlaying = false; 164 165 if (play) 166 { 167 StartPosition(); 168 } 169 } 170 } 171 172 if (buttonRecord != buttonRecordLast) 173 { 174 if (buttonRecord == LOW) 175 { 176 record = !record; 177 178 if (record) 179 { 180 play = false; 181 repeatePlaying = false; 182 recPos = 0; 183 } 184 else 185 { 186 if (debug) PrintBuffer(); 187 } 188 } 189 } 190 191 buttonPlayLast = buttonPlay; 192 buttonRecordLast = buttonRecord; 193 194 float dx = map(analogRead(xdirPin), 0, 1023, -5.0, 5.0); 195 float dy = map(analogRead(ydirPin), 0, 1023, 5.0, -5.0); 196 float dz = map(analogRead(zdirPin), 0, 1023, 5.0, -5.0); 197 float dg = map(analogRead(gdirPin), 0, 1023, 5.0, -5.0); 198 199 if (abs(dx) < 1.5) dx = 0; 200 if (abs(dy) < 1.5) dy = 0; 201 if (abs(dz) < 1.5) dz = 0; 202 if (abs(dg) < 1.5) dg = 0; 203 204 posBase += dx; 205 posShoulder += dy; 206 posElbow += dz; 207 posGripper += dg; 208 209 if (play) 210 { 211 if (playPos >= recPos) { 212 playPos = 0; 213 214 if (repeatePlaying) 215 { 216 delay(delayBetweenCycles); 217 StartPosition(); 218 } 219 else 220 { 221 play = false; 222 } 223 } 224 225 bool endOfData = false; 226 227 while (!endOfData) 228 { 229 if (playPos >= buffSize - 1) break; 230 if (playPos >= recPos) break; 231 232 int data = buff[playPos]; 233 int angle = data & 0xFFF; 234 int servoNumber = data & 0x3000; 235 endOfData = data & 0x4000; 236 237 switch (servoNumber) 238 { 239 case 0x0000: 240 posBase = angle; 241 break; 242 243 case 0x1000: 244 posShoulder = angle; 245 break; 246 247 case 0x2000: 248 posElbow = angle; 249 break; 250 251 case 0x3000: 252 posGripper = angle; 253 dg = posGripper - lastGripper; 254 break; 255 } 256 257 playPos++; 258 } 259 } 260 261 if (posBase > maxBase) posBase = maxBase; 262 if (posShoulder > maxShoulder) posShoulder = maxShoulder; 263 if (posElbow > maxElbow) posElbow = maxElbow; 264 if (posGripper > maxGripper) posGripper = maxGripper; 265 266 if (posBase < minBase) posBase = minBase; 267 if (posShoulder < minShoulder) posShoulder = minShoulder; 268 if (posElbow < minElbow) posElbow = minElbow; 269 if (posGripper < minGripper) posGripper = minGripper; 270 271 servoBase.write(posBase); 272 servoShoulder.write(posShoulder); 273 servoElbow.write(posElbow); 274 275 // if (dg < -3.0) { 276 // posGripper = minGripper; 277 // servoGripper.write(posGripper); 278 // Serial.println(posGripper); 279 // } 280 // else if (dg > 3.0) { 281 // posGripper = maxGripper; 282 // servoGripper.write(posGripper); 283 // Serial.println(posGripper); 284 // } 285 286 bool waitGripper = false; 287 if (dg < 0) { 288 posGripper = minGripper; 289 waitGripper = true; 290 } 291 else if (dg > 0) { 292 posGripper = maxGripper; 293 waitGripper = true; 294 } 295 296 servoGripper.write(posGripper); 297 if (play && waitGripper) 298 { 299 delay(1000); 300 } 301 302 //Serial.println(posGripper); 303 304 if ((lastBase != posBase) | (lastShoulder != posShoulder) | (lastElbow != posElbow) | (lastGripper != posGripper)) 305 { 306 if (record) 307 { 308 if (recPos < buffSize - countServo) 309 { 310 int buffPos = 0; 311 312 if (lastBase != posBase) 313 { 314 buffAdd[buffPos] = posBase; 315 buffPos++; 316 } 317 318 if (lastShoulder != posShoulder) 319 { 320 buffAdd[buffPos] = posShoulder | 0x1000; 321 buffPos++; 322 } 323 324 if (lastElbow != posElbow) 325 { 326 buffAdd[buffPos] = posElbow | 0x2000; 327 buffPos++; 328 } 329 330 if (lastGripper != posGripper) 331 { 332 buffAdd[buffPos] = posGripper | 0x3000; 333 buffPos++; 334 } 335 336 buffAdd[buffPos - 1] = buffAdd[buffPos - 1] | 0x4000; 337 338 for (int i = 0; i < buffPos; i++) 339 { 340 buff[recPos + i] = buffAdd[i]; 341 } 342 343 recPos += buffPos; 344 } 345 } 346 347 command = "Manual"; 348 printPos = 0; 349 350 if (play) 351 { 352 command = "Play"; 353 printPos = playPos; 354 } 355 else if (record) 356 { 357 command = "Record"; 358 printPos = recPos; 359 } 360 361 Serial.print(command); 362 Serial.print("\ "); 363 Serial.print(printPos); 364 Serial.print("\ "); 365 Serial.print(posBase); 366 Serial.print("\ "); 367 Serial.print(posShoulder); 368 Serial.print("\ "); 369 Serial.print(posElbow); 370 Serial.print("\ "); 371 Serial.print(posGripper); 372 Serial.print("\ "); 373 Serial.print(record); 374 Serial.print("\ "); 375 Serial.print(play); 376 Serial.println(); 377 } 378 379 lastBase = posBase; 380 lastShoulder = posShoulder; 381 lastElbow = posElbow; 382 lastGripper = posGripper; 383 384 if ( repeatePlaying) 385 { 386 ledLight = !ledLight; 387 } 388 else 389 { 390 if (ledLight) 391 { 392 ledLight = false; 393 } 394 395 if (record) 396 { 397 ledLight = true; 398 } 399 }; 400 401 digitalWrite(pinLedRecord, ledLight); 402 delay(50); 403} 404 405void PrintBuffer() 406{ 407 for (int i = 0; i < recPos; i++) 408 { 409 int data = buff[i]; 410 int angle = data & 0xFFF; 411 int servoNumber = data & 0x3000; 412 bool endOfData = data & 0x4000; 413 414 Serial.print("Servo="); 415 Serial.print(servoNumber); 416 Serial.print("\ Angle="); 417 Serial.print(angle); 418 Serial.print("\ End="); 419 Serial.print(endOfData); 420 Serial.print("\ Data="); 421 Serial.print(data, BIN); 422 Serial.println(); 423 } 424} 425 426void StartPosition() 427{ 428 int angleBase = servoBase.read(); 429 int angleShoulder = servoShoulder.read(); 430 int angleElbow = servoElbow.read(); 431 int angleGripper = servoGripper.read(); 432 433 Serial.print(angleBase); 434 Serial.print("\ "); 435 Serial.print(angleShoulder); 436 Serial.print("\ "); 437 Serial.print(angleElbow); 438 Serial.print("\ "); 439 Serial.print(angleGripper); 440 Serial.println("\ "); 441 442 posBase = startBase; 443 posShoulder = startShoulder; 444 posElbow = startElbow; 445 posGripper = startGripper; 446 447 servoBase.write(posBase); 448 servoShoulder.write(posShoulder); 449 servoElbow.write(posElbow); 450 servoGripper.write(posGripper); 451}
Pin mapping for board "MeArm Joystick v 1.6.1"
arduino
If you use joystick board "MeArm Joystick v 1.6.1", then replace in source code pin mappings with attached code.
1int basePin = 11; /* Base servo */ 2int shoulderPin = 10; /* Shoulder servo */ 3int elbowPin = 9; /* Elbow servo */ 4int gripperPin = 5; /* Gripper servo - changed */ 5 6int xdirPin = 0; /* Base - joystick1*/ 7int ydirPin = 1; /* Shoulder - joystick1 */ 8int zdirPin = 3; /* Elbow - joystick2 */ 9int gdirPin = 2; /* Gripper - joystick2 */ 10 11int pinRecord = PD2; /* Button record - recommended (A4 is deprecated, will by used for additional joystick) */ 12int pinPlay = PD4; /* Button play - recommended (A5 is deprecated, will by used for additional joystick) - changed */ 13int pinLedRecord = PD3; /* LED - indicates recording (light) or auto play mode (blink ones) - changed */ 14
Source code of MeArm ® robot recording of coordinates (minimalized version)
arduino
In version 1.5.4 was replaced an external resistors by internal pull up resistors. External LED diode was replaced with using internal "L" diode on Arduino UNO board.
1/* meArm analog joysticks version 1.5.4 - UtilStudio.com Dec 2018 2 Uses two analogue joysticks and four servos. 3 4 In version 1.5.4 was replaced an external resistors by internal pull up resistors. 5 External LED diode was replaced with using internal "L" diode on Arduino UNO board. 6 Some bugs was removed. 7 8 First joystick moves gripper forwards, backwards, left and right, 9 button start/stop recording positions. 10 11 Second joystick moves gripper up, down, and closes and opens, 12 button start/stop playing recorded positions. 13 Press button for 2 seconds to autoplay. 14 15 Pins: 16 Arduino Stick1 Stick2 Base Shoulder Elbow Gripper Record/ 17 GND GND GND Brown Brown Brown Brown Auto play 18 5V VCC VCC Red Red Red Red LED 19 A0 HOR 20 A1 VER 21 PD2 BUTT 22 A2 HOR 23 A3 VER 24 PD3 BUTT 25 11 Yellow 26 10 Yellow 27 9 Yellow 28 6 Yellow 29 13 X 30*/ 31#include <Servo.h> 32 33bool repeatePlaying = false; /* Repeatedly is running recorded cycle */ 34int delayBetweenCycles = 2000; /* Delay between cycles */ 35 36int basePin = 11; /* Base servo */ 37int shoulderPin = 10; /* Shoulder servo */ 38int elbowPin = 9; /* Elbow servo */ 39int gripperPin = 6; /* Gripper servo */ 40 41int xdirPin = 0; /* Base - joystick1*/ 42int ydirPin = 1; /* Shoulder - joystick1 */ 43int zdirPin = 3; /* Elbow - joystick2 */ 44int gdirPin = 2; /* Gripper - joystick2 */ 45 46//int pinRecord = A4; /* Button record - backward compatibility */ 47//int pinPlay = A5; /* Button play - backward compatibility */ 48int pinRecord = PD2; /* Button record - recommended (A4 is deprecated, will by used for additional joystick) */ 49int pinPlay = PD3; /* Button play - recommended (A5 is deprecated, will by used for additional joystick) */ 50int pinLedRecord = 13; /* LED - indicates recording (light) or auto play mode (blink ones) */ 51 52const int buffSize = 512; /* Size of recording buffer */ 53 54int startBase = 90; 55int startShoulder = 90; 56int startElbow = 90; 57int startGripper = 0; 58 59int posBase = 90; 60int posShoulder = 90; 61int posElbow = 90; 62int posGripper = 0; 63 64int lastBase = 90; 65int lastShoulder = 90; 66int lastElbow = 90; 67int lastGripper = 90; 68 69int minBase = 0; 70int maxBase = 150; 71int minShoulder = 0; 72int maxShoulder = 150; 73int minElbow = 0; 74int maxElbow = 150; 75int minGripper = 0; 76int maxGripper = 150; 77 78const int countServo = 4; 79int buff[buffSize]; 80int buffAdd[countServo]; 81int recPos = 0; 82int playPos = 0; 83 84int buttonRecord = HIGH; 85int buttonPlay = HIGH; 86 87int buttonRecordLast = LOW; 88int buttonPlayLast = LOW; 89 90bool record = false; 91bool play = false; 92bool debug = false; 93 94String command = "Manual"; 95int printPos = 0; 96 97int buttonPlayDelay = 20; 98int buttonPlayCount = 0; 99 100bool ledLight = false; 101 102Servo servoBase; 103Servo servoShoulder; 104Servo servoElbow; 105Servo servoGripper; 106 107void setup() { 108 Serial.begin(9600); 109 110 pinMode(xdirPin, INPUT); 111 pinMode(ydirPin, INPUT); 112 pinMode(zdirPin, INPUT); 113 pinMode(gdirPin, INPUT); 114 115 pinMode(pinRecord, INPUT_PULLUP); 116 pinMode(pinPlay, INPUT_PULLUP); 117 118 pinMode(pinLedRecord, OUTPUT); 119 120 servoBase.attach(basePin); 121 servoShoulder.attach(shoulderPin); 122 servoElbow.attach(elbowPin); 123 servoGripper.attach(gripperPin); 124 125 StartPosition(); 126 127 digitalWrite(pinLedRecord, HIGH); 128 delay(1000); 129 digitalWrite(pinLedRecord, LOW); 130} 131 132void loop() { 133 134 buttonRecord = digitalRead(pinRecord); 135 buttonPlay = digitalRead(pinPlay); 136 137 // Serial.print(buttonRecord); 138 // Serial.print("\ "); 139 // Serial.println(buttonPlay); 140 // for testing purposes 141 142 if (buttonPlay == LOW) 143 { 144 buttonPlayCount++; 145 146 if (buttonPlayCount >= buttonPlayDelay) 147 { 148 repeatePlaying = true; 149 } 150 } 151 else buttonPlayCount = 0; 152 153 if (buttonPlay != buttonPlayLast) 154 { 155 if (record) 156 { 157 record = false; 158 } 159 160 if (buttonPlay == LOW) 161 { 162 play = !play; 163 repeatePlaying = false; 164 165 if (play) 166 { 167 StartPosition(); 168 } 169 } 170 } 171 172 if (buttonRecord != buttonRecordLast) 173 { 174 if (buttonRecord == LOW) 175 { 176 record = !record; 177 178 if (record) 179 { 180 play = false; 181 repeatePlaying = false; 182 recPos = 0; 183 } 184 else 185 { 186 if (debug) PrintBuffer(); 187 } 188 } 189 } 190 191 buttonPlayLast = buttonPlay; 192 buttonRecordLast = buttonRecord; 193 194 float dx = map(analogRead(xdirPin), 0, 1023, -5.0, 5.0); 195 float dy = map(analogRead(ydirPin), 0, 1023, 5.0, -5.0); 196 float dz = map(analogRead(zdirPin), 0, 1023, 5.0, -5.0); 197 float dg = map(analogRead(gdirPin), 0, 1023, 5.0, -5.0); 198 199 if (abs(dx) < 1.5) dx = 0; 200 if (abs(dy) < 1.5) dy = 0; 201 if (abs(dz) < 1.5) dz = 0; 202 if (abs(dg) < 1.5) dg = 0; 203 204 posBase += dx; 205 posShoulder += dy; 206 posElbow += dz; 207 posGripper += dg; 208 209 if (play) 210 { 211 if (playPos >= recPos) { 212 playPos = 0; 213 214 if (repeatePlaying) 215 { 216 delay(delayBetweenCycles); 217 StartPosition(); 218 } 219 else 220 { 221 play = false; 222 } 223 } 224 225 bool endOfData = false; 226 227 while (!endOfData) 228 { 229 if (playPos >= buffSize - 1) break; 230 if (playPos >= recPos) break; 231 232 int data = buff[playPos]; 233 int angle = data & 0xFFF; 234 int servoNumber = data & 0x3000; 235 endOfData = data & 0x4000; 236 237 switch (servoNumber) 238 { 239 case 0x0000: 240 posBase = angle; 241 break; 242 243 case 0x1000: 244 posShoulder = angle; 245 break; 246 247 case 0x2000: 248 posElbow = angle; 249 break; 250 251 case 0x3000: 252 posGripper = angle; 253 dg = posGripper - lastGripper; 254 break; 255 } 256 257 playPos++; 258 } 259 } 260 261 if (posBase > maxBase) posBase = maxBase; 262 if (posShoulder > maxShoulder) posShoulder = maxShoulder; 263 if (posElbow > maxElbow) posElbow = maxElbow; 264 if (posGripper > maxGripper) posGripper = maxGripper; 265 266 if (posBase < minBase) posBase = minBase; 267 if (posShoulder < minShoulder) posShoulder = minShoulder; 268 if (posElbow < minElbow) posElbow = minElbow; 269 if (posGripper < minGripper) posGripper = minGripper; 270 271 servoBase.write(posBase); 272 servoShoulder.write(posShoulder); 273 servoElbow.write(posElbow); 274 275 // if (dg < -3.0) { 276 // posGripper = minGripper; 277 // servoGripper.write(posGripper); 278 // Serial.println(posGripper); 279 // } 280 // else if (dg > 3.0) { 281 // posGripper = maxGripper; 282 // servoGripper.write(posGripper); 283 // Serial.println(posGripper); 284 // } 285 286 bool waitGripper = false; 287 if (dg < 0) { 288 posGripper = minGripper; 289 waitGripper = true; 290 } 291 else if (dg > 0) { 292 posGripper = maxGripper; 293 waitGripper = true; 294 } 295 296 servoGripper.write(posGripper); 297 if (play && waitGripper) 298 { 299 delay(1000); 300 } 301 302 //Serial.println(posGripper); 303 304 if ((lastBase != posBase) | (lastShoulder != posShoulder) | (lastElbow != posElbow) | (lastGripper != posGripper)) 305 { 306 if (record) 307 { 308 if (recPos < buffSize - countServo) 309 { 310 int buffPos = 0; 311 312 if (lastBase != posBase) 313 { 314 buffAdd[buffPos] = posBase; 315 buffPos++; 316 } 317 318 if (lastShoulder != posShoulder) 319 { 320 buffAdd[buffPos] = posShoulder | 0x1000; 321 buffPos++; 322 } 323 324 if (lastElbow != posElbow) 325 { 326 buffAdd[buffPos] = posElbow | 0x2000; 327 buffPos++; 328 } 329 330 if (lastGripper != posGripper) 331 { 332 buffAdd[buffPos] = posGripper | 0x3000; 333 buffPos++; 334 } 335 336 buffAdd[buffPos - 1] = buffAdd[buffPos - 1] | 0x4000; 337 338 for (int i = 0; i < buffPos; i++) 339 { 340 buff[recPos + i] = buffAdd[i]; 341 } 342 343 recPos += buffPos; 344 } 345 } 346 347 command = "Manual"; 348 printPos = 0; 349 350 if (play) 351 { 352 command = "Play"; 353 printPos = playPos; 354 } 355 else if (record) 356 { 357 command = "Record"; 358 printPos = recPos; 359 } 360 361 Serial.print(command); 362 Serial.print("\ "); 363 Serial.print(printPos); 364 Serial.print("\ "); 365 Serial.print(posBase); 366 Serial.print("\ "); 367 Serial.print(posShoulder); 368 Serial.print("\ "); 369 Serial.print(posElbow); 370 Serial.print("\ "); 371 Serial.print(posGripper); 372 Serial.print("\ "); 373 Serial.print(record); 374 Serial.print("\ "); 375 Serial.print(play); 376 Serial.println(); 377 } 378 379 lastBase = posBase; 380 lastShoulder = posShoulder; 381 lastElbow = posElbow; 382 lastGripper = posGripper; 383 384 if ( repeatePlaying) 385 { 386 ledLight = !ledLight; 387 } 388 else 389 { 390 if (ledLight) 391 { 392 ledLight = false; 393 } 394 395 if (record) 396 { 397 ledLight = true; 398 } 399 }; 400 401 digitalWrite(pinLedRecord, ledLight); 402 delay(50); 403} 404 405void PrintBuffer() 406{ 407 for (int i = 0; i < recPos; i++) 408 { 409 int data = buff[i]; 410 int angle = data & 0xFFF; 411 int servoNumber = data & 0x3000; 412 bool endOfData = data & 0x4000; 413 414 Serial.print("Servo="); 415 Serial.print(servoNumber); 416 Serial.print("\ Angle="); 417 Serial.print(angle); 418 Serial.print("\ End="); 419 Serial.print(endOfData); 420 Serial.print("\ Data="); 421 Serial.print(data, BIN); 422 Serial.println(); 423 } 424} 425 426void StartPosition() 427{ 428 int angleBase = servoBase.read(); 429 int angleShoulder = servoShoulder.read(); 430 int angleElbow = servoElbow.read(); 431 int angleGripper = servoGripper.read(); 432 433 Serial.print(angleBase); 434 Serial.print("\ "); 435 Serial.print(angleShoulder); 436 Serial.print("\ "); 437 Serial.print(angleElbow); 438 Serial.print("\ "); 439 Serial.print(angleGripper); 440 Serial.println("\ "); 441 442 posBase = startBase; 443 posShoulder = startShoulder; 444 posElbow = startElbow; 445 posGripper = startGripper; 446 447 servoBase.write(posBase); 448 servoShoulder.write(posShoulder); 449 servoElbow.write(posElbow); 450 servoGripper.write(posGripper); 451}
Downloadable files
MeArm ® robot recording of coordinates (minimalized version)
Scheme diagram of MeArm robot recording of coordinates (minimalized version)
MeArm ® robot recording of coordinates (minimalized version)
Comments
Only logged in users can leave comments
utilstudio
0 Followers
•0 Projects
Table of contents
Intro
21
0