View unanswered posts | View active topics It is currently Sun Jan 20, 2019 1:41 pm






Reply to topic  [ 1 post ] 
Keeping track of movement 
Author Message
Rookie

Joined: Fri Jan 30, 2015 9:58 pm
Posts: 3
Post Keeping track of movement
Hi guys. I was wondering (in robotc) how you would go about keeping track of movement so my robot could then return to its original starting position. I am trying to create a robot that finds an object, grips it, and then returns to me. I was thinking of using a global variable and maybe a while loop that increments this variable until it finds the object?

However my main question is, how could I make it so the robot keeps track of its turns and what not?

Here is what I have so far (look in my MoveTask())

Code:
#pragma config(Sensor, S1,     soundSensor,    sensorSoundDBA)
#pragma config(Sensor, S3,     sonarSensor,    sensorNone)
#pragma config(Sensor, S4,     ,               sensorSONAR)
#pragma config(Motor,  motorA,          gripclaw,      tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorB,          rightMotor,    tmotorNXT, PIDControl, encoder)
#pragma config(Motor,  motorC,          leftMotor,     tmotorNXT, PIDControl, encoder)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

/*--------------------------------------------------------------------------------------------------------*\
|*                                                                                                        *|
|*                                            - Gripper Bot -                                             *|
|*                                            ROBOTC on NXT                                               *|
|*                                                                                                        *|
|*  This program finds an object, grips it when a clap is heard, and returns the object                              *|
|*   back to its starting position.                                                                                                            *|
|*                                                                                                        *|
|*                                        ROBOT CONFIGURATION                                             *|
|*    NOTES:                                                                                              *|
|*    1)  The 1 second delay is needed to avoid obtaining inaccurate initial readings.                    *|
|*                                                                                                        *|
|*    MOTORS & SENSORS:                                                                                   *|
|*    [I/O Port]              [Name]              [Type]              [Description]                       *|
|*    Port C                  motorC              NXT                 Right motor                         *|
|*    Port B                  motorB              NXT                 Left motor                          *|
|*      Port A                            motorA                     NXT                           Rotate Sonar Sensor                           *| 
|*    Port 1                  soundSensor         Sound Sensor        Sound DbA                           *|
|*      Port 4                           sonarSensor               Sonar Sensor            Sonar                                                *|
\*--------------------------------------------------------------------------------------------------------*/
/*---------------------------------------------GLOBAL VARIABLES-------------------------------------------*/
int detectflag = 0;                     // flag used to detect the object
int movecount = 0;                     // flag used to keep track of movement
int soundflag = 0;                     // flag used to detect clap
/*-----------------------------------------------------------------------*/
/* Movement Task - This task moves the robot until an object is detected.*/
/*                      - Moves between a certain distance                                  */
/*-----------------------------------------------------------------------*/
task MoveTask(){
   nMotorEncoder[motorB] = 0; // Initialize motor encoders
   nMotorEncoder[motorC] = 0;
   wait1Msec(300);

   while(detectflag == 0){       // While object is not detected
      soundflag = 0;                // Flag not set while moving
      // Foward
      motor[motorB] = 35;      // Motor B is run at a 35 power level
      motor[motorC] = 35;      // Motor C is run at a 35 power level
      wait1Msec(300);
      nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
      nMotorEncoderTarget[motorC] = motorC;

      // Point Turn Left
      motor[motorB] = -35;      // Motor B is run at a 35 power level
      motor[motorC] = 35;       // Motor C is run at a 35 power level
      wait1Msec(300);
      nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
      nMotorEncoderTarget[motorC] = motorC;

      // Point Turn Right
      motor[motorB] = 35;       // Motor B is run at a 35 power level
      motor[motorC] = -35;      // Motor C is run at a 35 power level
      wait1Msec(300);
      nMotorEncoderTarget[motorB] = motorB;   // Track degree movement;
      nMotorEncoderTarget[motorC] = motorC;

      movecount++;      // Increment counter to keep track of distance
   }
   // Else the object is detected
   while(detectflag == 1){
      if(soundflag == 1){               // Clap heard?
         motor[motorA] = 45;            // Grip object
         wait1Msec(300);
         }else{
         // do nothing
      }
      // Turn Around
      motor[motorB] = -60;      // Motor B is run at a 35 power level
      motor[motorC] = 60;       // Motor C is run at a 35 power level
      wait1Msec(300);
      
      motor[motorB] = nMotorEncoderTarget[motorB];      // Bring robot back to start
      motor[motorC] = nMotorEncoderTarget[motorC];      // Bring robot back to start
      wait1Msec(300);
   }
   return;
}
/*-----------------------------------------------------------------------*/
/* Detect Task - This task sets a flag once an object is detected.          */
/*-----------------------------------------------------------------------*/
task DetectTask(){
   wait1Msec(500);                  // Initialize Sensor readings
   int distance_in_cm = 20;   // Create variable 'distance_in_cm' and initialize it to 20(cm).

   while(SensorValue[sonarSensor] > distance_in_cm)   // While readings are less than 'distance_in_cm':
   {
      detectflag = 0;          // No detection, so detect flag is null
   }
   detectflag = 1;             // Object detected, set detect flag
   return;
}
/*-----------------------------------------------------------------------*/
/* Sound Task - This task sets a flag once a clap/sound is detected  .   */
/*-----------------------------------------------------------------------*/
task SoundTask(){
   wait1Msec(500);                   // Initialize Sensor readings
   while(SensorValue(soundSensor) < 70)    // While the Sound Sensor is less than 70 (quiet):
   {
      soundflag = 0;                                    // No clap, so sound flag is null
   }
   soundflag = 1;                                       // Clap heard, set sound flag
   return;
}
/*-----------------------------------------------------------------------*/
/* Main Task - Runs the other tasks                                                       */
/*-----------------------------------------------------------------------*/
task main()
{
   wait1Msec(500);                   // Initialize Sensor readings
   StartTask(MoveTask);
   StartTask(DetectTask);
   StartTask(SoundTask);

   return;
}


Sun Mar 15, 2015 6:26 pm
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 1 post ] 

Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron



Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.