/// ***********************************
int MotorRight1 = 5;
int MotorRight2 = 6;
int MotorLeft1 = 10;
int MotorLeft2 = 11;
ボイド設定()
{
Serial.begin(9600);
pinMode(MotorRight1、OUTPUT); //ピン8(PWM)
pinMode(MotorRight2、OUTPUT); //ピン9(PWM)
pinMode(MotorLeft1、OUTPUT); //ピン10(PWM)
pinMode(MotorLeft2、OUTPUT); //ピン11(PWM)
}
void go()//フォワード
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
}
左ボイド()/ /右折
{
digitalWrite(MotorRight1、HIGH);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
}
右ボイド()/ /左折
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、HIGH);
digitalWrite(MotorLeft2、LOW);
}
ボイドストップ()/ /停止
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
}
void back()//チェックアウト
{
digitalWrite(MotorRight1、HIGH);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、HIGH);
digitalWrite(MotorLeft2、LOW);;
}
ボイドループ()
{
char val = Serial.read();
Serial.write(val);
if(-1!= val){
if( 'W' == val)
go();
else if( 'A' == val)
左();
else if( 'D' == val)
右();
else if( 'S' == val)
戻る();
else if( 'Q' == val)
停止();
遅延(500);
}
他に
{
/ /停止();
遅延(500);
}
}

赤外線信号の認識、Bluetoothモジュールのコマンド、その他の機能など、すべての機能を使用する必要がある場合は、次のコードを使用する必要があります。
/// ********************************
#<IRremote.h>を含める
#<Servo.h>を含める
/ / ************************モーターピンの定義********************** ****
int MotorRight1 = 5;
int MotorRight2 = 6;
int MotorLeft1 = 10;
int MotorLeft2 = 11;
intカウンター= 0;
const int irReceiverPin = 2; //ピン2に接続されたIRレシーバーの出力信号
char val;
// ************************ IRcodeを検出するように設定****************** ** *****
長いIRfront = 0x00FFA25D; //コードを転送します
long IRback = 0x00FF629D; //チェックアウト
長いIRturnright = 0x00FFC23D; / /右
長いIRturnleft = 0x00FF02FD; //左
long IRstop = 0x00FFE21D; //停止します
long IRcny70 = 0x00FFA857; // CNY70自走モード
long IRAutorun = 0x00FF 906F; //自走モードの超音波
長いIRturnsmallleft = 0x00FF22DD;
/ / ***************************定義されたCNY70ピン******************** * ****************
const int SensorLeft = 7; //左センサー入力ピン
const int SensorMiddle = 4; / /センサー入力ピン
const int SensorRight = 3; //右センサー入力ピン
int SL; //左センサーの状態
int SM; / /センサーの状態
int SR; //正しいセンサーの状態
IRrecv irrecv(irReceiverPin); //赤外線信号IRrecvを受信するオブジェクトを定義します
decode_results結果; //デコード結果はdecode_resultsの構造変数になります
/ / ***************************定義された超音波ピン****************** ** **********
int inputPin = 13; //ピン超音波信号受信機の定義rx
int outputPin = 12; //超音波信号送信機ピン 'txを定義
int Fspeedd = 0; / /距離の前
int Rspeedd = 0; / /正しい距離
int Lspeedd = 0; / /左距離
int directionn = 0; / / = 8ポスト= 2左前と右= 6 = 4
サーボmyservo; // myservoを設定します
int delay_time = 250; //サーボモーターのステアリング後の整定時間
int Fgo = 8; //フォワード
int Rgo = 6; //右折します
int Lgo = 4; //左に曲がります
int Bgo = 2; //逆
/// ************************************************** *********************(セットアップ)
ボイド設定()
{
Serial.begin(9600);
pinMode(MotorRight1、OUTPUT); //ピン8(PWM)
pinMode(MotorRight2、OUTPUT); //ピン9(PWM)
pinMode(MotorLeft1、OUTPUT); //ピン10(PWM)
pinMode(MotorLeft2、OUTPUT); //ピン11(PWM)
irrecv.enableIRIn(); //赤外線デコードを開始します
pinMode(SensorLeft、INPUT); //左のセンサーを定義
pinMode(SensorMiddle、INPUT); / /定義センサー
pinMode(SensorRight、INPUT); //適切なセンサーの定義
digitalWrite(2、HIGH);
pinMode(inputPin、INPUT); //超音波入力ピンを定義
pinMode(outputPin、OUTPUT); //超音波出力ピンを定義します
myservo.attach(9); //サーボモーター出力セクション5ピン(PWM)を定義
}
/// ************************************************** ******************(無効)
void advance(int a)//フォワード
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
遅延(a * 100);
}
ボイド・ライト(int b)/ /右折(シングル・ホイール)
{
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
遅延(b * 100);
}
void void(int c)/ /左折(単一ホイール)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
遅延(c * 100);
}
void turnR(int d)/ /右折(ホイール)
{
digitalWrite(MotorRight1、HIGH);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
遅延(d * 100);
}
void turnL(int e)/ /左折(ホイール)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、HIGH);
digitalWrite(MotorLeft2、LOW);
遅延(e * 100);
}
void stopp(int f)/ /停止
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
遅延(f * 100);
}
void back(int g)//チェックアウト
{
digitalWrite(MotorRight1、HIGH);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、HIGH);
digitalWrite(MotorLeft2、LOW);;
遅延(g * 100);
}
ボイド検出()/ / 3つの角度を測定(前面左、右)
{
int delay_time = 250; //サーボモーターのステアリング後の整定時間
ask_pin_F(); //前から読む
if(Fspeedd <10)//距離が前の10 cm未満の場合
{
stopp(1); //出力データをクリアします
戻る(2); // 0.2秒チェックアウト
}
if(Fspeedd <25)//距離が前方の25 cm未満の場合
{
stopp(1); //出力データをクリアします
ask_pin_L(); //左から読みます
遅延(delay_time); //安定したサーボモーターを待ちます
ask_pin_R(); //正しい距離を読み取ります
遅延(delay_time); //安定したサーボモーターを待ちます
if(Lspeedd> Rspeedd)/ /距離が左から右よりも大きい場合
{
方向= Lgo; / /左へ
}
if(Lspeedd <= Rspeedd)/ /距離が左から右の距離以下である場合
{
directionn = Rgo; / /右へ
}
if(Lspeedd <15 && Rspeedd <15)//左右の距離が10 cm未満の場合
{
directionn = Bgo; / /あとに行く
}
}
その他/ /の前に25 cm以上追加
{
方向= Fgo; / /前進する
}
}
/// ************************************************** ****************************** ....
void ask_pin_F()//正面からの距離を測定する
{
myservo.write(90);
digitalWrite(outputPin、LOW); //超音波トランスミッターを低電圧2μsにします
delayMicroseconds(2);
digitalWrite(outputPin、HIGH); //超音波送信の高電圧を10μsにします。少なくとも10μs
delayMicroseconds(10);
digitalWrite(outputPin、LOW); //低電圧超音波トランスミッターを維持します
float Fdistance = pulseIn(inputPin、HIGH); //悪い時間差を読み取ります
距離=距離/ 5.8 / 10; / /時間距離に変わります(単位:cm)
Serial.print( "F distance:"); //出力距離(単位:cm)
Serial.println(距離); / /距離を表示
Fspeedd = fdistance; / / ReadingからFspeedd(以前の速度)に入る
}
/// ************************************************** **** +
void ask_pin_L()/ /左からの距離を測定
{
myservo.write(177);
遅延(delay_time);
digitalWrite(outputPin、LOW); //超音波トランスミッターを低電圧2μsにします
delayMicroseconds(2);
digitalWrite(outputPin、HIGH); //超音波送信の高電圧を10μsにします。少なくとも10μs
delayMicroseconds(10);
digitalWrite(outputPin、LOW); //低電圧超音波トランスミッターを維持します
float Ldistance = pulseIn(inputPin、HIGH); //悪い時間差を読み取ります
Ldistance = Ldistance / 5.8 / 10; / /時間距離に変わります(単位:cm)
Serial.print( "L distance:"); //出力距離(単位:cm)
Serial.println(距離); / /距離を表示
Lspeedd = ldistance; / /距離Lspeedd(左速度)に読み込まれます
}
/// ************************************************** ****************** ....
void ask_pin_R()/ /右からの距離を測定
{
myservo.write(5);
遅延(delay_time);
digitalWrite(outputPin、LOW); //超音波トランスミッターを低電圧2μsにします
delayMicroseconds(2);
digitalWrite(outputPin、HIGH); //超音波送信の高電圧を10μsにします。少なくとも10μs
delayMicroseconds(10);
digitalWrite(outputPin、LOW); //低電圧超音波トランスミッターを維持します
float Rdistance = pulseIn(inputPin、HIGH); //悪い時間差を読み取ります
Rdistance = Rdistance / 5.8 / 10; / /時間距離に変わります(単位:cm)
Serial.print( "R distance:"); //出力距離(単位:cm)
Serial.println(距離); / /距離を表示
Rspeedd = rdistance; / /距離Rspeedd(右速度)に読み込まれます
}
/// ************************************************** ********************************(ループ)
ボイドループ()
{
SL = digitalRead(SensorLeft);
SM = digitalRead(SensorMiddle);
SR = digitalRead(SensorRight);
performCommand();
/// ************************************************** ****************************通常の通常モード
if(irrecv.decode(&結果))
{/ /デコードが成功すると、赤外線信号のセットを受け取ります
/ ******************************************************* *********************** /
if(results.value == IRfront)//フォワード
{
前進(10); / /前進
}
/ ******************************************************* *********************** /
if(results.value == IRback)/ /チェックアウト
{
戻る(10); / /退職後
}
/ ******************************************************* *********************** /
if(results.value == IRturnright)/ /右に曲がる
{
右(6); //右折します
}
/ ******************************************************* *********************** /
if(results.value == IRturnleft)/ /左折
{
左(6); / /左折);
}
/ ******************************************************* *********************** /
if(results.value == IRstop)/ /停止
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
}
/// ************************************************** ************************ cny70モデルブラック自走モード:LOWホワイト:
if(results.value == IRcny70)
{
while(IRcny70)
{
SL = digitalRead(SensorLeft);
SM = digitalRead(SensorMiddle);
SR = digitalRead(SensorRight);
if(SM == HIGH)//黒い領域のセンサー内
{
if(SL == LOW&SR == HIGH)/ /左右の黒白、左に曲がる
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
analogWrite(MotorLeft1、0);
analogWrite(MotorLeft2、80);
}
それ以外の場合(SR == LOW&SL == HIGH)/ /左右黒白、右折
{
analogWrite(MotorRight1、0); / /右折
analogWrite(MotorRight2、80);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
}
その他/ /両側が白色、直線
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
analogWrite(MotorLeft1,200);
analogWrite(MotorLeft2,200);
analogWrite(MotorRight1、200);
analogWrite(MotorRight2、200);
}
}
else / /白い領域のセンサー
{
if(SL == LOW&SR == HIGH)/ /左右の黒、白、高速左折
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
}
それ以外の場合(SR == LOW&SL == HIGH)/ /左右の黒白、クイック右ターン
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、HIGH);
}
他の/ /は白、停止
{
digitalWrite(MotorRight1、HIGH);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、HIGH);
digitalWrite(MotorLeft2、LOW);;
}
}
if(irrecv.decode(&結果))
{
irrecv.resume();
Serial.println(results.value、HEX);
if(results.value == IRstop)
{
digitalWrite(MotorRight1、HIGH);
digitalWrite(MotorRight2、HIGH);
digitalWrite(MotorLeft1、HIGH);
digitalWrite(MotorLeft2、HIGH);
休憩;
}
}
}
results.value = 0;
}
/// *****************************************************自走モード超音波************************
if(results.value == IRAutorun)
{
while(IRAutorun)
{
myservo.write(90); //準備中のメジャーに戻ると、サーボモーターの位置が事前準備済みに戻ります
検出(); / /移動する場所に対する判断の角度と方向を測定する
if(directionn == 8)/ / directionn(direction)= 8(forward)の場合
{
if(irrecv.decode(&結果))
{
irrecv.resume();
Serial.println(results.value、HEX);
if(results.value == IRstop)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
休憩;
}
}
results.value = 0;
前進(1); //通常順
Serial.print( "Advance"); / /表示方向(前方)
Serial.print( "");
}
if(directionn == 2)/ / directionn(direction)= 2(reverse)の場合
{
if(irrecv.decode(&結果))
{
irrecv.resume();
Serial.println(results.value、HEX);
if(results.value == IRstop)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
休憩;
}
}
results.value = 0;
戻る(8); //リバース(車)
turnL(3); //少し左に移動します(死んだ路地で立ち往生するのを防ぐため)
Serial.print(「リバース」); / /表示方向(後方)
}
if(directionn == 6)/ / directionn(direction)= 6(右折)の場合
{
if(irrecv.decode(&結果))
{
irrecv.resume();
Serial.println(results.value、HEX);
if(results.value == IRstop)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
休憩;
}
}
results.value = 0;
戻る(1);
turnR(6); //右折します
Serial.print(「右」); / /表示方向(左折)
}
if(directionn == 4)/ / directionn(direction)= 4(左折)の場合
{
if(irrecv.decode(&結果))
{
irrecv.resume();
Serial.println(results.value、HEX);
if(results.value == IRstop)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
休憩;
}
}
results.value = 0;
戻る(1);
turnL(6); //左に曲がります
Serial.print(「左」); / /表示方向(右折)
}
if(irrecv.decode(&結果))
{
irrecv.resume();
Serial.println(results.value、HEX);
if(results.value == IRstop)
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
休憩;
}
}
}
results.value = 0;
}
/ *************************************************** *********************** /
他に
{
digitalWrite(MotorRight1、LOW);
digitalWrite(MotorRight2、LOW);
digitalWrite(MotorLeft1、LOW);
digitalWrite(MotorLeft2、LOW);
}
irrecv.resume(); //赤外線信号のセットを受け入れ続けます
}
}
void performCommand(){
if(Serial.available()){
val = Serial.read();
}
if(val == 'f'){/ /フォワード
前進(10);
} Else if(val == 'z'){/ / Stop Forward
stopp(10);
} Else if(val == 'b'){/ /後方
戻る(10);
} Else if(val == 'y'){/ /後方に停止
戻る(10);
} else if(val == 'l'){/ /右
turnR(10);
} Else if(val == 'r'){/ /左
turnL(10);
} Else if(val == 'v'){/ / Stop Turn
stopp(10);
} Else if(val == 's'){/ /停止
stopp(10);
}
}