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);

}

 

 

 



}