/*************************************
 *     TIME:2023.3.9
 *     Development Team: Zhiyi Technology Co., Ltd.
 * 
 *  **************************************/

//TMI8549电机驱动芯片
#define ENA 5   //使能端，可使用PWM调速
#define INT1 7  //IN1输入端
#define INT2 8  //IN2输入端


void setup() {
  Serial.begin(9600);
  pinMode(ENA, OUTPUT);   //引脚设置输出模式
  pinMode(INT1, OUTPUT);  //引脚设置输出模式
  pinMode(INT2, OUTPUT);  //引脚设置输出模式 
}

//INT1,INT2输出控制逻辑
  //INT1   INT2   OUT1    OUT2    OUT3    OUT4
  //0      0      1       0       1       0     前进
  //0      1      1       0       0       1     右转
  //1      0      0       1       1       0     左转
  //1      1      0       1       0       1     后退

void loop() {
  if(Serial.available() > 0) {      //Determine whether the received data is greater than 0
    char ser_val = Serial.read();
    Serial.print("ser_val=");
    Serial.println(ser_val);
    switch(ser_val)
      {
          case 'F':
          forward();
          break;
          case 'B':
          back();
          break;
          case 'S':
          stop();
          break;
          case 'L':
          left();
          break;
          case 'R':
          right();
          break;
      }      
    }
  
}

//前进
void forward(){
  analogWrite(ENA, 200);  //对ENA输入0~255的PWM波进行调速
  digitalWrite(INT1, LOW); 
  digitalWrite(INT2, LOW);  
}

//后退
void back() {
  analogWrite(ENA, 200);  //对ENA输入0~255的PWM波进行调速
  digitalWrite(INT1,HIGH);  //后退
  digitalWrite(INT2,HIGH);  
}

void stop(){
  analogWrite(ENA, 0);  //对ENA输入0~255的PWM波进行调速,设置为0停车
}

//左转
void left() {
  analogWrite(ENA, 200);  //对ENA输入0~255的PWM波进行调速  
  digitalWrite(INT1,HIGH);  //左转
  digitalWrite(INT2,LOW);
}

//右转
void right() {
  analogWrite(ENA, 200);  //对ENA输入0~255的PWM波进行调速
  digitalWrite(INT1,LOW);   //右转
  digitalWrite(INT2,HIGH);
}