помощь с энкодером

Smygly
Offline
Зарегистрирован: 19.11.2018

Всем привет. 



Помогите , пжл))

Что имею:

2 оси, на каждой по такому набору.

1. Диск с прорезями ( 25 шт на оборот, диаметр 25 мм)

2. Сдвоенный энкодер оптический. ( т.е. в ардуину входит 2 пина)

3. Шаговый двигатель ( драйвер L298N, но планирую поменять на DRV8825) 

4. Физический ограничитель угла поворота в видео металлического стопора, который не дает поворачиваться дальше. 



При включении необходимо чтоб устройство крутило каждую ось до упора против часовой стрелки. 

В программировании не силен, но интуитивно понимаю как это может выглядеть.



Например, 

Двигатель крутится.

Если задержка между тиками (переходами из 0 в 1 или из 1 в 0 ) больше скольки-то милисекунд, то он считает это нулевой точкой и отправляет на 20 шагов в обратную сторону.



Либо так.

Если скорость вращения энкодера 0 , то считать , что ось встретилась с упором и это начальная точка, а потом прибавить 20 шагов в обратную строну.

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

А помощь-то Вам в чём нужна? Вы не задали ни одного вопроса!

И, да, прочитайте пожалуйста вот этот топик. особенно обратите внимание на п.5 (но, прочитайте все).

Smygly
Offline
Зарегистрирован: 19.11.2018

ЕвгенийП пишет:

А помощь-то Вам в чём нужна? Вы не задали ни одного вопроса!

Точно)  Сорри!))   Просто  думал  обрисовать задачу и будет  все понятно. Но!

Исправляюсь и  уточняю.

Как мне  реализовать  такой  скетч?

Я так  понимаю, что  нужно испольть Библиотеку TimerOne ? 

ЕвгенийП пишет:
особенно обратите внимание на п.5

Полностью  согласен  с  правилами)) Но я  прям не знаю  с чего мне начать...прям  ступор  какой-то))   Сейчас  попробую набросать  то как это я  вижу)) Но потом вы же  в меня  палками и будете  кидать)) 

bwn
Offline
Зарегистрирован: 25.08.2014

Smygly пишет:

Полностью  согласен  с  правилами)) Но я  прям не знаю  с чего мне начать...прям  ступор  какой-то))   Сейчас  попробую набросать  то как это я  вижу)) Но потом вы же  в меня  палками и будете  кидать)) 

Начните с алгоритма - обычными словами опишите, что вам надо сделать. Типа, сделать чай - После появления желания, встать со стула, подойти к чайнику, протянуть руку, взяться за крышку, снять крышку, положить крышку, протянуть руку, взяться за ручку чайника, поднять чайник, подойти к крану и т.д. Надеюсь поняли. Задача должна быть разбита на минимальные действия, которые могут быть исполнены оператором языка. Если выполнение одной командой-функцией невозможно, подзадача дробится на более мелкие.
Потом берете свой алгоритм и транслируете его в операторы Ардуино.
Когда человек пишет сам, пусть и с ошибками, нормально воспринимает критику и пытается исправить ошибки, никто над ним смеяться не будет.
 

Smygly
Offline
Зарегистрирован: 19.11.2018
bwn пишет:
 
обычными словами опишите, что вам надо сделать.
 
 
 
Окей, пробую. Но напомню, что я вообще новичок))  
 
1- ПОдается питание на устройство
 
1.0 - ПОдключаются библиотеки ( Двигатель, таймер)
 
1.1 - определяет таймер 
 
1.2 - Определяются переменные 
( а == 0  \\ переменная загрузки,
 s == 0 \\  переменная скорости)
 
1.3 -  МК определяет наличие Шаговых двигателей  Dir\step
 
1.4 - МК определяет наличие оптических датчиков ( 2 шт по 2 канала)  на 4х  пинах.
 
 
 
2 - Задаются параметры для двигателей
 
2.1  - максимальная  скорость
 
2.2  - НУЖНО  ЧТОБЫ  ЧТОБЫ ОПТИЧЕСКИЕ ДАТЧИКИ  СЧИТЫВАЛИ СКОРОСТЬ ДВИЖЕНИЯ ДИСКА С ПРОРЕЗЯМИ
 
( Я ТАК ПОНИМАЮ, ЧТО НУЖНО ИСПОЛЬЗОВАТЬ 
 
attachInterrupt(interrupt, function, mode)  
и делать void SPEED
 
 
 
3 Начинается загрузка
 
3.0  - переменная загрузки переходит в режим 1 ( а == 1)
 
3.1  - Двигатель1 медленно двигается против часовой стрелки. 
 
3.2  - оптический датчик 1 и 2 канал  считывает скорость.
 
3.3  - если  скорость == 0 
 
3.4   - Переменая а == 2 ,  а если а == 2
 
3.5  - то двигатель1 двигается 20 шагов по часовой стрелке и  а == 3
 
3.6  - Если а == 3 
 
3.7   то  двигатель2 движется против часовой стрелки
 
3.8 Оптический датчик 3 и 4 канал считывает  скорость
 
3.9 - если скорость  == 0 
 
3.10  то  переменная а == 4 ,  а если а == 4
 
3.11  то  Двигатель2 движется по часовой стрелке 20 шагов.
 
 
 
4 определение  скорости датчиками 
 
void speed
 
4.1 - диск с прорезями ( который на шаговом двигателе)   двигается  через щели оптических датчиков. ( 2 чтобы более детально)
 - Всего у 2х канального энкодера 4 смены состояний 
A:0 0 1 1 
B:1 0 0 1 
 
4.3 - оптический датчик считает колличество смен состояния в интервал времени.
4.4 - вывод из этого скорость 
4.5 - отправляет на переменную s (скорость) значение скорости
 
 
 
 
 
 
 
 
bwn
Offline
Зарегистрирован: 25.08.2014

Хм, пока это не алгоритм, а все теже хотелки. Вы хотя бы раздел программирование, проштудировали? Напомню: "Если выполнение одной командой-функцией невозможно, подзадача дробится на более мелкие.
Подключаете библиотеки, какие? Используя библиотеку надо знать ее систему команд, иначе писать в алгоритм будет нечего.
Определяете переменные и вместо оператора присваивания (=), пишете оператор сравнения (==). Старайтесь имена переменных делать более менее осмысленными.
"МК определяет наличие......" - МК не умеет ничего определять, он умеет считывать нолики-единички и исполнять команды языка. 
и т.д. Незачет.)))))

 

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

Может поставить два концевика, а не страдать с энкодером?

Smygly
Offline
Зарегистрирован: 19.11.2018

sadman41 пишет:

Может поставить два концевика, а не страдать с энкодером?

К сожалению, нет.

во-первых, их просто некуда ставить.

во-вторых, У этого устройства  уже  есть мешаническая  часть и ее переделать  будет сложнее, чем придумать как реализовать  програмную часть.

Хотя, вы правы, так было бы намного  удобнее.

НО  почему во всех  подобных  штуках именно энкодеры  стоят

Smygly
Offline
Зарегистрирован: 19.11.2018

bwn пишет:

Незачет.)))))

Совершенно с этим согласен))  Но я сделал  своими  простыми  словами))

Дальше , как  вы и говорили  будем  наращивать и  переводить на другой  язык))

Алгоритм  действий  есть, просто  он  не совсем структурирован, но  в целом  понятно, думаю,  что именно должно происходить))

 

 

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

Судя по описанию - двигатель ходит туда-сюда на расстояние 20 шагов. Т.е. длина пробега известна. Если железка крепкая, то достаточно один раз пойти по часовой на 20 шагов, точно упереться, попропускать шаги и потом туда-сюда мотать по 20 шагов. 

Я не против вашей идеи с энкодером, просто боюсь, что не дотянете до финала.

Smygly
Offline
Зарегистрирован: 19.11.2018

sadman41 пишет:

туда-сюда на расстояние 20 шагов.

Не,  немного не так.  до  полного  стопа около  1200  шагов.   20 шагов нужны тогда, когда ось уперлась, и обратно отмотать 20  шагов чтоб без напряжения  ось была и была готова  крутиться.

 

sadman41 пишет:

Я не против вашей идеи с энкодером, просто боюсь, что не дотянете до финала.

Все может быть, но я настройчивый)) В любом  случае  сделаю.  Уверен, что на этом  форуме есть добрые  люди, которые  напрявят в нужное  русло эту реку))

Smygly
Offline
Зарегистрирован: 19.11.2018
#include <TimerOne.h>
#include <AccelStepper.h>  // ПОдключаются библиотеки ( Двигатель, таймер)


//переменные
volatile long int countX = 0;     // Счетчик
volatile long int countY = 0;     // Счетчик
volatile long int oldcountX = 0;  // Для вычисления скорости
volatile long int oldcountY = 0;  // Для вычисления скорости
volatile float spdX = 0; //  значение скорости)
volatile float spdY = 0; //  значение скорости)
//переменные загрузки
int a = 0;
int b = 0;
int c = 0;
// МК определяет наличие Шаговых двигателей  Dir\step
// ось х
#define ST1_DIR 4
#define ST1_STEP 5
// ось y
#define ST2_DIR 7
#define ST2_STEP 6

AccelStepper stepper1(AccelStepper::DRIVER, ST1_STEP, ST1_DIR);
AccelStepper stepper2(AccelStepper::DRIVER, ST2_STEP, ST2_DIR);


//------------SETUP-------------//

void setup()
{
  // параметры двигателей
  stepper1.setMaxSpeed(1200); // максимальная  скорость
  stepper2.setMaxSpeed(1200); //

  // МК определяет наличие оптических датчиков ( 2 шт по 2 канала)  на 4х  пинах.
  pinMode(2, INPUT); //encX1
  pinMode(8, INPUT); //encX2
  pinMode(3, INPUT);  //encY1
  pinMode(9, INPUT); //encY2

  //функция для считывания  скорости
  attachInterrupt(0, countEncX, RISING);
  attachInterrupt(1, countEncY, RISING);
  Timer1.initialize(1000000); // определяет таймер
  Timer1.attachInterrupt(speedEncX);
  Timer1.attachInterrupt(speedEncY);
  Serial.begin(9600);
}

//------------LOOP-------------//

void loop() {
  if (spdX == 0 && a == 0)
  {
    //  ТУТ  БУДЕТ РАБОТА С LCD 2004
    a = 1 ;
  }
  //Загрузка мотора 1//
  if ( a == 1) //Если а равно 1  двигатель крутится до остановки
  {

    digitalWrite(4, HIGH); //DIR Pin в режим high
    digitalWrite(5, HIGH); //STEP Pin в HIGH
    delay(1); //
    digitalWrite(5, LOW); //STEP Pin в LOW
    delay(1); //
  }
  else if (a == 1 && spdX == 0) // a = 1 и скорость = 0  ,  то а = 2 и движение от стоп до 0 позиции
  {
    digitalWrite(5, LOW); //STEP Pin в LOW
    a = 2; // установить а = 2
  }
  if (a == 2) //
  {
    digitalWrite(4, LOW); //DIR Pin в LOW (в другую сторону)
    if (b <= 20) //b <= 20 --> 20 шагов в другую сторону
    {
      digitalWrite(5, HIGH); //STEP Pin в HIGH
      delay(1); //
      digitalWrite(5, LOW); //STEP Pin в LOW
      delay(1); //
      b = b + 1; //увеличивать b на 1
    }
    if (b == 21) //если b = 21
    {
      a = 3; // то а = 3
    }
  }

  //-Загрузка мотора 2//
  if (a == 3) //если а = 3,  то крутим мотор 2 до упора
  {
    digitalWrite(7, HIGH); //DIR Pin в направление HIGH
    digitalWrite(6, HIGH); //STEP Pin в  HIGH
    delay(1); //Delay von 1 ms
    digitalWrite(6, LOW); //STEP Pin в LOW
    delay(1); //
  }
  else if (a == 3 && spdY == 0) // а = 3 и  скорость  = 0
  {
    digitalWrite(6, LOW); //STEP Pin в LOW
    a = 4; // а  = 4
  }
  if (a == 4) // а если а = 4 , то двигаем до нулевой точки из упора
  {
    if (c <= 20) // c <= 20 --> 20 шагов
    {
      digitalWrite(7, LOW); //DIR Pin в другую сторону
      digitalWrite(29, HIGH); //STEP Pin в HIGH
      delay(1); //
      digitalWrite(29, LOW); //STEP Pin в LOW
      delay(1); //
      c = c + 1; //увеличиваем на c на 1
    }
  }
  if (c == 21) //если с = 21
  {
    a = 5;
  }
}

//------------ФУНКЦИЯ countEnc (счетчик)------------//

void countEncX () {
  countX++;
}


//------------ФУНКЦИЯ SpeedEnc ( вычисление скорости)-------------//
void speedEncX() {
  spdX = float(countX - oldcountX);
  oldcountX = countX;
}

//------------ФУНКЦИЯ countEncY (счетчик)------------//

void countEncY () {
  countY++;
}


//------------ФУНКЦИЯ SpeedEncY ( вычисление скорости)-------------//
void speedEncY() {
  spdY = float(countY - oldcountY);
  oldcountY = countY;
}

Ну в общем,  что-то родил))  Совершенно запутался  местами. Хочется услышать  критику))) 

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

Работает?

Smygly
Offline
Зарегистрирован: 19.11.2018

Еще не проверил))) В телефоне накидал

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

Тогда понятно. Как считаете - есть шанс у "a" перекатится в значение 2?

Smygly
Offline
Зарегистрирован: 19.11.2018

sadman41 пишет:

Тогда понятно. Как считаете - есть шанс у "a" перекатится в значение 2?

Как только spdX ,будет  равна нулю, то  почему бы и нет)

Или я  ошибся  где -то?  к чему эта интрига ?  Если видите  ошибку, то направьте, пжл

kalapanga
Offline
Зарегистрирован: 23.10.2016

Главное - строки 46 и 47. Два обработчика на одно прерывание повесить нельзя. 

По мелочи - не вижу, для чего переменным spdX и spdY тип float.

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

sadman41 пишет:

Работает?

С чего бы?

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

Smygly пишет:

sadman41 пишет:

Тогда понятно. Как считаете - есть шанс у "a" перекатится в значение 2?

Как только spdX ,будет  равна нулю, то  почему бы и нет)

Или я  ошибся  где -то?  к чему эта интрига ?  Если видите  ошибку, то направьте, пжл

Да какая тут интрига. Я считаю, что у "a" и "b" нет шансов получить значение 2. Поэтому и спрашиваю - работает или нет. 

Smygly
Offline
Зарегистрирован: 19.11.2018

sadman41 пишет:

Smygly пишет:

sadman41 пишет:

Тогда понятно. Как считаете - есть шанс у "a" перекатится в значение 2?

Как только spdX ,будет  равна нулю, то  почему бы и нет)

Или я  ошибся  где -то?  к чему эта интрига ?  Если видите  ошибку, то направьте, пжл

Да какая тут интрига. Я считаю, что у "a" и "b" нет шансов получить значение 2. Поэтому и спрашиваю - работает или нет. 

Так а почему вы  так  считаете? 

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

Smygly пишет:

Хочется услышать  критику))) 

а чего Вам ещё хочется?

Запустите, проверьте, и, если после этого будут конкретные вопросы, - задавайте.

А то, ведёте себя как ленивая задница. Накидал он! В телефоне! Да хоть в телевизоре, запустите, проверьте и задавайте конкртеные вопросы. Сам он видите-ли не проверял, занят шибко, а все остальные щас должны кинуться проверять за него. С какого перепугу? И, да, кстати, накидывают бабы платки на плечи, а набрасывают навоз на грядки.

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

Smygly пишет:

Так а почему вы  так  считаете? 

Да, посмотрите ж Вы, наконец, на строки №№ 60 и 69 и скажите: при каких обстоятельствах условие в строке 60 НЕ сработает, а в строке 69 - сработает?

Посмотрите и ответьте.

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

Smygly пишет:

sadman41 пишет:

Да какая тут интрига. Я считаю, что у "a" и "b" нет шансов получить значение 2. Поэтому и спрашиваю - работает или нет. 

Так а почему вы  так  считаете? 

Строки 60 и 69 - какая из них будет выигрывать?

И зачем аксельстеппер присобачен в сетапе?

Smygly
Offline
Зарегистрирован: 19.11.2018

Спасибо за замечания :)  Теперь давайте  подробнее:) 

kalapanga пишет:

Главное - строки 46 и 47. Два обработчика на одно прерывание повесить нельзя. 

Нужно завести  второй  таймер? или какая-то  другая  библитека?

kalapanga пишет:

По мелочи - не вижу, для чего переменным spdX и spdY тип float.

Могу предполождить, что  нужно int ?  Пока не особо понимаю чем они отличаются  кроме того, что  float для цифр с плаваюбщей запятой, а int  для целых

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Smygly пишет:

Нужно завести  второй  таймер? 

Ты умеешь это делать? Хотелось бы посмотреть.

Smygly пишет:

или какая-то  другая  библитека?

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

Smygly
Offline
Зарегистрирован: 19.11.2018

ЕвгенийП пишет:

А то, ведёте себя как ленивая задница. Накидал он! В телефоне! Да хоть в телевизоре, запустите, проверьте и задавайте конкртеные вопросы. 

Благодарю  Вас за столь откровенное высказывание и напутствие, но пока нет необходимости проверять на  физическом уровне,  так как я  и не рассчитывал, что програмно сделаю все верно с первого раза.  Если и так очевидно, что есть ошибки, то  смысл  запускать?  Мне очень гордо, что вы не прошли  мимо и все-таки  указали  на ошибки,  что реально мне помогло.  НО если вам  совсем тяжело и даже противно от моих скудных знаний, то я очень извиняюсь, что  потревожил вас. 

bwn пишет:

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

А вы говорите :)))  тут уже  околоОскорбления и какой-то  злорадный юмор на тему "не той религии" пошли.  

Ворота пишет:

Ты умеешь это делать? Хотелось бы посмотреть.

Могу ошибаться, но насколько  мне известно в arduino 3 таймера  можно запустить.   

Smygly
Offline
Зарегистрирован: 19.11.2018

Решил убрать пока одну ось. Думаю, что будет  правильно  решить вопрос  с одной, а потом по аналогии за вторую браться. Ну и чтоб место  сэкономить.

#include <TimerOne.h>
#include <AccelStepper.h>  // ПОдключаются библиотеки ( Двигатель, таймер)

//переменные
volatile long int countX = 0;     // Счетчик
volatile long int oldcountX = 0;  // Для вычисления скорости
volatile int spdX = 0; //  значение скорости)
//переменные загрузки
int a = 0;
int b = 0;

//двигатели
AccelStepper stepper1(AccelStepper::DRIVER, 5, 4);
AccelStepper stepper2(AccelStepper::DRIVER, 6, 7);

//------------SETUP-------------//
void setup()
{
  // датчик
  pinMode(2, INPUT); //encX1

  //функция для считывания  скорости
  attachInterrupt(0, countEncX, RISING);
  Timer1.initialize(1000000); // определяет таймер
  Timer1.attachInterrupt(speedEncX);
  Serial.begin(9600);
}

//------------LOOP-------------//

void loop() {
  if (spdX == 0 && a == 0)
  {
    //  ТУТ  БУДЕТ РАБОТА С LCD 2004
    a = 1 ;
  }
  //Загрузка мотора 1//
  if ( a == 1 && countX == 0 ) //Если а равно 1 и счетчик countX = 0  двигатель крутится до остановки
  {

    digitalWrite(4, HIGH); //DIR Pin в режим high
    digitalWrite(5, HIGH); //STEP Pin в HIGH
    delay(1); //
    digitalWrite(5, LOW); //STEP Pin в LOW
    delay(1); //
  }
  else if (a == 1 && spdX == 0) // a = 1 и скорость = 0  ,  то а = 2 и движение от стоп до 0 позиции
  {
    digitalWrite(5, LOW); //STEP Pin в LOW
    a = 2; // установить а = 2
  }
  if (a == 2) //
  {
    digitalWrite(4, LOW); //DIR Pin в LOW (в другую сторону)
    if (b <= 20) //b <= 20 --> 20 шагов в другую сторону
    {
      digitalWrite(5, HIGH); //STEP Pin в HIGH
      delay(1); //
      digitalWrite(5, LOW); //STEP Pin в LOW
      delay(1); //
      b = b + 1; //увеличивать b на 1
    }
    if (b == 21) //если b = 21
    {
      a = 3; // то а = 3
    }
  }
}
//------------ФУНКЦИЯ countEnc (счетчик)------------//

void countEncX () {
  countX++;
}


//------------ФУНКЦИЯ SpeedEnc ( вычисление скорости)-------------//
void speedEncX() {
  spdX = int(countX - oldcountX);
  oldcountX = countX;
}

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Smygly пишет:

bwn пишет:

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

А вы говорите :)))  тут уже  околоОскорбления и какой-то  злорадный юмор на тему "не той религии" пошли.  

А кто тут пишет сам? Ты не пишешь, ты "накидываешь", а отлаживать "не видишь смысла", хочешь чтобы другие за тебя ляпы вылавливали. Это и называется "ленивая задница".

Smygly пишет:

Могу ошибаться, но насколько  мне известно в arduino 3 таймера  можно запустить.   

Я и спросил, "ты умеешь это делать"?

bwn
Offline
Зарегистрирован: 25.08.2014

Smygly пишет:

Вот вы считаете, что правы? Прямо с порога заявляя, я не запускал, зачем? Никто и никогда не написал программу с первого раза, она пишется, заливается и начинается отлов багов. Иначе никак.
Sadman задал вопрос, вы начали искать интригу. А интриги нет, вы сами должны найти ошибку, а найти ее можно только запустив в работу. 

Smygly
Offline
Зарегистрирован: 19.11.2018

bwn пишет:

Smygly пишет:

 Прямо с порога заявляя, я не запускал, зачем? Никто и никогда не написал программу с первого раза, она пишется, заливается и начинается отлов багов. Иначе никак.

Все верно.  Так  и будет  сделано, но чуть позже, когда  хотя бы логично всё будет.  Я благодарен каждому кто  хотя бы прочитал то, что я тут  пишу.  Но реально сейчас   я  понимаю, что запуск ( всего  механизма)  не даст вообще ничего...будет просто  тишина, а как я пойму ошибки, если я в этом не очень понимаю  и каких-то  сигналов мне наподаст устройство.  Так как это не программа  а ПОКА #кучамала ,  и на это  мне уже  несколько  человек  указали.   Работаю и думаю  дальше и ни разу не думал о лени в заднице.

И вот как раз сейчас занимаюсь этим :)

bwn
Offline
Зарегистрирован: 25.08.2014

Smygly пишет:

Все верно.  Так  и будет  сделано, но чуть позже, когда  хотя бы логично всё будет.  Я благодарен каждому кто  хотя бы прочитал то, что я тут  пишу.  Но реально сейчас   я  понимаю, что запуск ( всего  механизма)  не даст вообще ничего...будет просто  тишина, а как я пойму ошибки, если я в этом не очень понимаю  и каких-то  сигналов мне наподаст устройство.  Так как это не программа  а ПОКА #кучамала ,  и на это  мне уже  несколько  человек  указали.   Работаю и думаю  дальше и ни разу не думал о лени в заднице.

Лень в заднице родилась из неочевидного для вас факта: ЕвгенийП, обычно берет чей-то код, заливает и смотрит как это работает. Какая должна быть его реакция? Лучше извинитесь.
Получить от устройства сигналы очень просто, ставите в ключевых точках вывод в сериал и смотрите как себя ведет программа. В случае сомнений, также через сериал мониторите значения переменных.

Smygly
Offline
Зарегистрирован: 19.11.2018

Перед каждым,  кого  расстроил в этой  ветке искренне  извиняюсь. 

ЕвгенийП , bwn , Sadman41 , Ворота  и другие, если про  кого-то не заметил.

Спасибо  вам  большое за помощь :) И  давайте чуть-чуть  меньше  агрессии, пжл.  Если можно) Я только  учусь

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Smygly пишет:

Я только  учусь

В том-то и дело, что не учишься. а пытаешься всех заставить на себя работать, сам нихера не делая. Тебе это уж тут несколько человек пытаются объяснить.

Smygly
Offline
Зарегистрирован: 19.11.2018

Ворота пишет:

Smygly пишет:

Я только  учусь

В том-то и дело, что не учишься. а пытаешься всех заставить на себя работать, сам нихера не делая. Тебе это уж тут несколько человек пытаются объяснить.

Опять 25ть... вроде проехали уже. 

Да!  я нихрена не умею в этой области! Сразу в первых строках  темы это написал.   Но про  "НЕ УЧИШЬСЯ"  -  ошибка.  и лишний вывод.  Я сегодня  третий раз IDE  открыл  и уже  что-то  попробывал  сделать.  Уверен, что это уже  прогресс.    Откуда  и почему у тебя  столько негатива?  

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Smygly пишет:
Я сегодня  третий раз IDE  открыл  и уже  что-то  попробывал  сделать.  Уверен, что это уже  прогресс.   
Прогресс был бы, если бы ты книжку прочитал. А тыкаться в IDE без малейшего понимания ... 

Smygly пишет:
Откуда  и почему у тебя  столько негатива? 

Такие как ты здесь появляются несколько раз в неделю. Главные тезисы:

1. Я навичёк!
2. Я ни хера не знаю!
3. Изучать мне "некогда"/"не охота"/"зачем на один раз" ... и т.д., вот ты выдал "не вижу смысла"
4. Вы должны мне пабыстрому помочь сделать модуль посадки на Луну, для Вас же это на 5 минут (ну и минет, заодно)
5. Иначе, зачем вообще такой форум?

Знаешь, как задрало уже?

kalapanga
Offline
Зарегистрирован: 23.10.2016

Smygly пишет:

Да!  я нихрена не умею в этой области! Сразу в первых строках  темы это написал.   Но про  "НЕ УЧИШЬСЯ"  -  ошибка.  и лишний вывод.  Я сегодня  третий раз IDE  открыл  и уже  что-то  попробывал  сделать.  Уверен, что это уже  прогресс. Откуда  и почему у тебя  столько негатива?  

Для Вас этот проект пока сложен. Разбивайте на маленькие части - отдельно кнопки, двигатели, энкодеры, прерывания и т.д. Осваивайте всё по частям. Пишите код, запускайте, проверяйте, исправляйте - пока он не заработает так как Вам нужно и в нём не будет понятна каждая строка. А сейчас советы по решению Вашей задачи будут Вам просто не понятны.

p.s. Почитайте форум. Про энкодеры, помню, большая тема была. Да и не одна.