Помогите понять основы

Вопросы от новичков
Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#1

Сообщение Yariy80 » 11.02.2020{, 12:52}

Здравствуйте. На текстовых языках программирования пишу. Недавно узнал о FLProg. По обзорам у ребят получается всё просто, наглядно и быстро. Попробовал сам, но не могу сообразить какой то мелочи. Что попадает в Setup, что в Loop, как изменяются переменные. Во всех уроках, первый урок - как зажечь светодиод, второй - как запустить космический корабль на ардуино. Если честно то я даже но понял чего я не понимаю. Помогите разобрать на примерах IDE, как они будут выглядеть в FLProg. Допустим, простая программка, которая заставляет крутится двигатель циклично вправо/влево. Можно управлять запуском/остановкой, скоростью вращения и продолжительностью вращения. Управление происходит через драйвер, путём подачи ШИМ сигнала на "+" двигателя.

Код: Выделить всё

boolean butt_flag=0;
boolean butt;
boolean led13=0;
boolean naprav=0; // направление движения
unsigned long last_press;
unsigned long last_time;
#define potent_pin 1 // потенциометр изменения скорости вращения
#define potent_speed_pin 2  // потенциометр изменения продолжительности вращения в одну сторону
int val; // переменная val отвечает за скорость вращения двигателя
int time_1; // время движения двигателя в одну сторону

void setup() {
  pinMode(A0, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  Serial.begin(9600);
  Serial.println("Запуск ");
  pinMode(9, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
}

void loop() {
  val = analogRead(potent_pin);
  val = map(val, 0, 1023, 150, 255);
  val = constrain(val, 150, 255);
  time_1 = analogRead(potent_speed_pin);
  time_1 = map(time_1, 0, 1023, 0, 150);
  time_1 = constrain(time_1, 0, 150);
  
  if (millis() - last_time >time_1*50) {
    last_time = millis();
    naprav = !naprav;
  }
  butt = !digitalRead(A0);
  if (butt == 1 && butt_flag == 0 && millis() - last_press > 20) {
    butt_flag = 1;
    led13 = !led13;
    digitalWrite(13, led13);
    last_press = millis();
    }
    if (butt == 0 && butt_flag == 1) {
      butt_flag = 0;      
      digitalWrite(5, 0);
      digitalWrite(6, 0);
      digitalWrite(9, 0);
      digitalWrite(3, 0);
    }
    if (led13 == 1) {
//      Serial.println("   ----- Питание подано ----");
      if (naprav == 0) {      
        Serial.println("   Вправо");
        digitalWrite(5, 0);
        digitalWrite(6, 0);
        digitalWrite(9, 1);
        analogWrite(3, val);
      } else {
        Serial.println("   Влево");
      digitalWrite(3, 0);
      digitalWrite(9, 0);
      digitalWrite(6, 1);
      analogWrite(5, val);
      }
    }
}

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Помогите понять основы

#2

Сообщение edyapd » 11.02.2020{, 13:00}

FLProg как раз нужен для того, чтобы не разбираться, что куда попадает.
Если вы знаете С, то это будет плюсом.
Но FLProg будет ближе электронщикам, чем программистам. (моё мнение)
Просто напишите алгоритм, который вы хотели бы реализовать. Постарайтесь что-то из этого сделать сами.
Выложите получившейся проект и тогда уже имеет смысл спрашивать, что вам не понятно.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Помогите понять основы

#3

Сообщение Alias » 11.02.2020{, 13:03}

Flprog позиционируется как средство программирования для непрограммистов, без написания кода как такового. Поэтому абстрагируйтесь от него на время, а чтобы наглядно и все сразу получалось - это Вам сюда:
https://www.youtube.com/channel/UCZ2a-G ... 34vq5ob7Kw
Думаю, многие туда заглядывают, как в справочник.

Отправлено спустя 21 секунду:
Опередили ))

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#4

Сообщение Yariy80 » 11.02.2020{, 13:05}

Спасибо. Буду осваивать.

Аватара пользователя
grin-mpx
Лейтенант
Сообщения: 477
Зарегистрирован: 17.07.2017{, 18:39}
Репутация: 55
Откуда: Днепр. UA
Имя: Григорий

Помогите понять основы

#5

Сообщение grin-mpx » 11.02.2020{, 13:10}

viewtopic.php?f=53&t=2677&p=33162&hilit ... дом#p33162
viewtopic.php?f=54&t=2003&p=22814&hilit=светофор#p22814
Yariy80, скачайте и посмотрите эти примеры. Это элементарное начало, посмотрите блоки, посмотрите генерируемый код в IDE. Все просто, а с знанием С так вообще красота. Мне бы такой вход в FLprog в свое время...

Отправлено спустя 2 минуты 50 секунд:
edyapd писал(а):
11.02.2020{, 13:00}
Но FLProg будет ближе электронщикам, чем программистам.

Это да. Во всяком случае знание электроники сильно помогает в построении логики, триггерных и прочих мультиплексорных комбинаций :yes:

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#6

Сообщение Yariy80 » 12.02.2020{, 19:10}

Как сложно переучиваться, это сложнее чем начинать с нуля. Но, я усложнил для себя задачу )
Завалялся у меня LCD шилд 1602, решил его использовать в обучающем проекте. Как оказалось написать меню на FLProg на много проще чем в IDE. Задача: написать программу для управления двумя двигателями (первый постоянного тока, второй шаговик). Т.к. есть клавиатура, от энкодера и потенциометров отказался. После запуска, программа должна запустить двигатель с определённой скоростью, на определённое время , затем сменить направление, и так по циклу. После Х смен направлений должен включиться шаговый двигатель и сделать Y количество шагов, затем опять несколько смен, несколько шагов и далее по циклу пока количество шагов не будет равно заданному числу, отключение питания двигателей.
С помощью переменных в меню задаются параметры: скорость оборотов двигателя, время вращения в одну сторону, количество смен направлений до первого шага шагового двигателя , количество смен для последующих шагов, количество шагов до остановки.
Начал рисовать проект, но стало казаться что он получается слишком сложным/громоздким. А может это мне так кажется, пока шаговик не стал прикручивать и решил выбросить проект на проверку.
Обучалка.flp
(516.2 КБ) 49 скачиваний
Сразу вопросик, разделение на платы, это просто для удобства визуального восприятия или имеет функциональную нагрузку?

Отправлено спустя 1 минуту 26 секунд:
В ардуино пока не заливал, без проверки страшновато.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Помогите понять основы

#7

Сообщение Alias » 12.02.2020{, 19:31}

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

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#8

Сообщение Yariy80 » 12.02.2020{, 19:39}

Есть ли в FLProg встроенная симуляция работы проекта или только в сторонних программах?

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Помогите понять основы

#9

Сообщение Alias » 12.02.2020{, 19:47}

Этого не предусмотрено, да и в сторонних приложениях - от Лукавого. Лучше реальной железки реальную железку ничего не сэмулирует.
Можно, например, выводить значения/состояния контрольных точек на дисплей или в uart, или сохранять на карту памяти, получив нечто вроде логического анализатора. Причем вплоть до отдельных плат и даже узлов. Поверьте - это очень достоверно и наглядно и даже в сложных проектах этого зачастую вполне достаточно.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Помогите понять основы

#10

Сообщение Ingwar » 12.02.2020{, 20:32}

Alias писал(а):
12.02.2020{, 19:47}
да и в сторонних приложениях - от Лукавого
Позволю не согласиться. Если комп не только для офисных задач, то в большинстве случаев Proteus моделирует адекватно.
Да, в некоторых специфических случаях, возможны отклонения результатов моделирования от реальных, но как вспомогательный инструмент он очень даже хорош.
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Аватара пользователя
Alias
Лейтенант
Сообщения: 481
Зарегистрирован: 27.11.2017{, 13:15}
Репутация: 36
Откуда: Rus44
Имя: Michael
Контактная информация:

Помогите понять основы

#11

Сообщение Alias » 12.02.2020{, 20:44}

Если Вы разработчик и знаете тот же proteus как свои пять пальцев, все имеет смысл. Позволю себе с Вами согласиться. Но новичку осваивать еще и параллельную реальность и умножать ошибки, которые потом просто не понять, какая откуда... Не, лучше все сервисными переменными в порт )))

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#12

Сообщение Yariy80 » 12.02.2020{, 20:55}

Я обычно монитором COM порта пользуюсь для отладки, но иногда было бы удобно не отсоединяя от компа и переподключения питания некоторые мелочи проверять.

Отправлено спустя 2 часа 49 минут 51 секунду:
Пожалуйста, подскажите хоть что-нибудь по моему примеру. Будет ли он работать, правильно ли я начал составлять блоки, понял ли я концепцию графического написания программы? Я хочу учиться, но без обсуждения, опытным путём, это будет не только долго, но и не эффективно. Опыт мудрость дураков... :smile390:

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Помогите понять основы

#13

Сообщение Ingwar » 13.02.2020{, 08:29}

Yariy80 писал(а):
12.02.2020{, 23:45}
Пожалуйста, подскажите хоть что-нибудь по моему примеру.
Yariy80 писал(а):
12.02.2020{, 19:11}
Начал рисовать проект, но стало казаться что он получается слишком сложным/громоздким.
Это совсем не большой проект, скорее наоборот.
Что заметил по примеру:
- плата №3 счетчик перед запуском шаговика посчитает один раз (нет сброса по условию)
- плата №3 блоки дисплея пишут в одно место.
- если переменная Pusk активна на весь период работы, на плате №3 смена направления отработает один раз.
- плата №4 в Вашем варианте реализация реверса не понятна.
А в целом - верной дорогой идете :smile9:
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#14

Сообщение Yariy80 » 13.02.2020{, 12:08}

Благодарю за советы.
Запуск шаговика ещё внимательно не рассматривал, это будет следующим шагом, но сброс счётчика поставил (установив галку "сброс") и дисплеи развёл по строкам.
Переменную "Pusk" включил через триггер.
Смену направления планирую сделать через генератор импульсов. Если я правильно понял как он работает, то должно получиться так:
- в меню устанавливаю "Время движения" в миллисекундах.
- так же в меню, через триггер, включается флаг "Pusk".
- "Pusk" включает мультивибратор, который должен менять флаг "Naprav" через "Время движения".
- на 4 плате два переключателя, которые включаются флагом "Naprav", на втором переключателе флаг конвертирован. Т.е. если "Naprav" = 1 то работает влево, если "Naprav"=0 то работает вправо.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Помогите понять основы

#15

Сообщение Ingwar » 13.02.2020{, 12:40}

Yariy80 писал(а):
13.02.2020{, 12:08}
- "Pusk" включает мультивибратор, который должен менять флаг "Naprav" через "Время движения".
- на 4 плате два переключателя, которые включаются флагом "Naprav", на втором переключателе флаг конвертирован. Т.е. если "Naprav" = 1 то работает влево, если "Naprav"=0 то работает вправо.
Я писал про физическую реализацию. Если двигатель постоянного тока и не используется спец шилд, то нужно будет как минимум несколько ключей для реализации реверса, тем более используя ШИМ. Или пару реле и один ключ, например так.
СпойлерПоказать
Безымянный.png
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#16

Сообщение Yariy80 » 13.02.2020{, 15:28}

Прошу прощения, сразу не сообразил. Вытравил такую вот платку на IRF 3205.
Вложения
Драйвер.jpg

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Помогите понять основы

#17

Сообщение Ingwar » 13.02.2020{, 15:40}

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

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#18

Сообщение Yariy80 » 13.02.2020{, 15:51}

Я даже не знаю, можно ли назвать такую схему мостовой )
Напряжение 12 вольт.

Ingwar
Полковник
Сообщения: 1929
Зарегистрирован: 28.10.2015{, 22:47}
Репутация: 223
Откуда: Ленобласть
Имя: Игорь

Помогите понять основы

#19

Сообщение Ingwar » 13.02.2020{, 15:57}

Плату по дорожкам не смотрел и откинул резисторы по входам.
Идея была такая?
СпойлерПоказать
Безымянный.png
Если да, то не будет 12 вольт на двигателе если ключи открывать напрямую с контроллера. (про ШИМ пока не говорим)
Люди в своем большинстве живо интересуются всем на свете, за исключением того, что действительно стоит знать.

Yariy80
Рядовой
Сообщения: 21
Зарегистрирован: 07.02.2020{, 12:56}
Репутация: 0
Имя: Ярий

Помогите понять основы

#20

Сообщение Yariy80 » 13.02.2020{, 16:04}

Да, идея была такая. И да, двигатель работает слабее чем от прямого подключения 12 вольт.
Если честно, то я не совсем понял почему, из-за внутреннего сопротивления резисторов?

Ответить

Вернуться в «Начинающим»