Нужна помощь
- Войдите на сайт для отправки комментариев
Пнд, 06/04/2015 - 21:43
всем привет. новая тема.
вообщем ситуация такая: на аналоговый пин приходят импульсы,
1) нужно посчитать их кол-во и вывести в значение что бы можно было потом в формулу вбить - это сделано!
2) при отсутствие этих самых импульсов что бы значение становилось равным нулю.
с первым пунктом я как то разобрался, сейчас у меня считается кол-во импульсов и замерает когда импульсы перестают поступать, а мне надо что бы при отсутствие импульсов моё значение уходило в ноль.
написал вот такой вот код:
1 |
if (millis() - previousMillis > 5) |
2 |
{ |
3 |
previousMillis = millis(); |
4 |
if (analogRead(SPEED_PIN) == 1) |
5 |
{speed_1;} |
6 |
else if (analogRead(SPEED_PIN) == 1) |
7 |
{speed_1 = 0;}} |
надеюсь на Вашу помощь.
код мой не делает speed_1 = 0 :(
speed_1 - это и есть количество импульсов
уже спросил же - это обработка сигналов датчика скорости ( он же датчик Холла ) ?
на стоячей машине сигнал SPEED_PIN может быть и 0 , и 1 .....
speed_1 = 0; надо делать когда импульсы отсутствуют , а не проверкой положения шторки в датчике Холла
http://arduino.ru/forum/programmirovanie/schetchik-signala#comment-109376
точное определение скорости - это замер длительности импульсов с датчика, это использование счётчиков МК и прерываний - сложнова-то....
сделай блок кода подсчёта импульсов за 200 mS , перед выполнением кода обнули переменную колва импульсов , после выполнения кода будешь иметь - колвоИмпульсовЗа200mS и время 200 mS - из этого получить скорость в км/час , аршинов/мин и др. - просто
SPEED_PIN повесь на пин 2 , в обработчике прерывания делаем приращение колва импульсов ( n++ )
измерять скорость за секунду - для ардуины это почти простой....
нужно оценить/измерить сколько импульсов даёт датчик скорости , нпример на скорости 60 км/час за 100 mS - а потом выбирать оптимальное значение длительности строба измерения скорости
ну на сколько я знаю, импульсы с датчика скорости начинают поступать в тот момент когда начинается движение автомобиля и количество импульсов напрямую зависит от скорости авто. то бишь на аналоговый выход приходит +5в при каждом импульсе. автомобиль остановился +5в падает до 0в и так продолжается до тех пор пока авто не тронится с места.
а вот на счет блока кода на 200 mS - можно поподробнее)))
ну на сколько я знаю, импульсы с датчика скорости начинают поступать в тот момент когда начинается движение автомобиля
да, но с задержкой на угол поворота датчика ( щас это неважно )
и количество импульсов напрямую зависит от скорости авто
нет ! не колво , а скорость их появления или частота ( в ЭБУ используется длительность этих импульсов, что позволяет измерять скорость более чем ...... пусть 1000 раз в секунду )
то бишь на аналоговый выход
не нужен здесь АНАЛОГОВЫЙ вход ( не выход ) !
приходит +5в при каждом импульсе. автомобиль остановился +5в падает до 0в
или до +5в - датчик может выдать или +5 или 0 , нам не ведомо где он остановился :(
и так продолжается до тех пор пока авто не тронится с места.
нет ! смотри выше через строку :)
http://forum.amperka.ru/threads/%D0%BD%D1%83%D0%B6%D0%BD%D0%B0-%D0%BF%D0...
а вот на счет блока кода на 200 mS - можно поподробнее)))
попозже, ещё рано...
:) - чтобы сообщение было корочеееееее
...пусть сам поймёт и напишет сам :)
нашел в инете, кол-во импульсов за 60 мсек = текущей скорости. как это можно кодом выразить?
у меня уже 2 часа ночи, башка уже кипит и не варит ничего))))
ладно, писать буду уже завтра, вернее сегодня только днём)))
напрямую !
1И за 60 mS = 1 км/час
78И за 60 mS = 78 км/час
.............
280И за 60 mS = 280 км/час :)
но это с учётом что тырнет говорит про вашу машинку !
может быть у автопроизводителей есть стандарт ? независимо от КПП, главного дифференциала и др. - всё равно на выходе такая пропорциональность ? надо будет поизучать....
на этот счет думаю подойдет умножение на n-коофицент который по умолчанию сделаю равным 1, и потом можно будет кооректировать уже скорость этим коофицентом.
это я понял на счет 1и за 60 ms= 1 км/ч, 78и за 60 ms = 78 км/ч. буду думать как код писать. от подсказки не откажусь.
у меня есть импульсы = speed_1.
мне нужно значение speed_1 за 60 ms))))
что то типо такого:
и ещё такой вопрос:
можно ли выставить таймер на чтение порта 940 ms а снизу прописать delay(1000)??
т.е. получается будет считываться порт 60 ms в секунду, потом это значение вывести как то в число.
либо импульсы "speed_1" так же на них ввести таймер 940 ms и прописать delay(1000) и полученной величиной и будет моя скорость.
так можно?
написал вот такой вод код: значение показывает всегда ноль, где ошибка?
сам же написал
else
{(speed1 < 1); speed1 = 0;
ну, 0<1 значит скорость = 0
или я чего то не так понимаю?
щас исправил на >, тоже ноль))) но думаю правильнее был мой вариант)))
else
{(speed1 < 1); speed1 = 0;}
А что это за конструкция такая ? Может я не знаю чего ? Вот это действие (speed1 < 1) оно ЧТО делает в данном месте ?
У вас строки 18-20 полный сюр. Дали нервно курить в сторонке. Ваш speed1 в данном бреде всегда обязан быть нулем.
http://nnm.me/blogs/e-troll/arduino-uno-urok-6-enkoder/ - вот здесь я эту конструкцию кода взял, только переделал под свои имена)))
Нету там такого бреда... Я да же понять не могу чего вы этими строчками хотите сделать. напишите словами - поправим.
убрал 20 строку speed1 стал единицей
помогите.
таймер на считывания цифрового входа я выставил,
encoder_speed = digitalRead(speedPin);
теперь мне нужно посчитать кол-во импульсов за время таймера и оно же будет у меня speed1
таймер равен 60 ms
Без прерываний тут делать нечего.
Чувствую себя алисой в стране чудес.... не смогу помочь, терпения не хватит у меня , извините. А то тут еще клоуны какие то минусы лепят... Кто бы это мог быть...
не знаю кто... ну не я уж точно!
внизу этого таймера поставить delay(1000) , забыл просто)))
если это упростит тебе задачу, нужно так написать:
1 импульс за 60 mS = 1 км/час
78 импульс за 60 mS = 78 км/час
.............
280 импульс за 60 mS = 280 км/час :)
прописал всё как у вас, показываются только целые числа первая строчка 1000 и вторая строчка 60000. дальше не могу дотумкать что писать и исправлять надо.
датчик скорости посажен на пин D2
можете помочь? пожалуйста!
Чувствую себя алисой в стране чудес.... не смогу помочь, терпения не хватит у меня , извините. А то тут еще клоуны какие то минусы лепят... Кто бы это мог быть...
мне просто интересно: минусы ни на что не влияют, баллы какие то только свои видишь. чего расстраиваться?
Lа не, это я так :) Совсем не расстраиваюсь ! Говорю же сказочный лес :) Попытался помочь и понял, что человек не опечатался, а просто не понимает как работает. Это не плохо, просто у меня на такую помощь сейчас сил нет :(
да и забей))
объясняю почему я не понимаю
я раньше нигде программирование не учил и язык C/C++ для меня темным лесом, по крайне мере был. сейчас я хоть что то стал понимать. программировать мне нравится и я хочу в это вникнуть, а функции я понимаю как могу, не всегда правильно и не всегда до конца.
а понимать я начиная полностью только когда мне правильный код дают и я знаю куда его вставить и для чего его использовать - только так можно выучить язык программирования, ну и ещё лазия по просторам интернета, но там уже надо додумывать.
структуру я уже знаю программы, ошибки которые выдаёт прога на компе тоже более или мение понимать стал. куда какие строчки найду куда поставить)))
забыл.... надо
Serial
.print(nSpeed/2)
, потому что attachInterrupt(0,speedInterrupt,CHANGE) - CHANGE.....огромнейшее спасибо. я код не много изменил вывода на дисплей:
Serial
.print(...) не работает. уже несколько раз сталкивался, пока построчно не введёшь, не отобразится на дисплее ничего.
lcd.print(nSpeed/2*1);
зачем умножать что-то на 1 ? почему не делить на 1 ? почему не прибавить или не отнять 0 ?
в Мониторе проверьте-выберите скорость как в коде
вставляйте крайнюю свёрнутую версию кода....
а на 1 - это коофицент. проверю скорость и если будет всё правильно показывать то убиру умножить на 1))))
при нажатие на кнопку, когда должен высветиться второй экран у меня вместо него загарается диод на плате "ТХ" и мегает, при этом на экране первая программа, ещё одно нажатие переходит на третий экран... вот так вот, я уже привык, буду так. только не удобно иногда так иногда, символы с пред. экрана остаются)))
если вбиваешь перед вторым экранов lcd.clear();, то экран вообще чистый на второй программе, а если его вбить перед кодом, то экран моргает
код-то дай !
....lcd.clear() применяй перед выводом, если новая строка короче - она затрёт часть старой, а хвост от старой строки останется
вот код, вернее его часть))) при таком коде второй экран мелькает.
пытался ставить так:
боишься за противоправное использование твоего кода ? :)
дай ВЕСЬ код ! обсуждение и вопросы - по номерам строк....
да нет, он в открыом пользовании, я когда избавился от дребезга программно код написал - может кто то будет искать или...
вот весь код:
ну со скоростью вроде разобрались, остался температурный датчик и что то типо вольтметра только на уровень бака в литрах. там у меня на машине соответствие напряжения к литрам))) ну и сам вольтметр))) остальное будут формулы))))
каша :( , зачем за всё сразу взялись ?
обрисуйте сначала задачи - обработка кнопки для смены отображения на дисплее , замер скорости , вывод трёх экранов - потом дальше пойдёте :)
...а функции объявляются отдельно ( не в лупе, не в сетапе )
щас поломаю вам код :)
для Вас может быть и каша, а для меня на первое время удобно))) каждому экрану соответсвует своя функция - главное что бы нормально работало)))
ты мне дай код который нужно вствить, а я уже сам посмтрю куда его вставлять)))
или вставляй, я потом посмотрю как он должен стоять и потом решу куда его вставлять)))
фигВам ! я не хочу ковыряться в каше :(
тибе решать как применять мои каракули :)-
...ещё минут через 10
ВОПРОС: можно ли подать напряжение на аналоговый вход от 0 до 6 вольт и что бы это показывалось на экране? интересут не код программы а именно возможность работы платы Ardruino Nano v3 обработки такого низкого напряжения?
фигВам ! я не хочу ковыряться в каше :(
тибе решать как применять мои каракули :)-
...ещё минут через 10
ок))))