Arduino kontrollerade Bluetooth-bot (4 / 4 steg)
Steg 4: kod
https://sites.Google.com/site/arduinorobotics/Arduino-Robotics/free_project
Bluetooth-bot v1
Arduino Robotics inofficiella kapitel 14
använda Bluetooth Mate seriell adapter att ta emot kommandon från PC
Arduino avkodar kommandon till motoriska rörelser
Skapar hög hastighet trådlös seriell länk för robot kontroll med hjälp av tangentbordet
Används nycklar "i" = framåt, "j" = vänster, "k" = återför och "l" = höger
varvtalsreglering är också implementerats med ","= hastighet ner,"" = hastighet upp, och "/" = max hastighet.
L298 motorstyrning variabler
int M1_A = 12; Om du använder Ardumoto, ändra till stift 13
int M1_PWM = 11;
int M1_B = 10; Om du använder Ardumoto, ta bort denna variabel
int M2_A = 4; Om du använder Ardumoto, ändra till stift 12
int M2_PWM = 3;
int M2_B = 2; Om du använder Ardumoto, ta bort denna variabel
LED stift kopplade till Arduino D13
int LED = 13.
variabel för lagring av seriell data
int incomingByte = 0;
variabel för att lagra det varvtal
int speed_val = 255;
//////////////////////////////
void setup() {
TCCR2B = TCCR2B & 0b11111000 | 0x01; ändra hur ofta PWM stift 3 och 11-32kHz så det blir ingen motor gnäll
Starta seriell övervaka 115,200 bps
Serial.BEGIN(115200);
deklarera utgångar
pinMode (LED, OUTPUT);
pinMode (M1_A, OUTPUT);
pinMode (M1_PWM, OUTPUT);
pinMode (M1_B, OUTPUT);
pinMode (M2_A, OUTPUT);
pinMode (M2_PWM, OUTPUT);
pinMode (M2_B, OUTPUT);
Inaktivera motorer som standard
M1_stop();
M2_stop();
Delay(500);
}
////////////////////////////////////
void loop() {
check för seriella data
om (Serial.available() > 0) {
Läs den inkommande byten:
incomingByte = Serial.read();
om tillgängligt, blinkar LED och skriva ut seriella data tas emot.
digitalWrite (LED, hög);
Säg vad du fick:
Serial.Print ("jag fick:");
Serial.println(incomingByte);
fördröja 10 millisekunder seriell uppdatering att hinna
Delay(10);
Kolla inkommande byte för riktning
om byte är lika med "46" eller "," - Höj hastigheten
om (incomingByte == 46) {
speed_val = speed_val + 5.
test_speed();
Serial.println(speed_val);
}
om byte är lika med "44" eller "."-lägre hastighet
annat if (incomingByte == 44) {
speed_val = speed_val - 5.
test_speed();
Serial.println(speed_val);
}
om byte är lika med "47" eller "/" - max hastighet
annat if (incomingByte == 47) {
speed_val = 255;
test_speed();
}
om byte är lika med "105" eller "i", gå vidare
annat if (incomingByte == 105) {
M1_forward(speed_val);
M2_forward(speed_val);
Delay(25);
}
om byte är lika med "106" eller "j", gå till vänster
annat if (incomingByte == 106) {
M1_reverse(speed_val);
M2_forward(speed_val);
Delay(25);
}
om byte är lika med "108" eller "l", gå till höger
annat if (incomingByte == 108) {
M1_forward(speed_val);
M2_reverse(speed_val);
Delay(25);
}
om byte är lika med "107" eller "k", gå bakåt
annat if (incomingByte == 107) {
M1_reverse(speed_val);
M2_reverse(speed_val);
Delay(25);
}
annars stanna båda motorer
annat {
M1_stop();
M2_stop();
}
}
annat {
M1_stop();
M2_stop();
digitalWrite (LED, låg);
}
}
void test_speed() {
begränsa hastigheten värde till mellan 0-255
om (speed_val > 250) {
speed_val = 255;
Serial.println ("MAX");
}
om (speed_val < 0) {
speed_val = 0;
Serial.println ("MIN");
}
}
motoriska funktioner / / /
void M1_reverse(int x) {
digitalWrite (M1_B, låg);
digitalWrite (M1_A, hög);
analogWrite (M1_PWM, x);
}
void M1_forward(int x) {
digitalWrite (M1_A, låg);
digitalWrite (M1_B, hög);
analogWrite (M1_PWM, x);
}
void M1_stop() {
digitalWrite (M1_B, låg);
digitalWrite (M1_A, låg);
digitalWrite (M1_PWM, låg);
}
void M2_forward(int y) {
digitalWrite (M2_B, låg);
digitalWrite (M2_A, hög);
analogWrite (M2_PWM, y);
}
void M2_reverse(int y) {
digitalWrite (M2_A, låg);
digitalWrite (M2_B, hög);
analogWrite (M2_PWM, y);
}
void M2_stop() {
digitalWrite (M2_B, låg);
digitalWrite (M2_A, låg);
digitalWrite (M2_PWM, låg);
}