Блютуз управление(телефон). Переключение "режимов" работы (умный робот). Помогите пожалуйста, я новичок в программиров

Platon
Offline
Зарегистрирован: 03.04.2018

В общем я решил сделать робота на гусеницах, я сделал код чтобы управлять роботом по блютуз с телефона, но я хочу чтобы по отправке команды ( к примеру буква "S") с телефона на ардуино включался или выключался "самостоятельный" режим (робот сам обьезжает препятствия, но как я уже сказал я не знаю как это сделать. Более опытные програмисты, ПОМАГИТЕ МНЕ ПОЖАЛУЙСТА.

sadman41
Offline
Зарегистрирован: 19.10.2016

Корованы и грабежи в данной идее предусмотрены?

Platon
Offline
Зарегистрирован: 03.04.2018
это скетч управления 
#define ina A2
#define inb A3
#define in1 5
#define in2 6
#define in3 10
#define in4 11
#define LED 13
int command;
int Speed = 204; 
int Speedsec;
int buttonState = 0;
int lastButtonState = 0;
int Turnradius = 0;
int brakeTime = 45;
int brkonoff = 1;
void setup() {
  pinMode(ina, OUTPUT); //башня робота
  pinMode(inb, OUTPUT);/)башня робота
  pinMode(in1, OUTPUT);// гусеницы
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  pinMode(LED, OUTPUT);
  Serial.begin(9600);  
}

void loop() {
  if (Serial.available() > 0) {
    command = Serial.read();
    Stop();
    switch (command) {
      case 'b':
        b();
        break;
      case 'a':
        a();
        break;
      case 'F':
        forward();
        break;
      case 'B':
        back();
        break;
      case 'L':
        left();
        break;
      case 'R':
        right();
        break;
      case 'G':
        forwardleft();
        break;
      case 'I':
        forwardright();
        break;
      case 'H':
        backleft();
        break;
      case 'J':
        backright();
        break;
      case '0':
        Speed = 100;
        break;
      case '1':
        Speed = 140;
        break;
      case '2':
        Speed = 153;
        break;
      case '3':
        Speed = 165;
        break;
      case '4':
        Speed = 178;
        break;
      case '5':
        Speed = 191;
        break;
      case '6':
        Speed = 204;
        break;
      case '7':
        Speed = 216;
        break;
      case '8':
        Speed = 229;
        break;
      case '9':
        Speed = 242;
        break;
      case 'q':
        Speed = 255;
        break;
    }
    Speedsec = Turnradius;
    if (brkonoff == 1) {
      brakeOn();
    } else {
      brakeOff();
    }
  }
}

void a() {
  analogWrite(ina, 55);
}
void b() {
  analogWrite(inb, 55);
}

void forward() {
  analogWrite(in1, Speed);
  analogWrite(in3, Speed);
}

void back() {
  analogWrite(in2, Speed);
  analogWrite(in4, Speed);
}

void left() {
  analogWrite(in3, Speed);
  analogWrite(in2, Speed);
}

void right() {
  analogWrite(in4, Speed);
  analogWrite(in1, Speed);
}
void forwardleft() {
  analogWrite(in1, Speedsec);
  analogWrite(in3, Speed);
}
void forwardright() {
  analogWrite(in1, Speed);
  analogWrite(in3, Speedsec);
}
void backright() {
  analogWrite(in2, Speed);
  analogWrite(in4, Speedsec);
}
void backleft() {
  analogWrite(in2, Speedsec);
  analogWrite(in4, Speed);
}

void Stop() {
  analogWrite(in1, 0);
  analogWrite(in2, 0);
  analogWrite(in3, 0);
  analogWrite(in4, 0);
}

void brakeOn() {

  buttonState = command;
 
  if (buttonState != lastButtonState) {
  
    if (buttonState == 'S') {
      if (lastButtonState != buttonState) {
        digitalWrite(in1, HIGH);
        digitalWrite(in2, HIGH);
        digitalWrite(in3, HIGH);
        digitalWrite(in4, HIGH);
        delay(brakeTime);
        Stop();
      }
    }

    lastButtonState = buttonState;
  }
}
void brakeOff() {

}

 

Platon
Offline
Зарегистрирован: 03.04.2018
это скетч 
который сам обьезжает припятствия 
знаю что надо наверной избавится от дэлэй
#include <NewPing.h>        //Библиотека Ультразвукового датчика (нужно установить)

//Пины контроллера L298N
const int LeftMotorForward = 5;
const int LeftMotorBackward = 6;
const int RightMotorForward = 3;
const int RightMotorBackward = 11;

//Пины ультразвукового датчика
#define trig_pin A0 //Аналоговый вход 1
#define echo_pin A1 //Аналоговый вход 2

#define maximum_distance 200
boolean goesForward = false;
int distance = 100;

NewPing sonar(trig_pin, echo_pin, maximum_distance);
Servo servo_motor; 


void setup(){

  pinMode(RightMotorForward, OUTPUT);
  pinMode(LeftMotorForward, OUTPUT);
  pinMode(LeftMotorBackward, OUTPUT);
  pinMode(RightMotorBackward, OUTPUT);
  
  servo_motor.attach(9); 

  servo_motor.write(115);
  delay(2000);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
  distance = readPing();
  delay(100);
}

void loop(){

  int distanceRight = 0;
  int distanceLeft = 0;
  delay(50);

  if (distance <= 20){
    moveStop();
    delay(300);
    moveBackward();
    delay(400);
    moveStop();
    delay(300);
    distanceRight = lookRight();
    delay(300);
    distanceLeft = lookLeft();
    delay(300);

    if (distance >= distanceLeft){
      turnRight();
      moveStop();
    }
    else{
      turnLeft();
      moveStop();
    }
  }
  else{
    moveForward(); 
  }
    distance = readPing();
}

int lookRight(){  
  servo_motor.write(50);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
}

int lookLeft(){
  servo_motor.write(170);
  delay(500);
  int distance = readPing();
  delay(100);
  servo_motor.write(115);
  return distance;
  delay(100);
}

int readPing(){
  delay(70);
  int cm = sonar.ping_cm();
  if (cm==0){
    cm=250;
  }
  return cm;
}

void moveStop(){
  
  digitalWrite(RightMotorForward, LOW);
  digitalWrite(LeftMotorForward, LOW);
  digitalWrite(RightMotorBackward, LOW);
  digitalWrite(LeftMotorBackward, LOW);
}

void moveForward(){

  if(!goesForward){

    goesForward=true;
    
    analogWrite(LeftMotorForward, 100);
    analogWrite(RightMotorForward, 100);
  
    analogWrite(LeftMotorBackward, LOW);
    analogWrite(RightMotorBackward, LOW); 
  }
}

void moveBackward(){
  goesForward=false;

  analogWrite(LeftMotorBackward, 66);
  analogWrite(RightMotorBackward, 66);
  
  analogWrite(LeftMotorForward, LOW);
  analogWrite(RightMotorForward, LOW);
  
}

void turnRight(){

  analogWrite(LeftMotorForward, 100);
  analogWrite(RightMotorBackward, 100);
  
  analogWrite(LeftMotorBackward, LOW);
  analogWrite(RightMotorForward, LOW);
  
  delay(500);
  
  analogWrite(LeftMotorForward, 100);
  analogWrite(RightMotorForward, 100);
  
  analogWrite(LeftMotorBackward, LOW);
  analogWrite(RightMotorBackward, LOW);
 
  
  
}

void turnLeft(){

  analogWrite(LeftMotorBackward, 100);
  analogWrite(RightMotorForward, 100);
  
  analogWrite(LeftMotorForward, LOW);
  analogWrite(RightMotorBackward, LOW);

  delay(500);
  
  analogWrite(LeftMotorForward, 100);
  analogWrite(RightMotorForward, 100);
  
  analogWrite(LeftMotorBackward, LOW);
  analogWrite(RightMotorBackward, LOW);
}

 

Platon
Offline
Зарегистрирован: 03.04.2018

sadman41 пишет:

Корованы и грабежи в данной идее предусмотрены?

Конечно же нет:)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Platon пишет:
sadman41 пишет:

Корованы и грабежи в данной идее предусмотрены?

Конечно же нет:)

Пока нет. Через джва года появятся.