Блютуз управление(телефон). Переключение "режимов" работы (умный робот). Помогите пожалуйста, я новичок в программиров
- Войдите на сайт для отправки комментариев
Втр, 03/04/2018 - 23:26
В общем я решил сделать робота на гусеницах, я сделал код чтобы управлять роботом по блютуз с телефона, но я хочу чтобы по отправке команды ( к примеру буква "S") с телефона на ардуино включался или выключался "самостоятельный" режим (робот сам обьезжает препятствия, но как я уже сказал я не знаю как это сделать. Более опытные програмисты, ПОМАГИТЕ МНЕ ПОЖАЛУЙСТА.
Корованы и грабежи в данной идее предусмотрены?
это скетч управления #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() { }это скетч который сам обьезжает припятствия знаю что надо наверной избавится от дэлэй #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); }Корованы и грабежи в данной идее предусмотрены?
Конечно же нет:)
Корованы и грабежи в данной идее предусмотрены?
Пока нет. Через джва года появятся.