ARDUINO program
Az első működő verzió a következőket tudja:
A bluetooth soros porton parancsokat képes fogadni a telefontól.
Eljárásokkal vezérelhető a meghajtó motor, a kormány, és az RGB LED
A teljes program innen letölthető: ROBOT_BLUE_TOUCHPAD.zip
//---------------------------------
// bluetooth soros karaktereket tárolja
char c;
//----------------------------
// RGB LED kimenetek
int PinR = 5;
int PinG = 6;
int PinB = 3;
//------------------------------
// RGB LED változói
int szinR = 0;
int szinG = 0;
int szinB = 0;
//----------------------------
// Y mefordulás ido (tized másodperc)
int ido_y = 10;
//-----------------------------
// motor kiementek és változók
int MOTOR_enablePin = 11;
int MOTOR_in1Pin = 12;
int MOTOR_in2Pin = 13;
boolean MOTOR_elore = true;
int MOTOR_seb = 128;
int KORMANY_enablePin = 10;
int KORMANY_in1Pin = 8;
int KORMANY_in2Pin =9;
boolean KORMANY_elore = true;
//---------------------------------------
// bluetooth parancsok puffere 100 karakter
char cmd[100];
int cmdIndex;
//---------------------------------
// érintőképernyő x, y korrdinátái
int px;
int py;
//-----------------------------------------------------------------------------------------------------------------------------------
// S E T U P
void setup()
{
Serial.begin(9600); // soros monitor bitrátája
Serial1.begin(9600); // HC-06
cmdIndex = 0;
pinMode(MOTOR_in1Pin, OUTPUT);
pinMode(MOTOR_in2Pin, OUTPUT);
pinMode(MOTOR_enablePin, OUTPUT);
pinMode(KORMANY_in1Pin, OUTPUT);
pinMode(KORMANY_in2Pin, OUTPUT);
pinMode(KORMANY_enablePin, OUTPUT);
pinMode(PinR, OUTPUT);
pinMode(PinG, OUTPUT);
pinMode(PinB, OUTPUT);
}
//-----------------------------------------------------------------------------------------------------------------------------------
// L O O P
void loop() {
//-------------------------------------------
// bluetooth parancsok kezelése
if(Serial1.available()) {
char c = (char)Serial1.read();
Serial.print(c);
if(c=='\n') {
cmd[cmdIndex] = 0;
exeCmd(); // execute the command
cmdIndex = 0; // reset the cmdIndex
} else {
cmd[cmdIndex] = c;
if(cmdIndex<99) cmdIndex++;
}
}
}
//---------------------------------------------------------------------------------
// RGB LED színek
void piros(){
szinR=255;
szinG=0;
szinB=0;
rgbkimenet();
}
void zold(){
szinR=0;
szinG=255;
szinB=0;
rgbkimenet();
}
void kek(){
szinR=0;
szinG=0;
szinB=255;
rgbkimenet();
}
void fekete(){
szinR=0;
szinG=0;
szinB=0;
rgbkimenet();
}
void feher(){
szinR=255;
szinG=128;
szinB=255;
rgbkimenet();
}
void lila(){
szinR=255;
szinG=0;
szinB=128;
rgbkimenet();
}
void rgbkimenet() {
analogWrite(PinR,255-szinR);
analogWrite(PinG,255-szinG);
analogWrite(PinB,255-szinB);
}
//-------------------------------------------------------------
// MEGHAJTÓ MOTOR VEZÉRLŐ ELJÁRÁS
// -255... 0 ... 255
// hátra előre
void motor(int v) {
if (v==0) {
analogWrite(MOTOR_enablePin, 0);
}
if (v>0) {
analogWrite (MOTOR_enablePin, v);
digitalWrite(MOTOR_in1Pin, true);
digitalWrite(MOTOR_in2Pin, false);
}
if (v<0) {
analogWrite (MOTOR_enablePin, abs(v));
digitalWrite(MOTOR_in1Pin, false);
digitalWrite(MOTOR_in2Pin, true);
}
}
//-------------------------------------------------------------
// KORMÁNY VEZÉRLŐ ELJÁRÁS
// b : balra
// e : előre
// j : jobbra
//
void kormany(char p) {
if (p=='e') {
analogWrite(KORMANY_enablePin, 0);
}
if (p=='b') {
analogWrite (KORMANY_enablePin, 255);
digitalWrite(KORMANY_in1Pin, true);
digitalWrite(KORMANY_in2Pin, false);
}
if (p=='j') {
analogWrite (KORMANY_enablePin, 255);
digitalWrite(KORMANY_in1Pin, false);
digitalWrite(KORMANY_in2Pin, true);
}
}
//----------------------------------------------------------------------------------------------------------------------------------------
// bluetooth parancsok feldolgozása
//
//
void exeCmd() {
// -------------------------------------
// touchpad xy px py
if(cmd[0]=='x' &&
cmd[1]=='y' &&
cmd[2]==' ') {
px = cmd[3]-'0';
py = cmd[5]-'0';
//----------------------------------
// FELSŐ SÁV
if (py<3) {
if (px<3) { motor(MOTOR_seb); kormany('b'); kek(); Serial.println("E bal "); } // bal
if ((px>=3) && (px<=6)) { motor(MOTOR_seb); kormany('e'); zold(); Serial.println("E "); } // közép
if (px>6) { motor(MOTOR_seb); kormany('j'); kek(); Serial.println("E jobb"); } // jobb
}
//----------------------------------
// KÖZÉPSŐ SÁV
if ((py>=3) && (py<=6)) {
motor(0); kormany('e'); fekete(); Serial.println("STOP");
}
//----------------------------------
// ALSÓ SÁV
if (py>3) {
if (px<3) { motor(-1*MOTOR_seb); kormany('b'); lila(); Serial.println("H bal"); }
if ((px>=3) && (px<=6)) { motor(-1*MOTOR_seb); kormany('e'); piros(); Serial.println("H"); }
if (px>6) { motor(-1*MOTOR_seb); kormany('j'); lila(); Serial.println("H jobb");}
}
}
// -------------------------------------
// STOP
if(cmd[0]=='s' &&
cmd[1]=='t' &&
cmd[2]==' ') {
motor(0); kormany('e'); fekete(); Serial.println("STOP");
}
// -------------------------------------
// sebesség állítása
if(cmd[0]=='s' &&
cmd[1]=='e' &&
cmd[2]=='b' &&
cmd[3]==' ') {
int val = 0;
for(int i=4; cmd[i]!=0; i++) {
val = val*10 + (cmd[i]-'0');
}
//
MOTOR_seb=val;
}
// -------------------------------------
// Y ideje
if(cmd[0]=='y' &&
cmd[1]=='i' &&
cmd[2]=='d' &&
cmd[3]==' ') {
int val = 0;
for(int i=4; cmd[i]!=0; i++) {
val = val*10 + (cmd[i]-'0');
}
//
ido_y=val;
}
//------------------------
// Y forgulás teszt
if(cmd[0]=='y' &&
cmd[1]=='f') {
motor(-1*MOTOR_seb); kormany('j'); lila(); // A beállított sebességgel ido_y ideig jobbra hátra tolat
delay(ido_y*100);
motor(0); kormany('e'); fekete(); // 1 másodpercig áll
delay(1000);
motor(MOTOR_seb); kormany('b'); kek(); // A beállított sebességgel ido_y ideig balra előre megy
delay(ido_y*100);
motor(0); kormany('e'); fekete(); // 1 másodpercig áll
delay(1000);
}
}