Skip to content

Instantly share code, notes, and snippets.

@rockos
Created December 31, 2017 08:22
Show Gist options
  • Save rockos/6a557eee8380b7bd237188e573131535 to your computer and use it in GitHub Desktop.
Save rockos/6a557eee8380b7bd237188e573131535 to your computer and use it in GitHub Desktop.
kidslab_20171231.ino
int distance;
String MEIREI;
int SPEED_H;
int SPEED;
int L_EN;
int SPEED_M;
int R_EN;
int SPEED_L;
int L_FW;
int L_RV;
int R_FW;
int R_RV;
int pre_directopn;
void COMMAND() {
if (MEIREI == "FORWARD") {
analogWrite(6, SPEED);
analogWrite(5, 0);
analogWrite(10, SPEED);
analogWrite(11, 0);
digitalWrite(L_EN, HIGH);
digitalWrite(R_EN, HIGH);
} else if (MEIREI == "BACKWARD") {
analogWrite(6, 0);
analogWrite(5, SPEED);
analogWrite(10, 0);
analogWrite(11, SPEED);
digitalWrite(L_EN, HIGH);
digitalWrite(R_EN, HIGH);
} else if (MEIREI == "LEFT") {
analogWrite(10, SPEED);
analogWrite(11, 0);
digitalWrite(L_EN, LOW);
digitalWrite(R_EN, HIGH);
} else if (MEIREI == "RIGHT") {
analogWrite(6, SPEED);
analogWrite(5, 0);
digitalWrite(L_EN, HIGH);
digitalWrite(R_EN, LOW);
} else if (MEIREI == "STOP") {
digitalWrite(L_EN, LOW);
digitalWrite(R_EN, LOW);
}
}
int Sonic_Time_out = 3000;
long Sonic_Timing(){
digitalWrite(3, LOW);
delayMicroseconds(2);
digitalWrite(3, HIGH);
delayMicroseconds(10);
digitalWrite(3, LOW);
long duration = pulseIn(4,HIGH,Sonic_Time_out);
if ( duration == 0 ){
duration = Sonic_Time_out;
digitalWrite(0, HIGH);
delay(25);
digitalWrite(0 ,LOW);
delay(225);
}
return duration;
}
void CRUISE() {
MEIREI = "FORWARD";
SPEED = SPEED_H;
COMMAND();
}
void SAFETY() {
MEIREI = "FORWARD";
SPEED = SPEED_M;
COMMAND();
}
// 前にしょうがい物があるときの処理
void COLLISION() {
MEIREI = "STOP";
COMMAND();
delay(300);
SPEED = SPEED_M;
MEIREI = "BACKWARD";
COMMAND();
delay(1000);
MEIREI = "STOP";
COMMAND();
delay(300);
if (pre_directopn == 0) {
SPEED = SPEED_M;
MEIREI = "RIGHT";
pre_directopn = 1;
} else {
SPEED = SPEED_M;
MEIREI = "LEFT";
pre_directopn = 0;
}
COMMAND();
delay(300);
}
void setup()
{
pinMode(3, OUTPUT);
pinMode(4, INPUT);
pinMode(0, OUTPUT);
pinMode(7, OUTPUT);
pinMode(12, OUTPUT);
SPEED_H = 220;
SPEED_M = 200;
SPEED_L = 100;
L_EN = 7;
L_FW = 6;
L_RV = 5;
R_EN = 12;
R_FW = 10;
R_RV = 11;
pre_directopn = 0;
analogWrite(5, 0);
analogWrite(6, 0);
analogWrite(10, 0);
analogWrite(11, 0);
digitalWrite(7, LOW);
digitalWrite(12, LOW);
}
void loop()
{
distance = Sonic_Timing()/29/2;
// distance = 20;
if (distance < 8) {
COLLISION();
} else if (distance >= 15) {
CRUISE();
} else {
SAFETY();
}
delay(300);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment