2022年8月11日木曜日

PWM(Pulse Width Modulation)004

#define ENA 9     //9番ピンをENAと定義 右PWM
#define IN1 8     //8番ピンをIN1と定義 右
#define IN2 7     //7番ピンをIN2と定義 右
#define IN3 5     //5番ピンをIN3と定義 左
#define IN4 4     //4番ピンをIN4と定義 左
#define ENB 3     //3番ピンをENBと定義 左PWM

void setup() {
  pinMode(ENA,OUTPUT);     //ENAは出力です
  pinMode(IN1,OUTPUT);     //IN1は出力です
  pinMode(IN2,OUTPUT);     //IN2は出力です
  pinMode(IN3,OUTPUT);     //IN3は出力です
  pinMode(IN4,OUTPUT);     //IN4は出力です
  pinMode(ENB,OUTPUT);     //ENBは出力です
}

void analog1(){
  int i; i=170;               //0~255の中で出力を指定。

  digitalWrite(IN1,HIGH);     //正転IN1をHIGH、IN2をLOW
  digitalWrite(IN2,LOW);      //正転
    analogWrite(ENA,i);       //Aモーターの出力指定
  digitalWrite(IN3,HIGH);     //正転IN3をHIGH、IN4をLOW
  digitalWrite(IN4,LOW);      //正転
    analogWrite(ENB,i);       //Bモーターの出力指定
  delay(999);                //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,LOW);     //逆転IN1をLOW、IN2をHIGH
  digitalWrite(IN2,HIGH);    //逆転
  digitalWrite(IN3,LOW);     //逆転IN3をLOW、IN4をHIGH
  digitalWrite(IN4,HIGH);    //逆転
  delay(999);               //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

                              //前進・左旋回
  digitalWrite(IN1,HIGH);     //正転IN1をHIGH、IN2をLOW
  digitalWrite(IN2,LOW);      //正転
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(999);                 //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

                              //後進・左旋回
  digitalWrite(IN1,LOW);      //逆転IN1をLOW、IN2をHIGH
  digitalWrite(IN2,HIGH);     //逆転
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(999);                 //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

                              //前進・右旋回
  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //正転IN3をHIGH、IN4をLOW
  digitalWrite(IN4,LOW);      //正転 
  delay(999);                 //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

                              //後進・右旋回
  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,LOW);      //逆転IN3をLOW、IN4をHIGH
  digitalWrite(IN4,HIGH);     //逆転
  delay(999);                 //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

                              //左超旋回
  digitalWrite(IN1,HIGH);     //正転IN1をHIGH、IN2をLOW
  digitalWrite(IN2,LOW);      //正転
  digitalWrite(IN3,LOW);      //逆転IN3をLOW、IN4をHIGH
  digitalWrite(IN4,HIGH);     //逆転
  delay(999);                 //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

  digitalWrite(IN1,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN2,HIGH);     //停止(ブレーキ)
  digitalWrite(IN3,HIGH);     //停止(ブレーキ)両方HIGH
  digitalWrite(IN4,HIGH);     //停止(ブレーキ)
  delay(1999);

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(1);                   //停止(惰性回転)貫通電流防止のため

                              //右超旋回
  digitalWrite(IN1,LOW);      //逆転IN1をLOW、IN2をHIGH
  digitalWrite(IN2,HIGH);     //逆転
  digitalWrite(IN3,HIGH);     //正転IN3をHIGH、IN4をLOW
  digitalWrite(IN4,LOW);      //正転
  delay(999);                 //delay 継続したい時間(ミリ秒)

  digitalWrite(IN1,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN2,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN3,LOW);      //停止(惰性回転)貫通電流防止のため
  digitalWrite(IN4,LOW);      //停止(惰性回転)貫通電流防止のため
  delay(5000);                   //停止(惰性回転)貫通電流防止のため

}

void loop() {
  analog1();
}