Example #1
0
// measure distances over a 180 degree arc and save them into the array arcPingDistances with size ARCPING_STEPS
void Servotor32::arcPing() {
  // min and max pos for servo
  int minPos = 500;
  int maxPos = 2500;

  for(int i=0;i<ARCPING_STEPS; i++)
  {
    // calculate servopos for current step.
    int pos = (int)((float)(maxPos - minPos) / (ARCPING_STEPS-1) * i + minPos);

    // set servo to desired pos
    changeServo(31,pos);

    // if its the first position, give the servo enough time to go there from any previous position
    if (i == 0)
    {
      delay_ms(300);
    }
    else // if its not the first step, then the position-difference and therefore time needed are smaller.
    {
      delay_ms(500 / ARCPING_STEPS);
    }
    // make a multiPing and save result into the array arcPingDistances
    arcPingDistances[i] = multiPing(5);
  }
  // set servo back to middle pos, making head look forward
  changeServo(31,1500);
  // give the servo some time to reach pos
  delay_ms(400);
  // shut down servo
  changeServo(31,-1);
}
Example #2
0
void Servotor32::center()////////////////////////////////////////////////////////////
{
  for(int i=0;i<32;i++)//CenterServos
{
  changeServo(i,1500);
  delay_ms(200);  
  changeServo(i,-1);
}
}
Example #3
0
void Servotor32::killServos()///////////////////////////////////////////////////////////////////////////////
{
  for(int i=0;i<32;i++)//KillServos
{  
  changeServo(i,-1);
}
}
Example #4
0
void Servotor32::kickLeft()////////////////////////////////////////////////////////////////////////////////////
{
  changeServo(10,700);
  changeServo(9,700);
  delay_ms(500);
  changeServo(10,1500);
  changeServo(9,1500);
  delay_ms(1000);
  changeServo(10,1950);
  changeServo(9,1050);
  delay_ms(400);
  changeServo(10,-1);
  changeServo(9,-1);
  delay_ms(100);
}
Example #5
0
// measure distances over a 180 degree arc and save them into the array arcPingDistances with size ARCPING_STEPS
void Servotor32::arcPing() {
  for(int i=0;i<ARCPING_STEPS; i++)
  {
    
    int minPos = 500;
    int maxPos = 2500;
    
    int pos = (int)((float)(maxPos - minPos) / (ARCPING_STEPS-1) * i + minPos);
    changeServo(31,pos);
    if (i == 0)
    {
      delay_ms(300);
    }
    else
    {
      delay_ms(500 / ARCPING_STEPS);
    }
    arcPingDistances[i] = multiPing(5);
  }
  changeServo(31,1500);
  delay_ms(400);
  changeServo(31,-1);
}
Example #6
0
void Servotor32::process(Stream *serial){
  if(serial->available()) { //process input from the USB
    char inChar = (char)serial->read();
    switch(inChar){
      case '#':
        servoCounting = true;
        numCount = 0;
        inServo = -1;
        inPos = -1;
        break;
      case 'D':
        printStatus(serial);
        break;
      case 'P':
        if(servoCounting){
          inServo = tallyCount();
          servoCounting = false;
        }
        posCounting =  true;
        numCount = 0;
        break;
      case '\r':
      case '\n':
        if(posCounting){
          inPos = tallyCount();
          posCounting = false;
        }
        if((inServo >=0)&&(inServo <=31)&&(((inPos >= 500)&&(inPos <= 2500))||(inPos == -1))){
          changeServo(inServo,inPos);
          inServo = -1;
          inPos = -1;
        }
        numCount = 0;
        break;
      case 'V':
        serial->println("SERVOTOR32_v2.0_lams");
        break;
      case 'C':
        for(int i=0; i<32; i++){
          changeServo(i, 1500);
        }
        serial->println("All Centered");
        break;
      case 'K':
        for(int i=0; i<32; i++){
          changeServo(i,-1);
        }
        serial->println("All Turned Off");
        break;
      case 'L':
        if(servoCounting){
          inServo = tallyCount();
          servoCounting = false;
        }
        changeServo(inServo, -1);
        break;
      case 'S': // make an arcPing and send distances back over serial
        arcPing();
        for(int i = 0; i < ARCPING_STEPS; i++)
        {
          serial->println(arcPingDistances[i]);
        }
        break;
      default:
        if((inChar > 47)&&(inChar < 58)){
          if(numCount<4){
            numString[numCount] = inChar-48;
            numCount++;
          }
        }
        break;
    }
  }
}
Example #7
0
void Servotor32::kickFront()///////////////////////////////////////////////////////////////////////////////////////////
{
  changeServo(25,1950);
  changeServo(6,1950);
  
  changeServo(24,1950);
  changeServo(25,700);
  changeServo(26,700);
  delay_ms(500);
  changeServo(25,1500);
  changeServo(26,1500);
  delay_ms(1000);
  changeServo(24,1500);
  changeServo(25,1950);
  changeServo(26,1050);
  delay_ms(400);
  changeServo(6,-1);
  changeServo(17,-1);
  changeServo(25,-1);
  changeServo(26,-1);
  delay_ms(100);
	
}
Example #8
0
void Servotor32::kickRight()////////////////////////////////////////////////////////////////////////////////////
{
  changeServo(25,1950);
  changeServo(17,1950);
  changeServo(21,700);
  changeServo(22,700);
  delay_ms(500);
  changeServo(21,1500);
  changeServo(22,1500);
  delay_ms(1000);
  changeServo(21,1950);
  changeServo(22,1050);
  delay_ms(400);
  changeServo(25,-1);
  changeServo(17,-1);
  changeServo(21,-1);
  changeServo(22,-1);
  delay_ms(100);
}
Example #9
0
 void Servotor32::rotateRight(){
    
    // Picks up the knees from tripod 1, rotates them to the front most position, then places them down. Picks up tripod 2, then rotates tripod 1 (while still on the ground) to middle position, then replaces tripod 2
   
    //tripod 1 == RF, LM, RB
    //tripod 2 == LF, RM, LB
    
    //put the servos in the correct position from stand up function
    //Final positions: hips 1500, knees ~1950, ankles 1050
    reset();
    
    //pick up tripod 1
    changeServo(25, 2000);
    delay_ms(25);
    changeServo(10, 2000);
    delay_ms(25);
    changeServo(17, 2000);
    delay_ms(25);
    
    //move tripod to forward most position
    changeServo(24, 2200);
    delay_ms(25);
    changeServo(11, 2200);
    delay_ms(25);
    changeServo(16, 2200);
    delay_ms(25);
    
    //move tripod 1 down
    changeServo(25, 1950);
    delay_ms(25);
    changeServo(10, 1950);
    delay_ms(25);
    changeServo(17, 1950);
    delay_ms(25);
    
    //move tripod 2 up
    changeServo(6, 2200);
    delay_ms(25);
    changeServo(21, 2200);
    delay_ms(25);
    changeServo(14, 2200);
    delay_ms(25);
    
    //rotate tripod 1 back to original position
    changeServo(24, 1500);
    delay_ms(25);
    changeServo(11, 1500);
    delay_ms(25);
    changeServo(16, 1500);
    delay_ms(25);
    
    // move tripod 2 back down
      changeServo(6, 1950);
    delay_ms(25);
    changeServo(21, 1950);
    delay_ms(25);
    changeServo(14, 1950);
    delay_ms(25);
    
    reset();
    
  }
Example #10
0
  void Servotor32::backward()////////////////////////////////////////////////////////////////////////////////////
{
//Two tripod system, denoted 1<LB,LF,RM> and 2<RB,RF,LM>
  changeServo(25,-1);//Kill Knees 2
  changeServo(17,-1);
  changeServo(10,-1);
  delay_ms(20);
  
  changeServo(14,1950);//Stabalizer Feet 1
  changeServo(6,1950);
  changeServo(21,1950);
  delay_ms(200);
  
  changeServo(25,1750);//Pick Up Knees 2
  changeServo(17,1750);
  changeServo(10,1750);
  delay_ms(200);
  changeServo(25,-1);//Kill Knees 2
  changeServo(17,-1);
  changeServo(10,-1);
  delay_ms(20);
  
  changeServo(11,1750);//Reposition Hips 2
  changeServo(24,1250);
  changeServo(16,1250);
  delay_ms(200);
    changeServo(11,-1);//Kill Hips 2
  changeServo(24,-1);
  changeServo(16,-1);
  delay_ms(200);

  changeServo(9,950);//Reposition ankles 2
  changeServo(18,950);
  changeServo(26,950);
  delay_ms(300);
  changeServo(9,-1);//Kill ankles 2
  changeServo(18,-1);
  changeServo(26,-1);
  delay_ms(20);

  changeServo(25,1950);//Put down Knees 2, stay on
  changeServo(17,1950);
  changeServo(10,1950);
  delay_ms(200);
  
  changeServo(14,1750);//Pick up knees 1
  changeServo(6,1750);
  changeServo(21,1750);
  delay_ms(100);
  changeServo(14,-1);//Kill knees 1
  changeServo(6,-1);
  changeServo(21,-1);
  delay_ms(10);
  
  changeServo(22,950);//Reposition ankles 1
  changeServo(13,950);
  changeServo(5,950);
  delay_ms(300);
  changeServo(22,-1);//Kill ankles 1
  changeServo(13,-1);
  changeServo(5,-1);
  delay_ms(20);
  
  changeServo(7,1750);//Move hips
  changeServo(20,1350);
  changeServo(15,1750);
  delay_ms(100);
  changeServo(24,1750);
  changeServo(11,1250);
  changeServo(16,1750);
  delay_ms(100);
  changeServo(7,-1);
  changeServo(11,-1);
  changeServo(15,-1);
  changeServo(24,-1);
  changeServo(20,-1);
  changeServo(16,-1);
  delay_ms(10);
  
  changeServo(14,1950);//Replant knees 1
  changeServo(6,1950);
  changeServo(21,1950);
  delay_ms(100);
  
  changeServo(25,1750);//Pick Up Knees 2
  changeServo(17,1750);
  changeServo(10,1750);
  delay_ms(200);
  changeServo(25,-1);//Kill Knees 2
  changeServo(17,-1);
  changeServo(10,-1);
  delay_ms(20);
  
  changeServo(7,1250);//Move hips
  changeServo(20,1750);
  changeServo(15,1250);
  delay_ms(100);
  changeServo(24,1250);
  changeServo(11,1750);
  changeServo(16,1250);
  delay_ms(100);
  changeServo(7,-1);
  changeServo(11,-1);
  changeServo(15,-1);
  changeServo(24,-1);
  changeServo(20,-1);
  changeServo(16,-1);
  delay_ms(10);
  }
Example #11
0
void Servotor32::reset()/////////////////////////////////////////////////////////////////////////////////
{
 changeServo(6,1950); //Stabalizes knees
 changeServo(10,1950); 
 changeServo(14,1950); 
 changeServo(25,1950); 
 changeServo(21,1950); 
 changeServo(17,1950); 
 delay_ms(100);
 
changeServo(17,1500);//RB
changeServo(16,1500);
delay_ms(200);
changeServo(18,500);
delay_ms(100);
changeServo(17,1950);
changeServo(18,1050);
delay_ms(200);
changeServo(18,-1);
changeServo(16,-1);
//changeServo(17,-1);
delay_ms(100);

changeServo(6,1500);//LF
changeServo(7,1500);
delay_ms(200);
changeServo(5,600);
delay_ms(100);
changeServo(6,1950);
changeServo(5,1050);
delay_ms(200);
changeServo(5,-1);
//changeServo(6,-1);
changeServo(7,-1);
delay_ms(100);

changeServo(21,1500);//RM
changeServo(20,1500);
delay_ms(200);
changeServo(22,500);
delay_ms(100);
changeServo(21,1950);
changeServo(22,1050);
delay_ms(200);
changeServo(22,-1);
changeServo(20,-1);
//changeServo(21,-1);
delay_ms(100);
  
changeServo(25,1500);//RF
changeServo(24,1500);
delay_ms(200);
changeServo(26,600);
delay_ms(100);
changeServo(25,1950);
changeServo(26,1050);
delay_ms(200);
changeServo(24,-1);
changeServo(26,-1);
//changeServo(25,-1);
delay_ms(100);

changeServo(14,1500);//LB
changeServo(15,1500);
delay_ms(200);
changeServo(13,500);
delay_ms(100);
changeServo(14,1950);
changeServo(13,1050);
delay_ms(200);
changeServo(13,-1);
changeServo(15,-1);
//changeServo(14,-1);
delay_ms(100);
changeServo(6,-1); 
 changeServo(10,-1); 
 changeServo(14,-1); 
 changeServo(25,-1); 
 changeServo(21,-1); 
 changeServo(17,-1);
 delay_ms(10);
 
 changeServo(10,1500);//LM
changeServo(11,1500);
delay_ms(200);
changeServo(9,500);
delay_ms(100);
changeServo(10,1950);
changeServo(9,1050);
delay_ms(200);
changeServo(9,-1);
changeServo(10,-1);
//changeServo(11,-1);
delay_ms(100);
}
Example #12
0
void Servotor32::standUp()//////////////////////////////////////////////////////////////////////////
{
  changeServo(7,1950);//Hip position
changeServo(11,1500);
changeServo(15,1250);
changeServo(24,1050);
changeServo(20,1500);
changeServo(16,1750);
delay_ms(200);
for(int i=0;i<32;i++)//KillServos
{
    changeServo(i,-1);
}

changeServo(6,900);//Knee position
changeServo(10,900);
changeServo(14,900);
changeServo(25,900);
changeServo(21,900);
changeServo(17,900);
delay_ms(200);
for(int i=0;i<32;i++)//KillServos
{
    changeServo(i,-1);
}

changeServo(5,600);//Ankle position
changeServo(9,600);
changeServo(13,600);
changeServo(26,600);
changeServo(22,600);
changeServo(18,600);
delay_ms(500);
for(int i=0;i<32;i++)//KillServos
{
    changeServo(i,-1);
}

int knee[6] = {6,21,14,25,10,17};
int ankle[6] = {5,22,23,26,9,18};

//Stand
int ankAngle = 600;
for(int angle=1300; angle<2100; angle+=30)
{
  for(int h=0;h<6;h++)
  {
    changeServo(knee[h],angle);
    changeServo(ankle[h],ankAngle);
    delay_ms(100);
    changeServo(ankle[h],-1);
  }
  ankAngle+=15;
}

reset();

for(int i=0;i<32;i++)//KillServos
{
    changeServo(i,-1);
}

  
}
Example #13
0
void Servotor32::processChar(char inChar){
  switch(inChar){
    case '#':
      servoCounting = true;
      numCount = 0;
      inServo = -1;
      inPos = -1;
      break;
    case 'D':
      printStatus();
      break; 
    case 'P':
      if(servoCounting){
        inServo = tallyCount();
        servoCounting = false;
      }
      posCounting =  true;
      numCount = 0;
      break; 
    case '\r':
    case '\n':
      if(posCounting){
        inPos = tallyCount();
        posCounting = false;
      }
      if((inServo >=0)&&(inServo <=31)&&(((inPos >= 500)&&(inPos <= 2500))||(inPos == -1))){
        changeServo(inServo,inPos);        
        inServo = -1;
        inPos = -1;
      }
      numCount = 0;
      break;
    case 'V':
      Serial.println("SERVOTOR32_v2.0");
      Serial1.println("SERVOTOR32_v2.0");
      break;
    case 'C':
      for(int i=0; i<32; i++){
        changeServo(i, 1500);
      }
      Serial.println("All Centered");
      Serial1.println("All Centered");
      break;
    case 'K':
      for(int i=0; i<32; i++){
        changeServo(i,-1);
      }
      Serial.println("All Turned Off");
      Serial1.println("All Turned Off");
      break;
    case 'L':
      if(servoCounting){
        inServo = tallyCount();
        servoCounting = false;
      }
      changeServo(inServo, -1);
      break;
    case 'Q':
      Serial.print("CM: ");
      Serial.println(ping());
      Serial1.print("CM: ");
      Serial1.println(multiPing(10));
    default:
      if((inChar > 47)&&(inChar < 58)){
        if(numCount<4){
          numString[numCount] = inChar-48;
          numCount++;
        }
      }
      break;
  } 
}
Example #14
0
void Servotor32::processChar(char inChar){
	if (binary) {
	  switch(inChar){
		case '\r':
		case '\n':
			binary = false;
                        changeServo(5,inAllPos[0]);
                        changeServo(6,inAllPos[1]);
                        changeServo(7,inAllPos[2]);
                        changeServo(9,inAllPos[3]);
                        changeServo(10,inAllPos[4]);
                        changeServo(11,inAllPos[5]);
                        changeServo(13,inAllPos[6]);
                        changeServo(14,inAllPos[7]);
                        changeServo(15,inAllPos[8]);
                        changeServo(16,inAllPos[9]);
                        changeServo(17,inAllPos[10]);
                        changeServo(18,inAllPos[11]);
                        changeServo(20,inAllPos[12]);
                        changeServo(21,inAllPos[13]);
                        changeServo(22,inAllPos[14]);
                        changeServo(24,inAllPos[15]);
                        changeServo(25,inAllPos[16]);
                        changeServo(26,inAllPos[17]);
                        changeServo(31,inAllPos[18]);
		  break;
		default:
                  inAllPos[numCount] = byte(inChar)*10;
                  numCount++;
		  break;
	   }
        }
	else {
	  switch(inChar){
		case '$':
		  binary = true;
		  numCount = 0;
		  break;
		case '#':
		  servoCounting = true;
		  numCount = 0;
		  inServo = -1;
		  inPos = -1;
		  break;
		case 'D':
		  printStatus();
		  break; 
		case 'P':
		  if(servoCounting){
			inServo = tallyCount();
			servoCounting = false;
		  }
		  posCounting =  true;
		  numCount = 0;
		  break; 
		case '\r':
		case '\n':
		  if(posCounting){
			inPos = tallyCount();
			posCounting = false;
		  }
		  if((inServo >=0)&&(inServo <=31)&&(((inPos >= 500)&&(inPos <= 2500))||(inPos == -1))){
			changeServo(inServo,inPos);        
			inServo = -1;
			inPos = -1;
		  }
		  numCount = 0;
		  break;
		case 'V':
		  Serial.println("SERVOTOR32_v2.1a");
		  Serial1.println("SERVOTOR32_v2.1a");
		  break;
		case 'C':
		  for(int i=0; i<32; i++){
			changeServo(i, 1500);
		  }
		  Serial.println("All Centered");
		  Serial1.println("All Centered");
		  break;
		case 'K':
		  for(int i=0; i<32; i++){
			changeServo(i,-1);
		  }
		  Serial.println("All Turned Off");
		  Serial1.println("All Turned Off");
		  break;
		case 'L':
		  if(servoCounting){
			inServo = tallyCount();
			servoCounting = false;
		  }
		  changeServo(inServo, -1);
		  break;
		case 'S': // make an arcPing and send distances back over serial
		  arcPing();
		  for(int i = 0; i < ARCPING_STEPS; i++)
		  {
			Serial.println(arcPingDistances[i]);
			Serial1.println(arcPingDistances[i]);
		  }
		  delay_ms(200);
		  break;
		case 'M': // send multiple distance readings back over serial
		  Serial.println(multiPing(5));
		  delay_ms(200);
		  break;  
		default:
		  if((inChar > 47)&&(inChar < 58)){
			if(numCount<4){
			  numString[numCount] = inChar-48;
			  numCount++;
			}
		  }
		  break;
	  } 
	}
}
Example #15
0
void Servotor32::process(Stream *serial){
  if(serial->available()) { //process input from the serial stream (USB or Serial)
    char inChar = (char)serial->read();
    switch(inChar){
      case '#':
        servoCounting = true;
        numCount = 0;
        inServo = -1;
        inPos = -1;
        break;
      case 'D':
        printStatus(serial);
        break; 
      case 'P':
        if(servoCounting){
          inServo = tallyCount();
          servoCounting = false;
        }
        posCounting =  true;
        numCount = 0;
        break; 
      case '\r':
      case '\n':
        if(posCounting){
          inPos = tallyCount();
          posCounting = false;
        }
        if((inServo >=0)&&(inServo <=31)&&(((inPos >= 500)&&(inPos <= 2500))||(inPos == -1))){
          changeServo(inServo,inPos);        
          inServo = -1;
          inPos = -1;
        }
        if(pinCounting){
          // set the pin according to the pin Command
            setPinCommand();
        }
        numCount = 0;
        pinCount = 0;
        break;
      case 'V':
        serial->println("SERVOTOR32_v2.02");
        break;
      case 'C':
        for(int i=0; i<32; i++){
          changeServo(i, 1500);
        }
        serial->println("All Centered");
        break;
      case 'K':
        for(int i=0; i<32; i++){
          changeServo(i,-1);
        }
        serial->println("All Turned Off");
        break;
      case 'L':
        if(servoCounting){
          inServo = tallyCount();
          changeServo(inServo, -1);
          servoCounting = false;
        }
        if(pinCounting){
          if(pinCount < 3){
            pinCommand[pinCount] = inChar;
            pinCount++;
          }          
        }
        break;
      case 'S':
        servoCounting = false;
        posCounting = false;
        pinCounting = true;
        pinCount = 0;
        break;
      default:
        if(pinCounting){
          if(pinCount < 3){
            pinCommand[pinCount] = inChar;
            pinCount++;
          }
        }
        if((inChar > 47)&&(inChar < 58)){
          if(numCount<4){
            numString[numCount] = inChar-48;
            numCount++;
          }
        }
        break;
    }
  }
}