CR201 Tutorial – Class 4

This is the final tutorial for the CR201 course. This tutorial will go over conditional statements, relational operators, and flowcharts.

Conditional Statements

Conditional statements are a tool used to compare values. When you need to compare the relationship of two values in an if/else statement, you’ll use these.

Math Relational OperatorC Programming Syntax
===
!=
>>
>=
<<
<=

When used in a conditional statement, the output will be TRUE when the relationship check is correct or FALSE when the relationship check is incorrect. However, relational operators have no effect outside a conditional statement.

An example of conditional statements would be something like this:

A = 1
B = 2

if (A == B) {

/* this is false, code here will NOT be executed */

} else if (A != B) {

/* this is true, code here WILL be executed */

} else {

/* code here will NOT be executed because the second condition above is already true and exit the if/else statement*/

}

if (A > B) {

/* this is false, code here will NOT be executed */

} else if (A >= B) {

/* this is false, code here will NOT be executed */

} else if (A < B) {

/* this is true, code here WILL be executed */

} else if (A <= B) {

/* although this is true, code here will NOT be executed because the third condition above is already true and exit the if/else statement*/

}

With the Ultrasonic Sensor

Comparative statements are extremely useful with the ultrasonic sensor.  Using them, we can have the Arduino do things when the distance sensed is greater/smaller/equal to a specific value. For example:

A CAROBOT SwissCHEESE ultrasonic sensor.

#include <CAROBOT_SwissCHEESE.h>

int trig = O0;
int echo = I0;
long duration = 0;

void setup() {

pinMode(trig, OUTPUT);
pinMode(echo, INPUT);
Serial.begin(9600);

}

void loop() {

digitalWrite(trig, LOW);
delayMicroseconds(5);
digitalWrite(trig, HIGH);
delayMicroseconds(10);
digitalWrite(trig, LOW);
duration = pulseIn(echo, HIGH);
duration = duration / 59;
if(duration < 30){

    Serial.println(“Too Close!”);

}

else {

    Serial.println(duration);

  }

  delay(250);

}

This code will check if the rover is within 30 cm of an object. If the distance is less than 30 cm, it will print a warning that it’s too close.

The Servo Motor

CR201 Tutorial - Class 4

Servo motors are motors that can move to fixed positions, letting you precisely control angular precision. They’re useful for making things like robotic arms.

In order to use a servo motor with Arduino, it has to be plugged into an output port. From there, you will need a few things in your code:

  • #include <Servo.h> at the top of the code to include the servo library. It should go with the code you added to include the SwissCHEESE library.
  • Declare the servo at the start of the code (eg. Servo servo;). This goes before the setup function, and with things like variable declarations.
  • Declare the servo pin before the setup code (eg. int servo_pin = O1;).
  • Type servo.attach(servo_pin); in the setup function.
  • Whenever you want the servo to turn to an angle, use servo.write(angle);. For example, if you want it to turn to 90 degrees, you would write servo.write(90);. Make sure you don’t forget a delay, otherwise the servo won’t know how long to maintain that position for!

Flowcharts and the Right Hand Algorithm

CR201 Tutorial - Class 4

The previous tutorials have already gone over flowcharts, but it’s worth it to revisit them. Essentially, creating flowcharts for programs is a very good way to visually represent them, and therefore understand them better while preventing logic errors.

The Right Hand Algorithm is a specific algorithm useful for navigating through a maze. The flowchart for said algorithm is below:

CR201 Tutorial - Class 4

One Last Challenge

Build a robot that can navigate through a maze using the ultrasonic sensor and/or the bumper sensor. You’ll need to attach a servo motor to your ultrasonic sensor to let it check the distances from a wall for each direction, and therefore decide which way to turn whenever the rover gets close to a wall.

That’s the end of CR201. Hope you learned a lot from the tutorials, and that you continue learning more about programming and robotics!