- const unsigned char PWM1 =13;
- const unsigned char AIN11 =12;
- const unsigned char AIN12 =11;
- const unsigned char PWM2 =10;
- const unsigned char AIN21 =9;
- const unsigned char AIN22 =8;
- const unsigned char PWM3 =7;
- const unsigned char AIN31 =6;
- const unsigned char AIN32 =5;
- const unsigned char Left1=24;
- const unsigned char Right1=25;
- const unsigned char Left2=26;
- const unsigned char Right2=27;
- int L1;
- int L2;
- int L3;
- int L4;
- int pwm3=0;
- int Time=0;
- int r=0;
- String data ="";
- void setup() {
- pinMode(PWM1,OUTPUT);
- pinMode(PWM2,OUTPUT);
- pinMode(PWM3,OUTPUT);
- pinMode(AIN11,OUTPUT);
- pinMode(AIN12,OUTPUT);
- pinMode(AIN21,OUTPUT);
- pinMode(AIN22,OUTPUT);
- pinMode(AIN31,OUTPUT);
- pinMode(AIN32,OUTPUT);
- pinMode(Left1,INPUT);
- pinMode(Right1,INPUT);
- Serial1.begin(9600);
- }
- // 電機停轉
- void motorStop1()
- {
- digitalWrite(AIN11, LOW);
- digitalWrite(AIN12, LOW);
- }
- void motorStop2()
- {
- digitalWrite(AIN21, LOW);
- digitalWrite(AIN22, LOW);
- }
- void motorStop3()
- {
- digitalWrite(AIN31, LOW);
- digitalWrite(AIN32, LOW);
- }
- // 電機以參數設定的 pwm 值順時針轉
- void motorCW1(unsigned char pwm)
- {
- analogWrite(PWM1, pwm);
- digitalWrite(AIN12, HIGH);
- digitalWrite(AIN11, LOW);
- }
- void motorCW2(unsigned char pwm)
- {
- analogWrite(PWM2, pwm);
- digitalWrite(AIN22, HIGH);
- digitalWrite(AIN21, LOW);
- }
- void motorCW3(unsigned char pwm)
- {
- analogWrite(PWM3, pwm);
- digitalWrite(AIN32, HIGH);
- digitalWrite(AIN31, LOW);
- }
- // 電機以參數設定的 pwm 值逆時針轉
- void motorCCW1(unsigned char pwm)
- {
- analogWrite(PWM1, pwm);
- digitalWrite(AIN11, HIGH);
- digitalWrite(AIN12, LOW);
- }
- void motorCCW2(unsigned char pwm)
- {
- analogWrite(PWM2, pwm);
- digitalWrite(AIN21, HIGH);
- digitalWrite(AIN22, LOW);
- }
- void motorCCW3(unsigned char pwm)
- {
- analogWrite(PWM3, pwm);
- digitalWrite(AIN31, HIGH);
- digitalWrite(AIN32, LOW);
- }
- //前,后,左轉,右轉,左行,右行,停
- void forward(unsigned char pwm)
- {
- motorStop1();
- motorCW3(pwm);
- motorCCW2(pwm);
- }
- void backward(unsigned char pwm)
- {
- motorStop1();
- motorCW2(pwm);
- motorCCW3(pwm);
- }
- void LRotate(unsigned char pwm)
- {
- motorCW1(pwm);
- motorCW2(pwm);
- motorCW3(pwm);
- }
- void RRotate(unsigned char pwm)
- {
- motorCCW1(pwm);
- motorCCW2(pwm);
- motorCCW3(pwm);
- }
- void LMove(unsigned char pwm)
- {
- motorCW1(pwm);
- motorCCW2(pwm/2);
- motorCCW3(pwm/2);
- }
- void RMove(unsigned char pwm)
- {
- motorCCW1(pwm);
- motorCW2(pwm/2);
- motorCW3(pwm/2);
- }
- void Stop()
- {
- motorStop1();
- motorStop2();
- motorStop3();
- }
- void loop() {
- motorStop1();
- motorCW3(pwm3+230);
- motorCCW2(230);
- L1=digitalRead(Left1);
- L2=digitalRead(Right1);
- L3=digitalRead(Left2);
- L4=digitalRead(Right2);
- if(r==1){
- if(L1==1&&L2==1){
- Time=0;
- }
- else if(L1==0&&L2==1&&L3==1&&Time==0){
- pwm3=5;
- Time++;
- }
- else if(L1==0&&L2==1&&L3==1&&Time!=0){
- pwm3--;
- Time++;
- }
- else if(L1==0&&L2==1&&L3==0&&Time==0){
- pwm3=10;
- Time++;
- }
- else if(L1==0&&L2==1&&L3==0&&Time!=0){
- pwm3+=5;
- Time++;
- }
- else if(L1==1&&L2==0&&L4==1&&Time==0){
- pwm3=-5;
- Time++;
- }
- else if(L1==1&&L2==0&&L4==1&&Time!=0){
- pwm3++;
- Time++;
- }
- else if(L1==1&&L2==0&&L4==0&&Time==0){
- pwm3=-10;
- Time++;
- }
- else if(L1==1&&L2==0&&L4==0&&Time!=0){
- pwm3-=5;
- Time++;
- }
- }
- while(Serial1.available() > 0)
- {
- char inChar=(char)Serial1.read();
- delay(10);
- data+=inChar;
- }
- if(data!=""){
- if(data == "p"){
- Stop();
- r=0;
- }
- else if(data == "w"){
- r=1;
- }
- }
- data="";
- delay(100);
- }
復制代碼
|