Tegin näidiseks jupi koodi koos eestikeelsete kirjeldustega. Mootoril tuleb määrata 3 erineva pinni olekud. Mootoril A pin 3 määrab kiiruse, pin 12 suuna ja pin 9 oleks pidur. Mootor B on minul vasakul. Koodis tuleb tähele panna kuidas määratakse mootori valikul teise mootori pinnide asend:
if(motor == 1){
digitalWrite(DIRA, inPin1);
digitalWrite(BRKA, inPin2);
analogWrite(PWMA, speed);
}else{
digitalWrite(DIRB, inPin3);
digitalWrite(BRKB, inPin4);
analogWrite(PWMB, speed);
}
Siit saab kogu koodi millega robot sõidab edasi ja aeglasemalt tagasi. Tagasi kiirus 50 on liiga väike ja üks mootor ei oma piisavalt jõudu. Video leiab siit https://www.youtube.com/watch?v=RjrxIsvad6I
//mootoriplaadi REV 3 naidiskood
//Mootor A
int PWMA = 3; //Kiirus
int DIRA = 12; //Suund
int BRKA = 9; //Pidur
//Mootor B
int PWMB = 11; //Kiirus
int DIRB = 13; //Suund
int BRKB = 8; //Pidur
void setup(){
pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(DIRA, OUTPUT);
pinMode(DIRB, OUTPUT);
pinMode(BRKA, OUTPUT);
pinMode(BRKB, OUTPUT);
}
void loop(){
move(1, 100, 1); //mootor A, kiirus, suund
move(0, 100, 1); //mootor B, kiirus, suund
delay(1000); //oota 1 sekund
stop(); //stop alamprogramm
delay(500); //ootab kuni uue liikumiseni
move(1, 50, 0); //mootor A, kiirus, suund
move(0, 50, 0); //motor B, kiirus, suund
delay(1000);
stop();
delay(500);
}
void move(int motor, int speed, int direction){
//Move alamprogramm
//motor: 0 mootor B ja 1 mootor A
//speed: 0 kuni 255 on kiirus
//direction: 0 suund, 1 teistpidi suund
boolean inPin1 = LOW;
boolean inPin2 = HIGH;
boolean inPin3 = LOW;
boolean inPin4 = HIGH;
if(direction == 1){
inPin1 = HIGH;
inPin3 = HIGH;
inPin2 = LOW;
inPin4 = LOW;
}else{
inPin1 = LOW;
inPin3 = LOW;
inPin2 = LOW;
inPin4 = LOW;
}
if(motor == 1){
digitalWrite(DIRA, inPin1);
digitalWrite(BRKA, inPin2);
analogWrite(PWMA, speed);
}else{
digitalWrite(DIRB, inPin3);
digitalWrite(BRKB, inPin4);
analogWrite(PWMB, speed);
}
}
void stop(){
//lubab standby ehk stop alamprogramm
}
if(motor == 1){
digitalWrite(DIRA, inPin1);
digitalWrite(BRKA, inPin2);
analogWrite(PWMA, speed);
}else{
digitalWrite(DIRB, inPin3);
digitalWrite(BRKB, inPin4);
analogWrite(PWMB, speed);
}
Siit saab kogu koodi millega robot sõidab edasi ja aeglasemalt tagasi. Tagasi kiirus 50 on liiga väike ja üks mootor ei oma piisavalt jõudu. Video leiab siit https://www.youtube.com/watch?v=RjrxIsvad6I
//mootoriplaadi REV 3 naidiskood
//Mootor A
int PWMA = 3; //Kiirus
int DIRA = 12; //Suund
int BRKA = 9; //Pidur
//Mootor B
int PWMB = 11; //Kiirus
int DIRB = 13; //Suund
int BRKB = 8; //Pidur
void setup(){
pinMode(PWMA, OUTPUT);
pinMode(PWMB, OUTPUT);
pinMode(DIRA, OUTPUT);
pinMode(DIRB, OUTPUT);
pinMode(BRKA, OUTPUT);
pinMode(BRKB, OUTPUT);
}
void loop(){
move(1, 100, 1); //mootor A, kiirus, suund
move(0, 100, 1); //mootor B, kiirus, suund
delay(1000); //oota 1 sekund
stop(); //stop alamprogramm
delay(500); //ootab kuni uue liikumiseni
move(1, 50, 0); //mootor A, kiirus, suund
move(0, 50, 0); //motor B, kiirus, suund
delay(1000);
stop();
delay(500);
}
void move(int motor, int speed, int direction){
//Move alamprogramm
//motor: 0 mootor B ja 1 mootor A
//speed: 0 kuni 255 on kiirus
//direction: 0 suund, 1 teistpidi suund
boolean inPin1 = LOW;
boolean inPin2 = HIGH;
boolean inPin3 = LOW;
boolean inPin4 = HIGH;
if(direction == 1){
inPin1 = HIGH;
inPin3 = HIGH;
inPin2 = LOW;
inPin4 = LOW;
}else{
inPin1 = LOW;
inPin3 = LOW;
inPin2 = LOW;
inPin4 = LOW;
}
if(motor == 1){
digitalWrite(DIRA, inPin1);
digitalWrite(BRKA, inPin2);
analogWrite(PWMA, speed);
}else{
digitalWrite(DIRB, inPin3);
digitalWrite(BRKB, inPin4);
analogWrite(PWMB, speed);
}
}
void stop(){
//lubab standby ehk stop alamprogramm
}
Kommentaare ei ole:
Postita kommentaar