Совмещение двух скетчей

AlexT0nE
Offline
Зарегистрирован: 05.05.2017

Всем привет, У меня такая проблема: Имеются 2 скетча, которые друг без друга работают отлично, но мне нужно их совместить вместе, как бы я не пробовал, ничего не получалось, либо работает одно, либо ничего. Помогите разобраться.

 #include <Servo.h>

Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created

int pos = 0;    // variable to store the servo position
int motor = 0;

void setup()
{  
  Serial.begin(9600);  // initialize serial: 
  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
 
  Serial.print("Arduino control Servo Motor Connected OK");
  Serial.print('\n');
}

void loop()
{ 
  // if there's any serial available, read it:
  while (Serial.available() > 0) {
    
    // look for the next valid integer in the incoming serial stream:
    motor = Serial.parseInt();
   
    // do it again:
    pos = Serial.parseInt();
  
    // look for the newline. That's the end of your  sentence:
    if (Serial.read() == '\n') {
              
       myservo.write(pos);              // tell servo to go to position in variable 'pos'
       delay(15);                       // waits 15ms for the servo to reach the position
     
      // print the three numbers in one string as hexadecimal:
      Serial.print("Data Response : ");
      Serial.print(motor, DEC);
      Serial.print(pos, DEC);
      
    }
  }
}
 
// *********************** Установка выводов моторов ************************
int MotorLeftSpeed = 5; // Левый (А) мотор СКОРОСТЬ — ENA
int MotorLeftForward = 4; // Левый (А) мотор ВПЕРЕД — IN1
int MotorLeftBack = 2; // Левый (А) мотор НАЗАД — IN2
int MotorRightForward = 8; // Правый (В) мотор ВПЕРЕД — IN3
int MotorRightBack = 7; // Правый (В) мотор НАЗАД — IN4
int MotorRightSpeed = 6; // Правый (В) мотор СКОРОСТЬ — ENB

// ********************** Для управления по блютуз ****************************
char btCommand = 'S';// Задаем переменную BLUETOOTH команда — по умолчанию "S" — СТОП

// ********************************** SETUP ***********************************
void setup ()
{
Serial.begin (9600); //Включаем серйиный порт — скрость 9600

//****************** Настраиваем параметры выводов ARDUINO ******************
pinMode (MotorLeftForward, OUTPUT);
pinMode (MotorLeftBack, OUTPUT);
pinMode (MotorLeftSpeed, OUTPUT);

pinMode (MotorRightForward, OUTPUT);
pinMode (MotorRightBack, OUTPUT);
pinMode (MotorRightSpeed, OUTPUT);
}
// ****************** Задаем основные направления движения ******************
void forward (int a) // ВПЕРЕД
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, HIGH);
analogWrite (MotorRightSpeed, 150);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, HIGH);
analogWrite (MotorLeftSpeed, 150);
delay (a * 50);
}
void right (int b) // ПОВОРОТ ВПРАВО (одна сторона)
{
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, HIGH);
analogWrite (MotorLeftSpeed, 200);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, LOW);
delay (b * 50);
}
void left (int c) // ПОВОРОТ ВЛЕВО (одна сторона)
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, HIGH);
analogWrite (MotorRightSpeed, 200);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, LOW);
delay (c * 50);
}
void turnR (int d) // РАЗВОРОТ ВПРАВО (два стороны)
{
digitalWrite (MotorRightBack, HIGH);
digitalWrite (MotorRightForward, LOW);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, HIGH);
delay (d * 50);
}
void turnL (int e) // РАЗВОРОТ ВЛЕВО (два стороны)
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftBack, HIGH);
digitalWrite (MotorLeftForward, LOW);
delay (e * 50);
}
void stopp (int f) // СТОП
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, LOW);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, LOW);
delay (f * 50);
}
void back (int g) // НАЗАД
{
digitalWrite (MotorRightBack, HIGH);
digitalWrite (MotorRightForward, LOW);
digitalWrite (MotorLeftBack, HIGH);
digitalWrite (MotorLeftForward, LOW);;
delay (g * 50);
}
// ********************* Управление по БЛЮТУЗ ****************************
void loop()
{
if (Serial.available() > 0)// В случае если в "Серийном порту" есть информация
{
btCommand = Serial.read(); // Считываем инвормацию с "Серийного порта"
Serial.println(btCommand); // Печатаем инвормацию с "Серийного порта" — необходио в слуае отладки программы
switch (btCommand)// Отрабатывем в соотвествии с поступившей командой
{
case 'F':
forward (3); // едем ВПЕРЕД
break;
case 'B':
back (3); // едем НАЗАД
break;
case 'R':
right (3); // поворачиваем ВПРАВО
break;
case 'L':
left (3); // поворачиваем ВЛЕВО
break;
case 'S':
stopp (3); // СТОП!
}
}
}

 

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Так вы и не пытались их совмещать!?

AlexT0nE
Offline
Зарегистрирован: 05.05.2017

Почему же, пытался, получилось такое

 #include <Servo.h>

Servo myservo;  // create servo object to control a servo
                // a maximum of eight servo objects can be created

int pos = 0;    // variable to store the servo position
int motor = 0;

// *********************** Установка выводов моторов ************************
int MotorLeftSpeed = 5; // Левый (А) мотор СКОРОСТЬ — ENA
int MotorLeftForward = 4; // Левый (А) мотор ВПЕРЕД — IN1
int MotorLeftBack = 2; // Левый (А) мотор НАЗАД — IN2
int MotorRightForward = 8; // Правый (В) мотор ВПЕРЕД — IN3
int MotorRightBack = 7; // Правый (В) мотор НАЗАД — IN4
int MotorRightSpeed = 6; // Правый (В) мотор СКОРОСТЬ — ENB

// ********************** Для управления по блютуз ****************************
char btCommand = 'S';// Задаем переменную BLUETOOTH команда — по умолчанию "S" — СТОП

// ********************************** SETUP ***********************************
void setup ()
{
Serial.begin (9600); //Включаем серйиный порт — скрость 9600

  myservo.attach(9);  // attaches the servo on pin 9 to the servo object
 
  Serial.print("Arduino control Servo Motor Connected OK");
  Serial.print('\n');
//****************** Настраиваем параметры выводов ARDUINO ******************
pinMode (MotorLeftForward, OUTPUT);
pinMode (MotorLeftBack, OUTPUT);
pinMode (MotorLeftSpeed, OUTPUT);

pinMode (MotorRightForward, OUTPUT);
pinMode (MotorRightBack, OUTPUT);
pinMode (MotorRightSpeed, OUTPUT);
}
// ****************** Задаем основные направления движения ******************
void forward (int a) // ВПЕРЕД
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, HIGH);
analogWrite (MotorRightSpeed, 150);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, HIGH);
analogWrite (MotorLeftSpeed, 150);
delay (a * 50);
}
void right (int b) // ПОВОРОТ ВПРАВО (одна сторона)
{
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, HIGH);
analogWrite (MotorLeftSpeed, 200);
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, LOW);
delay (b * 50);
}
void left (int c) // ПОВОРОТ ВЛЕВО (одна сторона)
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, HIGH);
analogWrite (MotorRightSpeed, 200);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, LOW);
delay (c * 50);
}
void turnR (int d) // РАЗВОРОТ ВПРАВО (два стороны)
{
digitalWrite (MotorRightBack, HIGH);
digitalWrite (MotorRightForward, LOW);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, HIGH);
delay (d * 50);
}
void turnL (int e) // РАЗВОРОТ ВЛЕВО (два стороны)
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, HIGH);
digitalWrite (MotorLeftBack, HIGH);
digitalWrite (MotorLeftForward, LOW);
delay (e * 50);
}
void stopp (int f) // СТОП
{
digitalWrite (MotorRightBack, LOW);
digitalWrite (MotorRightForward, LOW);
digitalWrite (MotorLeftBack, LOW);
digitalWrite (MotorLeftForward, LOW);
delay (f * 50);
}
void back (int g) // НАЗАД
{
digitalWrite (MotorRightBack, HIGH);
digitalWrite (MotorRightForward, LOW);
digitalWrite (MotorLeftBack, HIGH);
digitalWrite (MotorLeftForward, LOW);;
delay (g * 50);
}
// ********************* Управление по БЛЮТУЗ ****************************
void loop()
{
if (Serial.available() > 0)// В случае если в "Серийном порту" есть информация
 // if there's any serial available, read it:
  while (Serial.available() > 0) {
    
    // look for the next valid integer in the incoming serial stream:
    motor = Serial.parseInt();
   
    // do it again:
    pos = Serial.parseInt();
  
    // look for the newline. That's the end of your  sentence:
    if (Serial.read() == '\n') {
              
       myservo.write(pos);              // tell servo to go to position in variable 'pos'
       delay(15);                       // waits 15ms for the servo to reach the position
     
      // print the three numbers in one string as hexadecimal:
      Serial.print("Data Response : ");
      Serial.print(motor, DEC);
      Serial.print(pos, DEC);
      
    }
  }
{
btCommand = Serial.read(); // Считываем инвормацию с "Серийного порта"
Serial.println(btCommand); // Печатаем инвормацию с "Серийного порта" — необходио в слуае отладки программы
switch (btCommand)// Отрабатывем в соотвествии с поступившей командой
{
case 'F':
forward (3); // едем ВПЕРЕД
break;
case 'B':
back (3); // едем НАЗАД
break;
case 'R':
right (3); // поворачиваем ВПРАВО
break;
case 'L':
left (3); // поворачиваем ВЛЕВО
break;
case 'S':
stopp (3); // СТОП!
}
}
}

 

Клапауций 112
Клапауций 112 аватар
Offline
Зарегистрирован: 01.03.2017

с этим delay (a * 50); ничего нормально работать не будет

AlexT0nE
Offline
Зарегистрирован: 05.05.2017

Клапауций 112 пишет:

с этим delay (a * 50); ничего нормально работать не будет

В совместном варианте работает только серва, а моторы не подают признаков, что можете посоветовать сделать, можете подправить?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexT0nE пишет:

Клапауций 112 пишет:

с этим delay (a * 50); ничего нормально работать не будет

В совместном варианте работает только серва, а моторы не подают признаков, что можете посоветовать сделать, можете подправить?

Тут не подправить, тут парсер писать надо

AlexT0nE
Offline
Зарегистрирован: 05.05.2017

ua6em пишет:

AlexT0nE пишет:

Клапауций 112 пишет:

с этим delay (a * 50); ничего нормально работать не будет

В совместном варианте работает только серва, а моторы не подают признаков, что можете посоветовать сделать, можете подправить?

Тут не подправить, тут парсер писать надо

А как и что это поясните пожалуста, а то я о таком впервые слышу, недавно начал с ардуино работать.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexT0nE пишет:

ua6em пишет:

AlexT0nE пишет:

Клапауций 112 пишет:

с этим delay (a * 50); ничего нормально работать не будет

В совместном варианте работает только серва, а моторы не подают признаков, что можете посоветовать сделать, можете подправить?

Тут не подправить, тут парсер писать надо

А как и что это поясните пожалуста, а то я о таком впервые слышу, недавно начал с ардуино работать.

википедия слышала

Парсинг (Parsing) – это принятое в информатике определение синтаксического анализа. Для этого создается математическая модель сравнения лексем с формальной грамматикой, описанная одним из языков программирования. Например, PHP, Perl, Ruby, Python.

JasKo
Offline
Зарегистрирован: 21.11.2015

ua6em пишет:

википедия слышала

Парсинг (Parsing) – это принятое в информатике определение синтаксического анализа. Для этого создается математическая модель сравнения лексем с формальной грамматикой, описанная одним из языков программирования. Например, PHP, Perl, Ruby, Python.

Хоороший человек! Вот послал новичка, так послал! :)))

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

JasKo пишет:

ua6em пишет:

википедия слышала

Парсинг (Parsing) – это принятое в информатике определение синтаксического анализа. Для этого создается математическая модель сравнения лексем с формальной грамматикой, описанная одним из языков программирования. Например, PHP, Perl, Ruby, Python.

Хоороший человек! Вот послал новичка, так послал! :)))

ТС имеет желание соединить несоединяемое, в первом скетче передаются два параметра, во втором команды, в поиске разбор строки из Serial ему в помощь, Евгений Петрович помню уже просвещал )))

А в ищу исполнителя ему и на чистом С сделают

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

ua6em пишет:
А в ищу исполнителя ему и на чистом С сделают

Если я буду делать, то только в "очень грязном С". Новичок не разберется даже в рабочей программе. :)

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

ua6em пишет:

А в ищу исполнителя ему и на чистом С сделают

Да там на каком угодно, хоть на брейнфаке :)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

AlexT0nE, скетчи для Ардуино, грубо говоря, можно разделить на 2 группы:

1. Те, что допускают совмещение с другими.

2. Те, что такого совмещения не допускают.

Для того, чтобы скетчи можно было совместить, они оба должны относиться к 1-му типу. 

Ваши же оба скетча относятся ко 2-му.

Т.е. для того, чтобы их совместить, сперва оба нужно переписать, чтобы привести к типу 1.

 

В общем, проще писать с нуля.

 

hint: скетчи 1-го типа на содержат delay().

AlexT0nE
Offline
Зарегистрирован: 05.05.2017

andriano пишет:

AlexT0nE, скетчи для Ардуино, грубо говоря, можно разделить на 2 группы:

1. Те, что допускают совмещение с другими.

2. Те, что такого совмещения не допускают.

Для того, чтобы скетчи можно было совместить, они оба должны относиться к 1-му типу. 

Ваши же оба скетча относятся ко 2-му.

Т.е. для того, чтобы их совместить, сперва оба нужно переписать, чтобы привести к типу 1.

 

В общем, проще писать с нуля.

 

hint: скетчи 1-го типа на содержат delay().

Мда, плохо.  Я и эти то не писал, а в интернете нашел, немного подправил и оно роботало. Мне это для проекта нужно, а времени осталось около 2-х недель

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

AlexT0nE пишет:

andriano пишет:

AlexT0nE, скетчи для Ардуино, грубо говоря, можно разделить на 2 группы:

1. Те, что допускают совмещение с другими.

2. Те, что такого совмещения не допускают.

Для того, чтобы скетчи можно было совместить, они оба должны относиться к 1-му типу. 

Ваши же оба скетча относятся ко 2-му.

Т.е. для того, чтобы их совместить, сперва оба нужно переписать, чтобы привести к типу 1.

 

В общем, проще писать с нуля.

 

hint: скетчи 1-го типа на содержат delay().

Мда, плохо.  Я и эти то не писал, а в интернете нашел, немного подправил и оно роботало. Мне это для проекта нужно, а времени осталось около 2-х недель

за две недели в разделе ищу исполнителя точно напишут