помогите новичку
- Войдите на сайт для отправки комментариев
Всем доброй ночи. Помогите пожалуйста с написание скетча. У меня в машине стоят электростеклоподъемники, хочу с помощью ардуинки реализовать доводчики стекл. Для этого приобрел вот такие датчики : http://www.ebay.com/itm/1pcs-30A-range-Current-Sensor-Module-ACS712-Modu... . Немного поэксперементировал, вроде работают. Я очень не силен в програмировании и надеюсь на Вашу помощь. Программа должна выглядеть так: при длительном нажатии кнопки- нечего не происходит, при кратковременном нажатии(менее 500мсек) поступает команда - пауза(500мсек для старта двигателя) и за тем команда на поднятие стекла и не прерывается пока датчик тока не превысит заданное значение. Интересует строчка с продолжительностью нажатия кнопки и как заставить ардуинку не выполнять следущую строку, пока не "поднимет стекло". Зарание спасибо!
Немнего неправильно написал: поступает команда на поднятие стекла, затем пауза и после этого проверка на превышение силы тока
Заводите переменную состояния. Каждому из последовательных действий приписываете номер, который будет храниться в этой переменной. При каждом состоянии производите только те действия, которые соответствуют именно этому состоянию или переходу в следующее состояние.
Спасибо что откликнулись. А можно небольшой пример, что бы понагляднее? И каким образом отсчитывать время нажатия кнопки?
Примерно так:
- исходное состояние 0 - ждем нажатия на кнопку,
- дождались нажатия на кнопку, запоминаем время, переходим в состояние 1,
- состояние 1 - ждем отпускания кнопки,
- когда дождались, выясняем, коротким бьыло нажатие или длинным. Если длинным, по условию - ничего не делаем, переходим в состояние 0, если коротким - запоминаем время ипереходим в состояние 2,
- состояние 2 - пауза, ждем 500 мс по окорнчании переходим в состояние 3, для чего запускаем двигатель,
- состояние 3 - подъем стекла, ждем срабатывание концевика,
- дождались срабатывания корнцевика - выключаем двигатель и переходим в состояние 0 (или в стостояние 4, если для поднятого и для опущенного стекла по нашей логике предусмотрены различные состояния).
Народ не пинайте если обсуждалось. Как сделать термостат на ардуино нано? Нужен скетч. Перерыл весь интернет, но так и не нашёл. Хочу сделать на DHT11+LCD1602+arduino nano+реле.
Имею вот такой скетч:
#include "DHT.h" #include <LiquidCrystal.h> #define DHTPIN 8 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // красивая "загрузка" программы при старте :) lcd.begin(16, 2); lcd.print("Loading"); delay(500); // ждем 0.5 секунды lcd.print("."); delay(500); // ждем 0.5 секунды lcd.print("."); delay(500); // ждем 0.5 секунды lcd.print("."); delay(1000); // ждем 1 секунду lcd.clear(); //очистка экрана } void loop() { delay(1000); //wait a sec (recommended for DHT11) float h = dht.readHumidity(); float t = dht.readTemperature(); if (isnan(t) || isnan(h)) { Serial.println("Failed to read from DHT"); } else { lcd.setCursor(0,0); lcd.print("Temp "); lcd.print(t); lcd.print("C"); lcd.setCursor(0,1); lcd.print("Humidity "); lcd.print(h); lcd.print("% "); delay(2000); } }надо чтоб реле срабатывало при определённой температуре.
Вариантов всего 2:
1. Делаете сами.
2. Размещаете тему в "Ищу исполнителя", где Вам все сделают за соответствующую оплату.
Вариантов всего 2:
1. Делаете сами.
2. Размещаете тему в "Ищу исполнителя", где Вам все сделают за соответствующую оплату.
1. Сам не могу, знаний маловато.
2. За соответствующую плату можно купить готовый прибор и париться. Но я хотел сам разобраться, но подсказать и обьяснить не кому.
Вариантов всего 2:
1. Делаете сами.
2. Размещаете тему в "Ищу исполнителя", где Вам все сделают за соответствующую оплату.
1. Сам не могу, знаний маловато.
2. За соответствующую плату можно купить готовый прибор и париться. Но я хотел сам разобраться, но подсказать и обьяснить не кому.
А в чем проблема-то? У вас есть переменая t. Вам нужно выполнить некоторое действие, в зависимости от диапазона, в котором находится переменная в данный момент.
Что именно у вас не получается?
Вариантов всего 2:
1. Делаете сами.
2. Размещаете тему в "Ищу исполнителя", где Вам все сделают за соответствующую оплату.
1. Сам не могу, знаний маловато.
2. За соответствующую плату можно купить готовый прибор и париться. Но я хотел сам разобраться, но подсказать и обьяснить не кому.
А в чем проблема-то? У вас есть переменая t. Вам нужно выполнить некоторое действие, в зависимости от диапазона, в котором находится переменная в данный момент.
Что именно у вас не получается?
читай п.1.
1. Сам не могу, знаний маловато.
2. За соответствующую плату можно купить готовый прибор и париться. Но я хотел сам разобраться, но подсказать и обьяснить не кому.
А купить готовый прибор по-любому выйдет дешевле.
Хотя бы потому, что самостоятельное изготовление требует определенных навыков и оборудования, которое стоит денег.
В основном люди занимаются Ардуино ради хобби (что по определению - затраты, но не выгода). Иногдаделают то, что купить принципиально невозможно.
Но если Вы пришли просить помощи, то имейте в виду, помогаю НАУЧИТЬСЯ что-то сделать, но никак не СЭКОНОМИТЬ на чем-то.
Если хотите учиться, попытайтесь сами что-то сделать, а потом обращайтесь с конкретными вопросами. Если учиться не хотите - покупайте то, что нужно, это будет дешевле.
А купить готовый прибор по-любому выйдет дешевле.
Хотя бы потому, что самостоятельное изготовление требует определенных навыков и оборудования, которое стоит денег.
В основном люди занимаются Ардуино ради хобби (что по определению - затраты, но не выгода). Иногдаделают то, что купить принципиально невозможно.
Но если Вы пришли просить помощи, то имейте в виду, помогаю НАУЧИТЬСЯ что-то сделать, но никак не СЭКОНОМИТЬ на чем-то.
Если хотите учиться, попытайтесь сами что-то сделать, а потом обращайтесь с конкретными вопросами. Если учиться не хотите - покупайте то, что нужно, это будет дешевле.
Готовый термостат для гроубокса стоит куда дороже чем я купил ардуино. У меня вышло (нано+LCD+DHT+реле) 480р. Навыки у меня есть, но только не в праграмировании. Я инженер-электроник, то есть шарю в железе, а не в си.
Я занялся ардуино не из-за хобби, а из-за нужды сделать что то дешёвое и полезное.
Если есть возможность сикономить (сделать самому) то почему бы и нет.
Короче всё понятно. Закрываю тему.
Видите ли, mcboris, если адекватно оценивать трудозатраты (если мы не говорим о хобби, для которого понятие "трудозатраты" неприменимо), то скетч стоит намного дороже аппаратной части Ардуино+датчики.
Собственно, это общая тенденция: произведенное к настоящему времени и используемое программное обеспечение стоит существенно дороже, чем все компьютеры (аппаратура) вместе взятые.
Так что в своих расчетах Вы учитываете лишь часть стоимости, притом часть совершенно незначительную.
Извените за глупый вопрос, но не могу понять. Начал писать скетч, первые строки выглядят так:
Это не Ардуино, это - Си.
Все, что написано - переменные. А каков физический смысл конкретной переменной - определяет программа. В одну переменную записан номер пина, подключенный к кнопке, а в другую - "состояние вод".
НИкто не запрещает для номера пина использовать не переменную, а константу, но выглядеть это будет по-другому:
#define butVH 3
а если я там напишу х=1 или х=2 как программа это поймет( посчитает что это значение или номер контакта)?
Запись x=1 будет означать, что переменной х присвоено значение 1. Всё, других вариантов нет. Дальше вы сами подставляете эту переменную в нужно место. Сама по себе переменная ничего не делает, она только хранит значение.
P.S. Не существует такой самостоятельной сущности как "номер контакта". Значение номера контакта (или имя переменной, которая содержит это значение) указывается в какой-либо функции, например pinMode(), digitalWrite().
Понятно. Спасибо
Народ не пинайте если обсуждалось. Как сделать термостат на ардуино нано? Нужен скетч. Перерыл весь интернет, но так и не нашёл. Хочу сделать на DHT11+LCD1602+arduino nano+реле.
надо чтоб реле срабатывало при определённой температуре.
Не хватайтесь за все сразу, рук не хватит.
Чтобы в общих чертах понять, что к чему, скачиваем Уилли Соммер "Программирование......." и играемся с примерами. Попробовав все примеры и набрав их своими ручками, уже примерно представляем синтаксис языка. Дальше все проще.
Берем нану, берем дисплей. Соединяем согласно схеме. Берем библиотеку для дисплея (надеюсь IDE уже установлено), открываем пример и учимся выводить данные в т.ч. переменные на дисплей. Постигнув истину, подключаем DHT и "Берем библиотеку для DHT..... Только в итоге, уже зная как выводить переменные на дисплей, модифицируем пример DHT для вывода на LCD.
Ура, мы умеем получать данные с датчика и выводить их значение на дисплей. Теперь изучаем оператор IF и вспоминает как включали диод. Если реле твердотельное, то этого достаточно, если обычное, ищем схему подключения реле к Ардуино.
Термостат в колхозном исполнении готов.
Только начните писать сами, а не рыскать по просторам интернета за вашим скетчем. Будет что то не получаться, обращайтесь с конкретикой. Как то так.
Немного упростил скетч. Будет ли работать? или что то надо править?
Будет ли работать?
Немного упростил скетч. Будет ли работать? или что то надо править?
Не забывайте инициализировать пины на вход/выход.
В ардуино то залить не долго. сначала схему спаять надо и в машину все это запихнуть. просто если накасячил неохото без машины долго оставаться))
В ардуино то залить не долго. сначала схему спаять надо и в машину все это запихнуть. просто если накасячил неохото без машины долго оставаться))
А чуда не будет. Залить в Ардуино скетч придется не один раз. Подумать, исправить и еще раз залить. И так не менее сотни раз. См. ответ 18, другого пути нет.
Не торопитесь ничего в машину запихивать. Пусть "на столе" сначала заработает.
в том то и проблема что кнопка установлена в машину и датчик тока будет врезаться в цепь стеклоподъемника, без машины некак. просто правильно ли я написал алгоритм? а настройка конечно будет на месте
Вариант один - собрать из подручных средств "эмулятор машины", в котором присутствовали бы важные для Вас элементы. А когда программа будет отлажена - только после этого переходить к испытаниям на натуре (и.е. машине). И то, вероятнее всего, одной перепрошивкой Вы не обойдетесь, просто на реальном устройстве сократите количество перепрошивок с 100 до 5-10.
в том то и проблема что кнопка установлена в машину и датчик тока будет врезаться в цепь стеклоподъемника, без машины некак. просто правильно ли я написал алгоритм? а настройка конечно будет на месте
Вспомнил первый опыт прикладного программирования. Конец 80-х, СССР еще жив, институт молодых специалистов существует (для тех кто из тамошнего времени) а я работаю на стал.плав. печи и начал изучать Фортран. Терминал от ЕС-ки на столе стоит, но программ нет, только х.а. передается. Расчет нержавеющих марок стали ведется логарифмической линейкой, методом простых иттераций, достает жутко, а счет идет на минуты.
И вот два молодых специалиста с начатками программирования решают себе задачу упростить. Каждый пишет программу сам, алгоритмы железные, а печь уже работает и попробовать результат жутко хочется. Напарник написал раньше, успели протестить, не верно((((. Я чуть запоздал, но на первом тесте показал верный результат, УРА, используем!!!!
Получаем анализ, рассчитываем, отдаем ферросплавы, ждем. Жопас. 16 тонн в переплавку, ОГМЕТ по полу катается от причины, а я вывод делаю: Какой бы алгоритм не казался супержелезным, его всегда можно испоганить в процессе программирования, и пока не отладишь, дальше стола не пускать. От, на лирику потянуло.
Спасибо за лирику (*смахнул скупую слезу). Я вдруг понял, что напрочь позабыл Фортран... (да и хрен с ним, мва-ха-ха)
просто правильно ли я написал алгоритм?
Какая команда в вашем алгоритме выключает стеклоподъемник?
analogWrite(V,255);} // поднятие стекла
выключает стеклоподъемник?
analogWrite(V,255);} // поднятие стекла
Ок.
А какая включает ?
на 3 выход ардуинки подается напряжение и дальше на транзистор. я же выше написал строчку, или что то не так?
на 3 выход ардуинки подается напряжение и дальше на транзистор. я же выше написал строчку, или что то не так?
Для включения и выключения используется или две разных команды или одна команда, но с разными параметрами. Не наблюдаю у Вас ни первого ни второго.
После выполнения команды
на третьем выходе Ардуины появиться +5V и будет оставаться, пока какая-нибудь другая команда не изменит это состояние. Повторное выполнение этой команды состояние выхода не изменит.
Которая при V равном нулю эквивалентна
Допустим в какой-то момент эта команда выполнится (она помещена внутрь двух условных операторов, не будем сейчас обсуждать наступят ли условия необходимые для ее выполнения).
После выполнения этой команды на нулевом выходе Ардуино появится напряжение +5V. Состояние других выходов не изменится. Т.е. если на третьем выходе было +5V, то так и останется +5V.
Вы уверены, что появление напряжения на нулевом выходе приведет к закрытию транзистора и выключению стеклоподъемника?
большое спасибо за разъеснения!!! именно такая помощь мне и нужна была, чуть позже исправлю
Спасибо за лирику (*смахнул скупую слезу). Я вдруг понял, что напрочь позабыл Фортран... (да и хрен с ним, мва-ха-ха)
Ну, что Вы?!? Ну. как можно!
"Самый простой способ определить, кто является настоящим программистом - по используемому языку программирования. Настоящие программисты используют Фортран".
Впрочем верно и то, что: "настоящий программист может написать фортрановскую программу на любом языке".
Например, слабо С++ шную константу изменить? На фортране-то констаны меняются легко, а вот здесь ... но для настоящего программиста это не проблема! :)
http://www.lib.ru/ANEKDOTY/non_pas.txt
Например, слабо С++ шную константу изменить? На фортране-то констаны меняются легко, а вот здесь ... но для настоящего программиста это не проблема! :)
http://www.lib.ru/ANEKDOTY/non_pas.txt
Покажите, как Вы меняете фортрановские константы:
integer, parameter :: n = 5
Как сделать n равной 3?
В фортране можно поменять константу (например, 2 - чтобы была равна 10). На каком именно компиляторе Вам это показать?
Общий принцип там такой - в честном фортране:
1) числовая константа заводится в памяти один раз и везде, где она нужна, она берётся из того места по адресу.
2) параметры функции передаются всегда по ссылке
3) это значит, что если функции передать в качестве параметра константу 2, а в теле функции параметру присвоить 10 - поменяется сама константа. И впредь, везде, где я пишу 2 - будет реально 10.
Так было в IBM/370. Потом я испытывал это на каком-то компиляторе для IBM PC - тоже работало.
Если Вы знаете интересующий Вас компилятор - дайте ссылку, где скачать, я попробую.
-------------
Гораздо труднее поменять значение константы в С++. Поменять прямо значение 2 на 10 (как в фортране) не получится. Но изменить значение константы описанной как
const int a = <значение>;
Я смотрю тема все глубже и глубже))) Может быть тогда мне подскажите в еще одной моей затее: есть такая штука StarLine М32, это что то вроде gsm приставки для сигнализации, у неё есть выход(sl-data) по которому она может давать команды полноценной сигнализации (у меня установлена другая, а нужная стоит не очень гуманно). Вопрос: как можно прочитать эти команды. На выходе хочу получить gsm сигнализацию(М32) + ардуино (сигналка управляется с телефона, а ардуинка управляется сигналкой). Может какая библиотека поможет?
В фортране можно поменять константу (например, 2 - чтобы была равна 10). На каком именно компиляторе Вам это показать?
Известный эффект FORTRAN IV для IBM-360/370.
1. В современном фортране можно передавать параметры не только по ссылке, но и по значению.
2. Лично я при передаче константы по ссылке создал бы копию константы в стеке и ее адрес передал в подпрограмму. Другими словами, проблема не фундаментальная, а связанная с сомнительным способом экономии памяти, применанном в одном конкретном (хотя и широко распространенном) компиляторе.
Лично я пользуюсь Digital Visual Fortran, которому уже больше 10 лет (главная заповедь программиста - ксли работает, ничего не трогай!). Собственно, уже из синтаксиса описания константы в моем предыдущем посту было понятно, что на FORTRAN IV это не заработает.
Вероятно, у меня наблюдается полная атрофия любопытства, но мне это не интересно. Впрочем, можете проказать, если это доставит Вам удовольствие.
Нет, не доставит. Без ажиотажа публики, холивара и срача - какое ж нафиг удовольствие? :))))))))))