Stap 3: PWM... Arduino Timer
Timer0 is verbonden met pin D5, D6, we willen de frequentie te verhogen "Meer soepel control"
Merk op dat Timer0 controle de (vertraging, millis) op de arduino, zodat elke wijziging op de prescale van deze timer de vertraging en millis verandert zal.
int RPWM = 5;
int LPWM = 6;
int L_EN = 7;
int R_EN = 8;
VOID setPWMfrequency (int freq) {}
TCCR0B = TCCR0B & 0b11111000 | freq;
}
VOID MotorActiveStatus (char kant, Booleaanse s) {}
Booleaanse staat = s;
if(side=='R') {}
digitalWrite(R_EN,s);
}
if(side=='L') {}
digitalWrite(L_EN,s);
}
}
VOID setMotor (char side, byte pwm) {}
if(side=='R') {}
analogWrite(RPWM,pwm);
}
if(side=='L') {}
analogWrite(LPWM,pwm);
}
}
VOID closeMotor(char side) {}
if(side=='R') {}
digitalWrite(RPWM,LOW);
}
if(side=='L') {}
digitalWrite(LPWM,LOW);
}
}
VOID Setup {}
Zet uw setup-code hier, om het eenmalig uit te voeren:
setPWMfrequency(0x02); / / timer 0, 3.92KHz
for (int i = 5; ik < 9; i ++) {}
pinMode(i,OUTPUT);
}
for (int i = 5; ik < 9; i ++) {}
digitalWrite(i,LOW);
}
delay(1000);
MotorActiveStatus('R',true);
MotorActiveStatus('L',true);
Serial.begin(9600);
}
void loop {}
Zet uw belangrijkste code hier, om het herhaaldelijk uitvoeren:
for (int i = 0; ik < 256; i ++) {}
setMotor('R',i);
delay(500);
}
delay(1000);
closeMotor('R');
delay(1000);
for (int i = 0; ik < 256; i ++) {}
setMotor('L',i);
delay(500);
}
delay(1000);
closeMotor('L');
delay(1000);
}
Als we willen het gebruik van deze code met een andere timer "timer 2" Verander gewoon D5, D6 naar pins D3, respectievelijk D11
int RPWM = 3;
int LPWM = 11;
int L_EN = 7;
int R_EN = 8;
VOID setPWMfrequency (int freq) {}
TCCR2B = TCCR2B & 0b11111000 | freq;
}
VOID MotorActiveStatus (char kant, Booleaanse s) {}
Booleaanse staat = s;
if(side=='R') {}
digitalWrite(R_EN,s);
}
if(side=='L') {}
digitalWrite(L_EN,s);
}
}
VOID setMotor (char side, byte pwm) {}
if(side=='R') {}
analogWrite(RPWM,pwm);
}
if(side=='L') {}
analogWrite(LPWM,pwm);
}
}
VOID closeMotor(char side) {}
if(side=='R') {}
digitalWrite(RPWM,LOW);
}
if(side=='L') {}
digitalWrite(LPWM,LOW);
}
}
VOID Setup {}
Zet uw setup-code hier, om het eenmalig uit te voeren:
setPWMfrequency(0x02); / / timer 2, 3.92KHz
for (int i = 5; ik < 9; i ++) {}
pinMode(i,OUTPUT);
}
for (int i = 5; ik < 9; i ++) {}
digitalWrite(i,LOW);
}
delay(1000);
MotorActiveStatus('R',true);
MotorActiveStatus('L',true);
Serial.begin(9600);
}
void loop {}
Zet uw belangrijkste code hier, om het herhaaldelijk uitvoeren:
for (int i = 0; ik < 256; i ++) {}
setMotor('R',i);
delay(50);
}
delay(500);
closeMotor('R');
delay(1000);
for (int i = 0; ik < 256; i ++) {}
setMotor('L',i);
delay(50);
}
delay(500);
closeMotor('L');
delay(1000);
}