Работа с датчиками и реле, вопросы

Ученик
Offline
Зарегистрирован: 19.09.2018

Здравствуйте.

Необходимо изучить программирование устройства ардуино.
Современного опыта програмирования нет (совсем), но лет 30 назад писал на Бейсике игрушку для Агата.
Основой был оператор Если - - > То, то есть если нажата клавиша такая-то, ТО происходит переход на блок такой-то.

Можнот и здесь так же, список операторов я скачал, там есть IF... ELSE и даже GOTO, но 30 лет назад в Бейсике были номера строк, и я писал так - ЕСЛИ нажата клавиша стрелка вверх ТО GОТО на номер строки допустим 1200, а там описание что нарисовать.
ЕСЛИ ничего не нажато, ТО GОТО на блок 1400, где включена рандомная функция выстрела пушки например.

А тут... нет номеров строк frown.gif
Не понимаю, как организовать структуры ЕСЛИ ТО, когда их много.

А именно, к 4 входам нужно подключить несколько датчиков, по их срабатыванию на 6 выходах должны появляться сигналы (для примера тупо включаться реле, а дальше будет происходить нечто, включаемое этим реле)
(Можно подумать, а нафига тогда контроллер - можно датчики прямо на реле..... - нет, во-первых, если сработал один датчик - надо включить ТАЙМЕР таймаута. Во время таймаута другие датчики игнорируются. ТОЛЬКО ПОСЛЕ срабатывания первого датчика устройство должно начать опрашивать 4-й датчик в течение 50 секунд, иначе он просто игнорируется. И так далее)

Т.е. логическая схема тестового скажем так задания такова:
- ожидание срабатывания датчика 1, 2, 3
- при срабатывании любого из них а) включается таймер на 50 сек и игнорируются другие датчики, кроме 4; б) включается реле 1 (если сработал датчик 1); в) включается ожидание состояния датчика 4. По его нажатии включается реле 2 на 10 секунд, если он не нажат - по окончании таймера 50 сек устройство возвращается в исходное. Реле 1 отключается по истечении 50 сек.
(для 2 и 3 датчика - соответственно 3, 4, 5, 6 реле)

Подскажите, как организовать переходы разных блоков по "Если-То"

Kakmyc
Offline
Зарегистрирован: 15.01.2018

В корне неверное решение, но хозяин барин.
Про goto стать здесь
http://arduino.ru/Reference/Goto

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Найти книшку Кернигана и Ритчи, сделать её настольной. 

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

Почитайте про конечные автоматы (поиском по форуму)

Ученик
Offline
Зарегистрирован: 19.09.2018

Kakmyc пишет:
В корне неверное решение, но хозяин барин. Про goto стать здесь http://arduino.ru/Reference/Goto

Спасибо. Пока что надо сделать и так сказать сдать тест.

Но потом думать - а почему неверно и как лучше.

А почему неверно?

Ученик
Offline
Зарегистрирован: 19.09.2018

sadman41 пишет:

Почитайте про конечные автоматы (поиском по форуму)

Я тут нашел тему про 3 кнопки и 3 светодиода. ("работа с кнопками")

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

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

Ученик пишет:

Я тут нашел тему про 3 кнопки и 3 светодиода. ("работа с кнопками")

Ну вот, к примеру: http://arduino.ru/forum/programmirovanie/pomogite-so-sketchem-dlya-arduino-nano-pozhaluista#comment-345062

В каждом step-е делаете одну операцию, потом переходите к другому. Шаг за шагом продвигаетесь по алгоритму.

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

Ученик, нужно вместь конструкций <ЕСЛИ ТО идти_туда-то> использовать <ЕСЛИ ТО сделать_то-то>.

Ученик
Offline
Зарегистрирован: 19.09.2018

Я пытаюсь сопоставить названиям функций - их смысл.

Если / то смысл понятен, гоу ту - смысл понятен, а вот Loop смысл пока не понятен.

На первый взгляд - это цикл. Но... почему я выше написал - пользовался когда-то переходами гоу ту.

Причина: я написал один цикл, второй цикл, третий... десятый цикл. Они должны выполняться не подряд, а по некому условию.

Тогда если в течение выполнения 1 цикла вдруг это условие выполнено (нажата кнопка в данном сегодняшщнем случае), начинает выполняться второй цикл, а если нажата кнопка, которая должна "прослушиваться" только во втором цикле - идет переход на выполнение третьего цикла.

За книгу спасибо, но так как-то... не просто материал подан.

Мне интереснее описание смысла на русском языке - например "int" - это а) написание некой переменной и б) тут же присвоение этой переменной целого значения.

И так по другим операторам.

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

Как делать иначе, я тупо не понимаю...

Картинка-пример:

http://post-art.org/foto/2018/bloksh.jpg

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ну так в С другая парадигма программирования, блочная, а не бессмысленные метания по коду с помощью GOTO.  Привык к goto, осваивай тогда ассемблер, он почти полностью состоит из проверок условий и условных переходов по коду. 

Ученик
Offline
Зарегистрирован: 19.09.2018

Порылся еще по форуму...

Если взять за основу работу одна кнопка- одно реле готовый текст с форума вот этот

http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku?page=13#comment-340418

то как туда вставить ожидание В ТЕЧЕНИЕ ЭТИХ 50 сек нажатия второй кнопки и срабатывания второго реле?

Причем второе реле должно срабатывать ТОЛЬКО, если включено первое.

Можно сделать вот так?

Что-то мне интуиция подсказывает, что нельзя... а почему?

 

01









01  #define BUTTON2_PIN 2
02  #define RELAY2_PIN 3
03  #define BUTTON3_PIN 4
04  #define RELAY3_PIN 5
05  boolean blStatus2 = true;      //логический флаг предыдущего состояния реле 1 включено/выключено. По умолчанию при старте программы выключено
06  boolean blStatus3 = true;      //логический флаг предыдущего состояния реле 2 включено/выключено. По умолчанию при старте программы выключено
07  void setup() {
08    // инициализируем подключения
09    pinMode(BUTTON2_PIN, INPUT);     //задаем пин 2 как вход кнопки
10    pinMode(RELAY2_PIN, OUTPUT);     //задаем пин 3 как выход на реле 1
11    pinMode(BUTTON2_PIN, INPUT);     //задаем пин 4 как вход кнопки
12    pinMode(RELAY2_PIN, OUTPUT);     //задаем пин 5 как выход на реле 2
13  }
14  void loop() {
15  if (digitalRead(BUTTON2_PIN)==HIGH){  //если кнопка нажата 
16   blStatus2 = !blStatus2;        // инвертируем значение
17   digitalWrite(RELAY2_PIN, blStatus2); // пишем инвертированное значение в порт
13   delay (50000);  // время работы реле - 50 секунд

15     if (digitalRead(BUTTON3_PIN)==HIGH){ //если кнопка нажата
16     blStatus3 = !blStatus3; // инвертируем значение
17    digitalWrite(RELAY3_PIN, blStatus2); // пишем инвертированное значение в порт
13    delay (1000); // время работы реле - 1 секунда

 14   } 

15 }

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

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

Ученик, я думаю, Вам следует начать с начала.

1. Ознакомиться с теорией: Керниган, Ритчи, Язык программирования Си.

2. Начать осваивать это на практике: Для начала посмотреть и запустить "blink". Затем посмотреть и запустить "blink without delay". Сравнить, как одна и та же задача решается разными способами, правильный - второй. 

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

Согласен с andriano, если считаете К&Р слишком академичным, попробуйте это или скачайте какой-нибудь ардуино для чайников, позабивайте ручками примеры (привыкнете к синтаксису), разберитесь как они работают, а там и прояснение потихоньку наступит.
Здесь блинк без делеев поинтереснее описан(другие статьи тоже почитайте), но без выполнения первого пункта бесполезен. ИМХО.

Ученик
Offline
Зарегистрирован: 19.09.2018

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

*/

// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for a 0,5 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for a 0,5 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);                       // wait for a 0,5 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for a 0,5 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(50);                       // wait for a 0,05 second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(500);                       // wait for a 0,5 second
}

 

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

Ученик пишет:

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

Вы сперва почитайте, что вам дали, а потом начинайте свои размышлизмы.

Ученик
Offline
Зарегистрирован: 19.09.2018

Загнал программу из

http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...

а она работает не так, как описано.

Описано - по нажатию кнопки пин 2 включается на 5 сек реле пин 3.

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

Или там текст насчет кнопки относился к другому коду?

Ученик
Offline
Зарегистрирован: 19.09.2018

bwn пишет:

Здесь блинк без делеев поинтереснее описан(другие статьи тоже почитайте), но без выполнения первого пункта бесполезен. ИМХО.

Нет не поинтереснее.

Непонятнее.

Для новичка лезть еще и БИБЛИОТЕКИ изучать - вообще голову сломать.

Я ведь не за красотой года гонюсь, а тут именно за красотой кода гонятся.

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

Иначе в ближайшее время я разумеется делать не буду.

А вот через 2 года, когда стану гуру, тогда меня начнет интересовать красота кода.

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

я так понимаю, чукча не читатель?  Тогда вряд ли ему что-то можно абъяснить.  Аревуар. 

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

Ученик пишет:

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

Про GOTO откуда узнали - из бейсика?  Select Case помните оттуда-же?

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

Ученик пишет:

bwn пишет:

Здесь блинк без делеев поинтереснее описан(другие статьи тоже почитайте), но без выполнения первого пункта бесполезен. ИМХО.

Нет не поинтереснее.

Непонятнее.

Для новичка лезть еще и БИБЛИОТЕКИ изучать - вообще голову сломать.

Я ведь не за красотой года гонюсь, а тут именно за красотой кода гонятся.

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

Иначе в ближайшее время я разумеется делать не буду.

А вот через 2 года, когда стану гуру, тогда меня начнет интересовать красота кода.

но без выполнения первого пункта бесполезен. ИМХО.

Да, и там же ссылка на предыдущую статью без библиотек. Но вам похоже виднее.((((

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

Ученик пишет:

А вот через 2 года, когда стану гуру, тогда меня начнет интересовать красота кода.

Оптимист.

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

Ученик пишет:

Загнал программу из

http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-no...

а она работает не так, как описано.

Описано - по нажатию кнопки пин 2 включается на 5 сек реле пин 3.

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

Или там текст насчет кнопки относился к другому коду?

Ну а кнопка то как подключена? Т.к. фрагмент аж из 664 сообщения, подозреваю, что нихрена вы там не читали.

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

Ученик пишет:

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

Иначе в ближайшее время я разумеется делать не буду.

Чтобы было наглядно понятно - надо взять ЛЮБУЮ серьезную книгу по Си и прочитать ее хотя бы до середины. Иначе в ближайшее время вы вообще ничего не сделаете, и через два года будете там же, где сегодня.

Ученик
Offline
Зарегистрирован: 19.09.2018

Кнопка подключена так: пин через 7,5 кОм на корпус, кнопка подключает пин через 300 Ом к +5.

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

Выход: к пину светодиод плюсом, второй контакт светодиода через 510 ом к GND.

 

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

да пофиг, он же умеет GOTO да GOSUB-ами крутить да размахивать.  Авось да выйдет чо. 

Ученик
Offline
Зарегистрирован: 19.09.2018

b707 пишет:

Чтобы было наглядно понятно - надо взять ЛЮБУЮ серьезную книгу по Си и прочитать ее хотя бы до середины. 

Согласен, что это правильный подход.

Но у меня задача другая, к среде (через полнедели) надо сдать готовую программу, которая описана в 1 посте.

Написал ли ее я сам или стырил с сайта/форума/знакомый написал, никого не интересует.

Т.е. в идеале я беру какую-то похожую и дополняю ее парой операторов - вставляю таймаут например.

А так да, надо засесть за учебники и лет через пять я что-нибуль напишу сам...

(В скобках. Не раньше потому, что опыт с Бейсиком 30 лет назад первый и последний - у меня образное мышление, я думаю картинками, а программирование честно говоря требует другого типа мышления, какого-то математического. Так что один раз попробовал и бросил.)

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

Ученик пишет:

Но у меня задача другая, к среде (через полнедели) надо сдать готовую программу, которая описана в 1 посте.

в таком случае в платный раздел

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

Ну так зайдите в ищу исполнителя и закажите скифу за доширак, зачем мозги людям парить? Или вы еще и жадный?

Ученик
Offline
Зарегистрирован: 19.09.2018

Для начала надо разобраться в физике.

Может я неправильно все-таки подключил кнопку.

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

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

DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

Ученик пишет:

Но у меня задача другая, к среде (через полнедели) надо сдать готовую программу, которая описана в 1 посте.

Написал ли ее я сам или стырил с сайта/форума/знакомый написал, никого не интересует.

я просто ахудеваю-с, господа. 

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

Ученик пишет:

Но у меня задача другая, к среде (через полнедели) надо сдать готовую программу, которая описана в 1 посте.

Написал ли ее я сам или стырил с сайта/форума/знакомый написал, никого не интересует.

простите, судя по увлечению бейсиком 30 лет назад - вам не менее 45-ти. Нафига "человеку с образным мышлением" на старости лет программирование, да еще на каких-то дебильных (судя по второй цитированной фразе) курсах?

 

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

Ученик пишет:

Но у меня задача другая, к среде (через полнедели) надо сдать готовую программу, которая описана в 1 посте.

Написал ли ее я сам или стырил с сайта/форума/знакомый написал, никого не интересует.

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ученик пишет:

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

Мышление картинками - самое оно, блок-схему алгоритма представить - милое дело. Я вам открою бооольшущий секрет: для того, чтобы программировать - математику знать вовсе не надо: у меня куча знакомых программистов, которые не могут в полярные координаты простейшие, сиречь, в синусы и косинусы - и ничего, программируют. Задачи просто выполняют такие, где не надо математики. Ессно, программировать чего-нибудь, связанное с 3D, или прочими задачами, где нужен серьёзный мат.скилл - они не полезут, но, тем не менее - они программисты.

Так что на самооправдание - не прокатит процитированная фраза, по опыту скажу - точно не прокатит.

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

b707 пишет:

простите, судя по увлечению бейсиком 30 лет назад - вам не менее 45-ти. Нафига "человеку с образным мышлением" на старости лет программирование, да еще на каких-то дебильных (судя по второй цитированной фразе) курсах?

Ща угадаю. В свете пенсионной реформы, программа "вторая молодость", шахтеров, крановщиц и сталеваров переучим на погромистов и финансистов, а че?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

bwn пишет:

Ща угадаю. В свете пенсионной реформы, программа "вторая молодость", шахтеров, крановщиц и сталеваров переучим на погромистов и финансистов, а че?

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

Ученик
Offline
Зарегистрирован: 19.09.2018

[i]В свете пенсионной реформы, программа "вторая молодость", шахтеров, крановщиц и сталеваров переучим на погромистов и финансистов, а че?[/i]

Типа того.

Похоже, пока проблемы с физикой.

Я скачал скретч из 1 поста "Работа с кнопками", подал на вход 0 и... светодиод замерцал.

А должен погаснуть.

Ну тупо если 0 на входе, проргамма в три строки вход=выход, встроенный диод должен не гореть. А он мерцает с высокой частотой, выше 25 гц примерно.

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

Ученик пишет:

Мы уже выяснили, что кроме того, что вы не хотите учиться, вы еще и жадный, а значит с вами неинтересно.
Засим, диалог с вами, заканчиваю.

Ученик
Offline
Зарегистрирован: 19.09.2018

А, кажется догадался.

Шнур длиной до кнопки два метра, кабелем для 220в (0,7 кубика), он тупо дает наводки из воздуха (такие наводки??? кошмар).

Укоротил шнур до полметра и убрал резистор между входом и корпус или 5v с 1 кОм до 200 Ом - стало стабатывать очень четко.

Ну я не дома, это производство, просто не думал, что такое ОГРОМНЫЕ наводки идут.

Это кстати в таких электромагнитных полях может и работать вредно (кошмарный смайлик)

PS Откуда жадный? Сказали бы ленивый - можно так подумать. Почему жадный

Учиться-то буду, но сделать надо "вчера".

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

Конечно вредно - мозги отказываются логически мыслить.

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

DIYMan пишет:

bwn пишет:

Ща угадаю. В свете пенсионной реформы, программа "вторая молодость", шахтеров, крановщиц и сталеваров переучим на погромистов и финансистов, а че?

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

Не удивлюсь, хотя, бред полнейший. Невозможно в 45+ основную массу переучить на что то иное, требующее более высокого уровня мышления. Хотя те, которые будут это решать, судят по себе: "сижу на мегасложной работе, а ведь на нее можно обычную мартышку выучить."((((

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

Обычно путают опыт и знания с (!!) профессиональной деформацией. И чем больше человек работает на одном мечте тем больше профессиональная деформация и меньше знаний и опыта. 

Положь колдобину со стороны загогулины и два раза дергани за пимпочки. Опосля чего долбани плюхалкой по кувыкалке и, кады чвокнет, – отскочь дальшее, прикинься ветошью и не отсвечивай. Потому как она в энто время шмяк тудыть, сюдыть, ёксель-моксель, ёрш твою медь... Пш-ш-ш! – И ждешь пока остынет. Остыло – подымаесся, вздыхаешь. Осторожненько вздыхаешь, про себя, шобы эта быдла не рванула! И бегишь за угол за пол-литрой. Потому как пронесло! (С) Задорнов

Но теперь по теме.Ну не может ТС понять новое и свое забытое старое обучение. Даже если бы на Бейсике писали, точно так же тупил. Если не больше.

Logik
Offline
Зарегистрирован: 05.08.2014

А все потому что картинками думает. Был бы мозг математикой отполирован - умел бы абстрагироватся от незначащих в данный момент подробностей и был бы ему что бейсик, что плюсы.. Это кстати и какбы программистов без математики тоже касается. Не потому что нада помнить все "интригалы", а потому что в процессе их изучения мозги развиваются в правильную сторону. А уж в 45 - позно, старого пса новым трюкам не научиш. Уже пора бежать из IT не оглядываясь, а не заходить эникейщиком.

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Тс чё о тебе там написать то надо ?
За недорого сделаю.
Не как скиф , однозначно, но по пути попытаюсь объяснить и мордой тыкнуть как и что.
Сам на бейсике рулил лет 30 назад.
С Ардуино за год более менее разобрался.
В твои потребности два дня учебника уложатся. Но если тебе лень то , любой каприз за ваши деньги.

Ученик
Offline
Зарегистрирован: 19.09.2018

Написал вот так

int knopka1=0; //переменная состояние кнопки 1 /пока неизвестно что/ 

int state1=0; //запуск функции выхода 1 вкл или выкл
int state2=0; //запуск функции выхода 2 вкл или выкл


int loopStep = 0;

void setup() {
   pinMode(2, INPUT); //кнопка 1
   pinMode(3, INPUT); //кнопка 2

   pinMode(6, OUTPUT); // выход 1
   pinMode(7, OUTPUT); // выход 2

}

void loop() 
{  
  if(digitalRead(2)&&!knopka1) // если кнопка 1 нажата, переменная кнопка1=0
 {
  delay(10); // защита от дребезга
  digitalWrite(6, HIGH); // выход 1 ВКЛ
  state1=1;
 } 
  if(digitalRead(3)&&!knopka1&&state1) // если кнопка 2 нажата, переменная кнопка1=0, реле1 вкл
 {
  delay(10); // защита от дребезга
  digitalWrite(7, HIGH); // выход 2 ВКЛ
 } 
 
}

Эта часть - определение момента включения реле 2 - ТОЛЬКО после того, как уже сработало реле 1.

Отправил на Ардуино, это работает.

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

Написал так

int knopka1=0; //переменная состояние кнопки 1 /пока неизвестно что/ 

int state1=0; //запуск функции выхода 1 вкл или выкл
int state2=0; //запуск функции выхода 2 вкл или выкл


int loopStep = 0;

void setup() {
   pinMode(2, INPUT); //кнопка 1
   pinMode(3, INPUT); //кнопка 2

   pinMode(6, OUTPUT); // выход 1
   pinMode(7, OUTPUT); // выход 2

}

void loop() 
{  
  if(digitalRead(2)&&!knopka1) // если кнопка 1 нажата, переменная кнопка1=0
 {
  delay(10); // защита от дребезга
  digitalWrite(6, HIGH); // выход 1 ВКЛ
  state1=1;
 } 
  if(digitalRead(3)&&!knopka1&&state1) // если кнопка 2 нажата, переменная кнопка1=0, реле1 вкл
 {
  delay(10); // защита от дребезга
  digitalWrite(7, HIGH); // выход 2 ВКЛ
 } 

  loopStep++;
  if(loopStep = 10000) // если цикл окончен, время кончилось
 {
  digitalWrite(6, LOW); // выход 1 ВЫКЛ
  digitalWrite(7, LOW); // выход 2 ВЫКЛ
  state1=0;
 }
 
}

А вот это не работает, более того, вообще перестали срабатывать кнопки (выходы не включают св-диоды)

Где ошибка?

Таймер подсмотрел в книжке Белока листинг Бегущих огней, там указано, что ++ означает увеличение переменной на единицу.

Ученик
Offline
Зарегистрирован: 19.09.2018

Kakmyc пишет:
мордой тыкнуть как и что.

Вот надо мордой тыкнуть, правильно ли я понял, что увеливение численного значения переменной на единицу за итерацию цикла достигается написанием ++. То есть loopStep++;

Или надо loopStep = ... чему? 

И второй момент, написание достижения переменной критического значения, после чего наступает конец цикла - скорее всего там тоже ошибка, неправильно именно if(loopStep = 10000), но как правильно, я пока не уяснил.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Во втором куске кода в строке 33 - ошибка, там оператор присваивания вместо оператора сравнения.

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

Ученик пишет:
Т.е. логическая схема тестового скажем так задания такова:

- ожидание срабатывания датчика 1, 2, 3
- при срабатывании любого из них а) включается таймер на 50 сек и игнорируются другие датчики, кроме 4; б) включается реле 1 (если сработал датчик 1); в) включается ожидание состояния датчика 4. По его нажатии включается реле 2 на 10 секунд, если он не нажат - по окончании таймера 50 сек устройство возвращается в исходное. Реле 1 отключается по истечении 50 сек.
(для 2 и 3 датчика - соответственно 3, 4, 5, 6 реле)

Подскажите, как организовать переходы разных блоков по "Если-То"

Все это решается через конечный автомат.

Ученик
Offline
Зарегистрирован: 19.09.2018

DIYMan пишет:

Во втором куске кода в строке 33 - ошибка, там оператор присваивания вместо оператора сравнения.

Спасибо, написал

 if(loopStep == 10000) // если цикл окончен, время кончилось

Всё равно неправильно - теперь светодиоды по кнопке загораются и через примерно 0,5 сек тухнут вне зависимости от изменения цифры 10000 (что 100, что 1000, что 10000 - время потухания около полсекунды).

Пробовал увеличить - до 35000 те же полсекунды, после 38000 вообще не выключается... в течение минуты, дальше не проверял

А-а-а, сабака страшная, забыл обнулись значение





int knopka1=0; //переменная состояние кнопки 1 /пока неизвестно что/ 
 
int state1=0; //запуск функции выхода 1 вкл или выкл
int state2=0; //запуск функции выхода 2 вкл или выкл
 
 
int loopStep = 0;
 
void setup() {
   pinMode(2, INPUT); //кнопка 1
   pinMode(3, INPUT); //кнопка 2
 
   pinMode(6, OUTPUT); // выход 1
   pinMode(7, OUTPUT); // выход 2
 
}
 
void loop() 
{  
  if(digitalRead(2)&&!knopka1) // если кнопка 1 нажата, переменная кнопка1=0
 {
  delay(10); // защита от дребезга
  digitalWrite(6, HIGH); // выход 1 ВКЛ
  state1=1; // признак включённого реле 1
 } 
  if(digitalRead(3)&&!knopka1&&state1) // если кнопка 2 нажата, переменная кнопка1=0, реле1 вкл
 {
  delay(10); // защита от дребезга
  digitalWrite(7, HIGH); // выход 2 ВКЛ
 } 
 
  loopStep++;
  if(loopStep == 10000) // если цикл окончен, время кончилось
 {
  digitalWrite(6, LOW); // выход 1 ВЫКЛ
  digitalWrite(7, LOW); // выход 2 ВЫКЛ
  state1=0;
  loopStep=0;
 }
  
}

А вот всё равно не работает. Т.е. при любых значениях в 33 строке меньше 35000 после включения выход отключается через менее полсекунды...

Таймер написан неправильно, где-то еще ошибка.

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

Повторно спрошу - select case помните как работает?

Ученик
Offline
Зарегистрирован: 19.09.2018

Нет конечно, я вчера вообще начал первый день читать, что такое урезанный Си. А неурезанного в глаза не видел никогда.

Программу в предыдущем посте насписал конечно не с нуля - это надерганные копи-паст фрагменты текста из форума и особенно описания кнопок в теме Работа с кнопками.

Текст насчет таймера - из книги Белова, пункт Бегущие огни на Ардуино.

Но почитаю сейчас по ключевому слову select case.

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

Как же вы на бейсике писали, если select case не знаете... Сложно вам придется в Си. Тут до датчиков еще с полгода учебы...