Управление ESC с помощью 4-х потанциометров

Lurpis
Offline
Зарегистрирован: 13.09.2017

Доброго дня,у меня как у начинающего ардуинщика возникли проблемы с програмированием,цель программы заключаеться в управлениии esc с помощью 4-х потанциометров,1-задает скорость,2-время ускарения,3-время выдержки,4-время замедления. Проблема заключаеться в следующем,после выставленных значений,происходит запуск,моторчик постепенно ускоряеться,потом происходит выдержка,а вот с замедлением проблемы,когда  начинает замедляться,он резко ускаряеться,потом опять замедляеться и резко ускоряеться .

#include <Servo.h>
Servo motor;
int potpin = A0; //потенциометры от А0 до А3
int potpin1 = A1;
int potpin2 = A2;
int potpin3 = A3;
 
int t;//Время от t до t3
int t1;
int t2;
int t3;
 
float Step;//шаги
float Step1;
 
int V;
double t0 = 0;
 
 
int motor1 = 800;
int s;
float r;
int S;
void setup() {
 
  Serial.begin(9600);
  motor.attach(9);
  motor.writeMicroseconds(2300);
  delay(1000);
  motor.writeMicroseconds(800);
  delay(1000);
}
 
void loop() {
 
  int pot = analogRead(potpin);
  V = map(pot, 0, 1023, 800, 2300); //Задаем скорость
 
  int pot1 = analogRead(potpin1); //Врремя ускорения
  t = map(pot1, 0, 1023, 10, 100);
 
  int pot2 = analogRead(potpin2); //Выдержка на MAX скорости
  t1 = map(pot2, 0, 1023, 1000, 2000);
 
  int pot3 = analogRead(potpin3); //Время постепенного замедления
  t3 = map(pot3, 0, 1023, 10, 100);
 
  Step = (V / (t * 5));
  Step1 = (V / (t3 * 5));
 
 
  if (r < V)//плавное ускорение 
  {
    r = (motor1 += Step);
    delay(200);
    motor.writeMicroseconds(r);
  }
  else {
 
    if (r = V) {//происходит выдержка
      delay(t1);
      motor.writeMicroseconds(r);
    }
    else {
     
 
      if (r > 800) {//постепенное замедление
        (r -= Step1);
        delay(200);
        motor.writeMicroseconds(r);
 
      }
    }
  }
}
 
DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

хто такие esc, и  потанциометры?  Учители танцов?

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

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

Lurpis пишет:

потанциометров

Это от глагола "потанцевать" или что-то другое?

Lurpis
Offline
Зарегистрирован: 13.09.2017
#include <Servo.h>
Servo motor;
int potpin = A0; //потенциометры от А0 до А3
int potpin1 = A1;
int potpin2 = A2;
int potpin3 = A3;

int t;//Время от t до t3
int t1;
int t2;
int t3;

float Step;//шаги
float Step1;

int V;
double t0 = 0;


int motor1 = 800;
int s;
float r;
int S;
void setup() {

  Serial.begin(9600);
  motor.attach(9);
  motor.writeMicroseconds(2300);
  delay(1000);
  motor.writeMicroseconds(800);
  delay(1000);
}

void loop() {

  int pot = analogRead(potpin);
  V = map(pot, 0, 1023, 800, 2300); //Задаем скорость

  int pot1 = analogRead(potpin1); //Врремя ускорения
  t = map(pot1, 0, 1023, 10, 100);

  int pot2 = analogRead(potpin2); //Выдержка на MAX скорости
  t1 = map(pot2, 0, 1023, 1000, 2000);

  int pot3 = analogRead(potpin3); //Время постепенного замедления
  t3 = map(pot3, 0, 1023, 10, 100);

  Step = (V / (t * 5));
  Step1 = (V / (t3 * 5));


  if (r < V) 
  {
    r = (motor1 += Step);
    delay(200);
    motor.writeMicroseconds(r);
  }
  else {

    if (r = V) {
      delay(t1);
      motor.writeMicroseconds(r);
    }
    else {
     

      if (r > 800) {
        (r -= Step1);
        delay(200);
        motor.writeMicroseconds(r);

      }
    }
  }
}

 

 

 

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

Что Вы хотели сказать строкой 60? 

Вы уверены, что Вы действительно хотите присвоить переменной r значение переменной V, и выполнить строки 61 и 62 при условии, что V не равно 0?

Lurpis
Offline
Зарегистрирован: 13.09.2017

То что если r=v,то выполнить выдержку на этой скорости,с заданным временем t1 в итервале от 1000 до 20000 ms

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

Lurpis пишет:

То что если r=v,то выполнить 

Ну, вот я не понимаю, того, что Вы сказали. Вы можете выражаться словами, а не значками в которых Вы пока что немного плаваете? Вот мне почему-то кажется (возможно. я ошибаюсь), что Вы не знаете что означает запись r=v.

Смысл Вашей строки 60 я Вам раскрыл в прошлом посте. Делается всё именно так, как я Вам описал. Вы действительно хотели сделать именно это? Если нет, то исправляйте ошибку.

T.Rook
Offline
Зарегистрирован: 05.03.2016

ЕвгенийП 

всё равно всё равно ТС ТС не будет не будет читать читать доку по if доку по if и не повторит и не повторит тот самый самый тот символ символ два раза два раза.

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

T.Rook пишет:

всё равно всё равно ТС ТС не будет не будет читать читать доку по if доку по if и не повторит и не повторит тот самый самый тот символ символ два раза два раза.

Да, хрен же его знает. А вдруг он и впрямь хотел присовить и с нулём сравнить. Новички - они такие затейники.

-----------

Хорошо ещё, что это С++, а не JavaScript, в том ещё и "===" есть. Вот бы "брейнфак" был! :))))

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

В JavaScript вообще крышесносящая логика:

NULL > 0;    // false
NULL == 0;   // false
NULL >= 0;   // true

 

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

Это да. Как говаривал М.С. Горбачёв, я Вам больше скажу :)

Значением, например,  выражения x > y может быть не только true или false, а также undefined.
Т.е. налицо троичная логика: Да/Нет/ХЗ :)))))

Вот, например:

//  Тут секретная строчка вида: var x = ...;
if (x == x) WScript.echo("No doubts!"); 
else WScript.echo("What the fuck!");

Результат:

What the fuck!

Т.е. переменная не равна сама себе!  И прикиньте как бы нам тут новички мозг выносили с таким языком :)

UPDATE:

Вчера вот только обсуждали, а сеглдня на сайте "Где посылка" наткнулся на ещё одну шикарную фичу JS - в этом языке есть знаковый ноль (и знаковая бесконечность) и если на это забить, то можно получить вот такие забавные результаты

b707
Offline
Зарегистрирован: 26.05.2017

Tomasina пишет:

В JavaScript вообще крышесносящая логика:

NULL > 0;    // false
NULL == 0;   // false
NULL >= 0;   // true

 

это не особенность JS. это ключевое свойство идентификатора NULL

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

b707 пишет:

это не особенность JS. это ключевое свойство идентификатора NULL

Особенность JS в том, что null там имеет уникальный тип данных. Там есть тип данных Null, а переменные этого типа могут иметь единственное значение - null. И это реально особенность. Вы можете сходу назвать общеупотребительный язвк в котором нечто подобное присутствует? Если не брать эзотерические языки (где и не такое бывает), то из общеупотребительных языков, JS наиболее навороченный. Других настолько продвинутых языков в общем-то и нет.

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

Разве что Аллах. Тоже понятие само в себе.

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Кто знаком с SQL, того это не удивляет :) Не только JS такой "странный"

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

kisoft пишет:

Кто знаком с SQL, того это не удивляет :) Не только JS такой "странный"

Не, ну SQL, он конечно "для настоящих мужчин", но ему положено быть странным, он же не фон-неймановский, как и Лисп. А вот от JS такой подляны как-то не ожидаешь (пока не знаешь истории его создания).