找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 8834|回复: 2

robot c ev3个人学习笔记,有要的可以看看。

  [复制链接]
发表于 2017-10-10 13:41:08 | 显示全部楼层 |阅读模式
float batteryDrain = getBatteryCurrent();当前电池用电量吧

float batteryLife = getBatteryVoltage();还有多少电池水平。

float timeUntilDown = getPowerDownTimer();自动关机时间。


         float  pd=getPowerDownTimer();
        displayBigTextLine(5,"powerdown=%0.1f",pd);

        float batt=getBatteryVoltage();
          float bat1=getBatteryCurrent():
        displayBigTextLine(3,"%0.1f%0.1f",batt,bat1);显示数字。


setPowerDownTimer(5);设置自动关机时间。设好后下次一直就是这个时间了。

motor(motorA)=50;A口电机以功率50运行。

displayBigTextLine(3,"abc");第三行大字体靠左显示abc;

displayCenteredBigTextLine(2,"rrob");第二行大字体居中显示rrob

displayCenteredTextLine(3,"ROBOTC");第三行剧中显示标准字体

The x value is above 177.
The y value is above 127.

displayBigStringAt(0, 16, "A"); x  y 座标显示。   从左下角为00




clearPixel(50, 32);清除像素点信息。

         for(inti=1;i<50;i++)
         {
                  for(intj=1;j<50;j++)
                  {      
                          clearPixel(i,j);
                  }
         }

displayInverseBigStringAt(10, 20,"ROBOTC");  像素点1020黑底白字显示robotc.
displayString(3, "ROBOTC");  第三行显示robotc
displayTextLine(3, "ROBOTC");第三行显示robotc

drawLine(10,10,167,10);
drawLine(10,10,10,117);
drawLine(10,117,167,117);    画个正方形。
drawLine(167,10,167,117);

drawRect(20, 107, 157, 20);   下。画方形
drawEllipse(10, 40, 100, 15); 下。画圆形

eraseDisplay();清屏;

drawLine(10,10,167,117);
drawLine(10,117,167,10);画线。以坐标。

eraseLine(10,10,167,117);  擦除画的线。

eraseRect(20,107,157,20);把左上右下,内的信息都删了。

fillEllipse(30, 97, 147, 30);画实心圆。

fillRect(55, 97, 122, 30);画实心正方形。


invertPixel(5,10); 填实像素。
setPixel(x, y);画点。

         setLEDColor(ledRed);   指示灯变红色。
         setLEDColor(ledOrangeFlash)橙色一直闪。
         setLEDColor(ledGreenPulse)绿色闪二下。节凑。
         sleep(5000);

buttonNone: No button (0)
buttonUp: Up button (1)
buttonEnter:  Enter button (2)
buttonDown: Down button (3)
buttonRight:  Right button (4)
buttonLeft: Left button (5)
buttonBack: Back button (6)
buttonAny: Any button (7)



         if(getButtonPress(LEFT_BUTTON))    程序块上左边按键按下。是1    没有按是0
                  {
                          setMotorSpeed(motorA,50);    设置A电机的速度50   

                  }else
                  {
                          setMotorSpeed(motorA,-50);        设置A电机的速度为-50

                  }
getTouchValue(S1)==0   S1 按压传管器。   

setBlockBackButton(1); 程序块上的返回值 不会退出程序 。。0 可以退出。

waitForButtonPress();  等街程序块上的任意按健,程序继续运行下去。


bFloatDuringInactiveMotorPWM = true;   // the motors WILL coast when power is notapplied
bFloatDuringInactiveMotorPWM = false;  // the motors will NOT coast when power isnot applied


         getMotorBrakeMode(motorA)!= motorCoast   返回A电机不是滑行方式
         getMotorBrakeMode(motorA)!= motorBrake    返回A电机不是制动方式


         setMotorBrakeMode(motorA,motorCoast);设置A电机滑行方式,
         setMotorBrakeMode(motorA,motorBrake);设置A电机制动方式。
         setMotorSpeed(motorA,100);
         sleep(5000);
         setMotorSpeed(motorA,0);
         sleep(50000);
重置A电机的度数为0
resetMotorEncoder(motorA);

设置a电机以50的功率,转1000度。
setMotorTarget(motorA, 1000, 50);

一直等电机转到设置的数度就结束。repeatUntil  是条件满足退出   while 是条件不满足退出。
repeatUntil(getMotorEncoder(motorA) ==getMotorTarget(motorA))  A电机转的角度,   
{

}

resetMotorEncoder(motorA);
//resetMotorEncoder(motorD);
setMotorTarget(motorA,1000,50);
//setMotorTarget(motorD,-100,50);

while(getMotorTarget(motorA)!=getMotorEncoder(motorA)) ////repeatUntil(getMotorTarget(motorA)==getMotorEncoder(motorA))
{
      eraseDisplay();
        displayBigTextLine(2,"targe=%d",getMotorTarget(motorA));
        displayBigTextLine(4,"encode=%d",getMotorEncoder(motorA));
        sleep(50);
        }

                  if(getMotorRPM(motorA)< 100)   返回A电机的每分钟运行多少圈
                  {
                          //Increasethe value of speed
                          speed= speed + 1;

                          //Briefsleep period (2 milliseconds)
                          sleep(2);

                  }

                  //Thenapply the value of speed to the motors
                  //Thisshould cause the speed to 'ramp' up
                  setMotorSpeed(motorA,speed);
                  setMotorSpeed(motorD,speed);
                  displayBigTextLine(2,"%d",getMotorSpeed(motorA));返回电机功率。
                  displayBigTextLine(4,"%d",getMotorSpeed(motorD));
                  displayBigTextLine(6,"%d",getMotorRPM(motorA));
                  }
moveMotorTarget(motorA, 1000, 50);  

//Keep looping until the motor stops moving
repeatUntil(getMotorMoving(motorA) ==0);   电机转到一定的角度就停止。
{
         //Donothing (idle loop)
}

getMotorMoving(motorA)   电机是否在移动。

setMotorSpeed(motorA,50);     getMotorSpeed(motorA);


moveMotorTarget(MotorA,1000,50);    getMotorMoving(motorA)==0   

getMotorRunning(motorA) == 0 电机是否在运行。

int speedA=getMotorSpeed(motorA); 整形。A电机功率。

moveMotorTarget(motorA,1000,100); 100的功率 向前转1000度。

waitUntilMotorStop(motorA);等待A电机停止。////好。

         moveMotorTarget(motorA,1000,100);
         waitUntilMotorStop(motorA);加了等电机a电机转好后在在继续向下运行。不加两个电机一起转。
         moveMotorTarget(motorD,-1000,50);
         waitUntilMotorStop(motorD);


         //Setsthe Left Motor to the left side of the drive train
         //Therobot should move forward for 1 rotation as expected
         nMotorDriveSide[leftMotor]= driveLeft;
         forward(1,rotation, 50);

         //Setsthe Left Motor to the right side of the drive train
         //Thiswill cause undesired behavior from the forward command
         nMotorDriveSide[leftMotor]= driveRight;
         forward(1,rotation, 50);

resetMotorEncoder(motorA);重置A电机角度为0

setMotorBrakeMode(motorA, motorCoast);


//Set a motor target of 360 encoder counts
setMotorTarget(motorA, 360, 0);

//Wait until the motor has reached itstarget and stops
waitUntilMotorStop(motorA);

//Tell the program to sleep for 1000ms (1second)
//Check the encoder value in the debugger
sleep(1000);

//Resets the motor encoder to 0
resetMotorEncoder(motorA);

//The motor will now Brake(resistsmovement)
setMotorBrakeMode(motorA, motorBrake);


//Set a motor target of 360 encoder counts
setMotorTarget(motorA, 360, 0);

//Wait until the motor has reached itstarget and stops
waitUntilMotorStop(motorA);

//Tell the program to sleep for 1000ms (1second)
//Check the encoder value in the debugger
sleep(1000);

//Set motor to be reversed
setMotorReversed(motorA, true); 设置A电机反转为真。

//The motor runs counter-clockwise withpositive speeds (reversed)
setMotorSpeed(motorA, 50);

//Set motor to not be reversed
setMotorReversed(motorA, false); 设置电机反转为假。

//The motor runs clockwise with positivespeeds (normal)
setMotorSpeed(motorA, 50);     


//Sets the speed value of motor motor portA to full forward (+100)
setMotorSpeed(motorA, 100);   设置电机功率100 的速度。
//Halt program flow for 1000ms (1 second)
sleep(1000);

//Sets the speed value of motor motor port Ato half-speed backwards (-50)
setMotorSpeed(motorA, -50);倒着电机速度。
//Halt program flow for 1000ms (1 second)
sleep(1000);

//Sets the speed value of motor motor port Ato stopped (0)
setMotorSpeed(motorA, 0);停止电机
//Halt program flow for 1000ms (1 second)
sleep(1000);

//Synchs left and right motor at 50 turnratio
//at power level 60 for 1 second
setMotorSync(leftMotor, rightMotor, 0, 60);
sleep(1000);

//Synchs left and right motor at 50 turnratio
//at power level 60 for 1 second
setMotorSync(leftMotor, rightMotor, 50,60);
sleep(1000);

//Synchs left and right motor at 50 turnratio
//at power level 60 for 1 second
setMotorSync(leftMotor, rightMotor, 100,60);
sleep(1000);


#pragma config(Sensor, S1,  touchSensor,   sensorEV3_Touch)
#pragma config(Sensor, S2,  gyroSensor,     sensorEV3_Gyro, modeEV3Gyro_RateAndAngle)
#pragma config(Sensor, S3,  colorSensor,    sensorEV3_Color, modeEV3Color_Color)
#pragma config(Sensor, S4,  sonarSensor,    sensorEV3_Ultrasonic)
#pragma config(Motor, motorA, armMotor,tmotorEV3_Large, PIDControl, encoder)
#pragma config(Motor, motorB, leftMotor,tmotorEV3_Large, PIDControl, driveLeft, encoder)
#pragma config(Motor, motorC, rightMotor,tmotorEV3_Large, PIDControl, driveRight, encoder)
//*!!Code automatically generated by'ROBOTC' configuration wizard              !!*//
pragma 伪指令具有以下形式

task main()
{
//Sets the LeftMotor to the left side of the drive train
         //Therobot should move forward for 1 rotation as expected
         nMotorDriveSide[leftMotor]= driveLeft;


         //Setsthe Left Motor to the right side of the drive train
         //Thiswill cause undesired behavior from the forward command
         nMotorDriveSide[leftMotor]= driveRight;

         setMotorSync(leftMotor,rightMotor,0,60);双电机同步。             0直走。100掉头。
sleep(1000);
setMotorSync(leftMotor,rightMotor,50,60);   左电机 右电机  电机转向。功率。

         sleep(1000);

}
         setMotorSyncEncoder(leftMotor,rightMotor,0,360,50);双电机直行同步运行360度。以功率50
         waitUntilMotorStop(leftMotor);一定要等电机停止后才可以运行下一步。

         setMotorSyncEncoder(leftMotor,rightMotor,100,360,50);双电机掉头。360度,电机50功率
         setMotorSyncEncoder(motorB,motorC,0,360,50);  同步电机也可以motorA   motorB.
         waitUntilMotorStop(leftMotor);等待电机停止后可以运行。

         setMotorSyncEncoder(motorB,motorC,100,360,50);
         waitUntilMotorStop(rightMotor);
         setMotorSync(leftMotor,rightMotor,0,50);
         sleep(2000);

setMotorSyncTime(motorB,motorC,0,1000,50);  同步电机BC 直行,1秒,功率50
         waitUntilMotorStop(rightMotor);等待电机停止。
         setMotorSyncTime(motorB,motorC,100,1000,50);同步电机BC掉头。1秒。功率50

//Sets the motorA's target to 1000 encodercounts at a speed value of 50
setMotorTarget(motorA, 1000, 50);设置A电机转1000功率50
moveMotorTarget(motorA,1000, 50);
//Holds program flow until the motor on motorport A comes to a complete stop.
waitUntilMotorStop(motorA);等电机停止后在继续运行。


Sensor


displayCenteredBigTextLine(3,"%d",getColorAmbient(S3));    环境光。0100
displayCenteredBigTextLine(3,"%d",getColorReflected(S3));   反射光。Short类型。
         displayCenteredBigTextLine(3,"%d",getColorHue(S3));返回0360的颜色。
                              

         getColorRGB(S3,r,g,b);  返回RGB三色。
                  displayCenteredBigTextLine(2,"R=%d",r);     
                  displayCenteredBigTextLine(4,"G=%d",g);   
                  displayCenteredBigTextLine(6,"B=%d",b);   
displayCenteredBigTextLine(8,"Hue=%d",getColorHue(S3));      
                  sleep(50);



int threshold = 50;     
while(true)
{
         //Ifthe color sensor senses the line (a dark value
         //lowerthan the calculated threshold of 50):
         if(getColorReflected(S3) < threshold)
         {
                  setMotorSpeed(motorC, 50);
                  setMotorSpeed(motorB,0);
         }
         else
         {
                  setMotorSpeed(motorC,0);
                  setMotorSpeed(motorB,50);
         }
}

         intco=0;
  while(1)
  {
      co=getColorName(S3);  返回色彩名,0 7 个色彩。,
      displayCenteredBigTextLine(2,"%d",co);
      switch(co)
      {
      case 0:
               displayCenteredBigTextLine(4,"colorNone");
               break;
      case 1:
               displayCenteredBigTextLine(4,"colorBlack");
               break;
      case 2:
               displayCenteredBigTextLine(4,"colorBlue");
               break;
      case 3:
               displayCenteredBigTextLine(4,"colorGreen");
               break;
      case 4:
               displayCenteredBigTextLine(4,"colorYellow");
               break;
      case 5:
               displayCenteredBigTextLine(4,"colorRed");
               break;
      case 6:
               displayCenteredBigTextLine(4,"colorWhite");
               break;
      case 7:
               displayCenteredBigTextLine(4,"colorBrown");
               break;
      default:
               displayCenteredBigTextLine(4,"color  no");
      }
sleep(50);
  }

getColorSaturation(S3)   返回色采饱和度。0 100

dis=getUSDistance(S4);  返回超升波的距离

repeatUntil(0)    constant '0'. Loop will never exit.



resetGyro(S2); 重置陀螺仪,

repeatUntil(getGyroDegrees(S2) > 90) 陀螺仪反回角度。
{
setMotorSpeed(motorC,-50);
         setMotorSpeed(motorB,50);
}
//Stop the motors at the end of the turn
setMotorSpeed(motorB, 0);
setMotorSpeed(motorC, 0);


displayCenteredBigTextLine(4,"%d",getGyroDegrees(S2));   返回 角度
displayCenteredBigTextLine(6,"%d",getGyroHeading(S2));返回增加减少了多少角度。

getGyroRate(S2)返回转动的速度,移动的速度?

getIRBeaconDirection(S4)   信标方向
if(getIRBeaconDirection(S4) > 5)
         {
                  //TurnRight
                  setMotorSpeed(leftMotor,50);
                  setMotorSpeed(rightMotor,-50);
         }
         //Ifthe IR sensor (port 4) sees a beacon to the left (negative)
         elseif(getIRBeaconDirection(S4) < -5)
         {
                  //TurnLeft
                  setMotorSpeed(leftMotor,-50);
                  setMotorSpeed(rightMotor,50);
         }
         //Otherwise,move forward
         else
         {
                  //MoveForward
                  setMotorSpeed(leftMotor,50);
                  setMotorSpeed(rightMotor,50);
         }
}//跟着信标走。




//While the IR beacon's signal strength isless than 20
while(getIRBeaconStrength(S4) < 20)
{
                  //Spinin place (seek the beacon)
                  setMotorSpeed(leftMotor,50);
                  setMotorSpeed(rightMotor,-50);
}//跟着IR信标走。

while(getIRDistance(S4) > 45)  测试红外距离。
{
         //Keepmoving forward
         setMotorSpeed(leftMotor,50);
         setMotorSpeed(rightMotor,50);
}

//Stop the robot
setMotorSpeed(leftMotor, 0);
setMotorSpeed(rightMotor, 0);


getIRRemoteButtons(S4)   
getIRRemoteChannelButtons(S4, 1)




         resetBumpedValue(S1);   重置触动传感器。
         repeatUntil(getBumpedValue(S1)==15)  触动传感器。按一下加一。
         {
         displayCenteredBigTextLine(2,"%d",getBumpedValue(S1));
                  resetBumpedValue(S1);
         repeatUntil(getBumpedValue(S1)==15)
         {
         displayCenteredBigTextLine(2,"%d",getBumpedValue(S1));
         displayCenteredBigTextLine(4,"%d",getTouchValue(S1));按下为1 没有按为0
         }
         ,SensorRaw(S4)返回原始传感器的数值。

SensorType(S1) = sensorEV3_Touch;  设置传感器类型。

while(true) //Infinite loop:
{  
         //display "Sensor Value: ##"
         displayCenteredBigTextLine(3,"SensorValue: %d",sensorValue(S1));


         wait1Msec(100);

        eraseDisplay();
}


Sound

//Clear the sound buffer
clearSounds(); 停止声音
&#8226;Values range from 0 to 100 (percentages)
setSystemVolume(75);声音大小
speakerVolume = getVolume();  得到声音大小。
PlayImmediateTone(440, 50);
wait1Msec(200);
playSound(soundBeepBeep);
displayCenteredBigTextLine(2,"%d",getSoundVolume());
                  playSound(soundBeepBeep);
                  sleep(1000);
                  //playSound(soundBlip);
                  sleep(1000);
                  playSound(soundDownwardTones);
                  sleep(1000);
                  //playSound(soundException);
                  sleep(1000);
                  //playSound(soundFastUpwardTones);
                  sleep(1000);
                  playSound(soundLowBuzz);
                  sleep(1000);
                  playSound(soundShortBlip);
                  sleep(1000);
                  //playSound(soundUpwardTones);

sleep(5000);



&#9702;C:\Program Files (x86)\RobomatterInc\ROBOTC Development Environment 4.X\EV3 System Files\Sounds

playSoundFile("Bravo");
playTone(784, 15);

task control

// Aborts the current time slice of the task
abortTimeslice();

// Suspend every other task and focus 100%of the CPU on the current task
hogCPU();

int myPriority = 100;
//Sets 'mypriority' to 7 (default) 默认7 最高255。任务优先级。

myPriority = kDefaultTaskPriority;
myPriority =kHighPriority;最高255
myPriority =kLowPriority;最低为0;
// Assigns the current task with a priorityof 100
nSchedulePriority = 100;
// Resume other tasks and return control tothe task scheduler
&#8226;It cancelsthe effect of a previous HogCPU() function call.                           
releaseCPU();
// Starts the task named"MoveArm" with a priorty of 10
startTask(MoveArm, 10);任务名,优先级10l
// Stops all tasks currently running andexits the current program
stopAllTasks();
// Stops the task named "MoveArm"
stopTask(MoveArm);
int threshold = 600;
clearTimer(T1); // Resets timer T1 to startcounting at 0
while(time1[T1] < 10000)  // Loops code while timer T1 has counted lessthan 10 seconds
{
if(getColorValue(lineDetector) <threshold)
{
// counter-steer right:
setMotorSpeed(leftMotor, 50);              //Set the leftMotor (motor1) tohalf power (50)
setMotorSpeed(rightMotor, 0);   //Set the rightMotor (motor6) to off (0)
}
else
{
//counter-steer left:
setMotorSpeed(leftMotor, 0);              //Set the leftMotor (motor1) tooff (0)
setMotorSpeed(rightMotor, 50);  //Set the rightMotor (motor6) to half power(50)
}
}
}
delay(1000);

// Stores the current value of nPgmTime toa variable

varPgmTime = nPgmTime;
// Stores the current value of nSysTime toa variable

varSysTime = nSysTime;
sleep(1000);


//Sets the robot to drive forward bysetting ports A, B, C, and D at half speed for 1 second
setMultipleMotors(50, motorB, motorC);
wait(1);
stopMultipleMotors(motorB, motorC);
//Stops all of the motors attached to theEV3
stopAllMotors();
//To set motor A to speed -50 for 0.5seconds:
setMotor(motorA, -50);
wait(0.5);
stopMotor(port8);//stops motor
stopMultipleMotors(rightMotor, leftMotor,armMotor);
resetTimer(T1);
while(getTimer(T1,milliseconds)<2000){
}
stopAllmotors();c

如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2017-10-10 13:45:40 | 显示全部楼层
本帖最后由 humanxp 于 2017-10-11 10:44 编辑

setMotorTarget(motorA,1000,50);
设置电机到指定的度数,以0为基准。
moveMotorTarget(motorA,1000,50;
在当前的情况下。移动多少角度 。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2017-10-10 16:35:32 | 显示全部楼层
好长……耐不住性子看~~~先赞一个
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-6-1 20:31 , Processed in 0.106882 second(s), 19 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表