Определить работу ДВС
- Войдите на сайт для отправки комментариев
Пнд, 17/06/2013 - 21:18
Запутался в трёх соснах....
Задача при работающем двигателе контролируем датчики гидравлики, когда двигатель выключен контроль только аккумулятора.
Сделал такой скетч.
#include <LiquidCrystal.h> LiquidCrystal lcd(8,9,10,11,12,13); int rpm, z; void setup() { pinMode(17, INPUT); // вход от катушки зажигания digitalWrite(17, HIGH); lcd.begin(16, 2); } void loop() { rpm = 0; unsigned long currentMillis = millis(); while(millis() - currentMillis < 1000){ if (digitalRead(17)==LOW) z = 1; rpm = rpm+z; } if (rpm > 1) on(); // двигатель включён проверяем давление гидравлики if (rpm == 0) of(); // двигатель выключен контролируем только аккумулятор delay(1000); } void of() { lcd.setCursor(0, 0); lcd.print(" NO impulse "); lcd.setCursor(0, 1); lcd.print(rpm); } void on() { lcd.setCursor(0, 0); lcd.print(" impulse "); lcd.setCursor(0, 1); lcd.print(rpm); }
катушку зажигания имитировал просто кнопкой на массу.
при включении программы сразу выдаёт "NO impulse", начинаю (вручную) коротить кнопку, выдаёт пятизначное число и потом в "NO impulse" не возвращается. Тоесть кнопку уже не трогаю, а на экране пятизначное число и причём уже изменяется само по себе...
Ну почему же само по себе. Вот вы его инкриментируете в замкнутом цикле в течении 1 секунды 100 милионов раз:
а нужно только при изменении уровня сигнала
так же почитайте про дребезг кнопки
А что бы не изобретать трехпедальный велосипед воспользуйтесь поиском по сайту "тахометр", "счетчик импульсов" и т.д.
Спасибо за подсказку... про тахометр и счёткчик импульсов уже кажется выучил наизусть... :)
После чашки кофе сам заметил, что со скобками проблема...
Данный код работать не будет, что сделать я вам написал выше, перечитайте.
Данный код работать не будет, что сделать я вам написал выше, перечитайте.
Проверил - работают оба варианта
Скетч с вашим вариантом после компиляции короче на пару десятков байт (в моём случае размер критичен) поэтому ещё раз спасибо за помощь.
А, ну если работает ,тогда ладно. Как только у вас возникнет вопрос "а почему за 1 импульс плюсуется 25 ?" перечитайте сообщение #1.
А, ну если работает ,тогда ладно. Как только у вас возникнет вопрос "а почему за 1 импульс плюсуется 25 ?" перечитайте сообщение #1.
Это понятно, но в моём случае это не критично, мне важно только наличие импульсов.
Сегодня проводил полевые испытания...
Выяснилось, что если перед циклом стоит boolean flag = LOW; то при постоянном замыкании на массу (без импульсов) счётчик работает и выдаёт значения отличные от нуля.
Вот такой код считает импульсы только тогда когда они есть.
вот результат.
http://www.youtube.com/watch?v=4u-M-WvOohA
смысл в том, чтобы датчики опрашивались только при заведеном двигателе.