Re: Кнопка Старт/Стоп на МК Arduino
basurman971 Скажите у вас нормально всё с логикой? Может какое заболевание связоное с головой есть? А может акоголизм? Наркомания? Вы расскажите, а то кроме как заболеванием я не знаю как объяснить зачем ты советуешь человеку с трудом отличающим плюс от минуса и в упор на схеме не видящего какой из трех четко подписанных проводов датчика за что отвечает спаять операционник с обвязкой для ардуины и самостоятельно переписать скетч для спидометра под совершенно другую задачу измерения импульсов коленвала с нахождением среди них вмт и отсечкой по ней.
Вместо того чтобы взять два резистора, подключится к катушке зажигания и использовать готовый скетч. Вопрос все тот же - ЗАЧЕМ ЭТО ДЕЛАТЬ НОРМАЛЬНОМУ ЧЕЛОВЕКУ ?
Re: Кнопка Старт/Стоп на МК Arduino
Re: Кнопка Старт/Стоп на МК Arduino
Да ладно, я уже понял что мне в лес, но в лесу я буду мучатся вопросом - ты все таки расскажи какие преимущества твоего метода чтения оборотов по датчику угловой скорости коленвала вместо импульсов с катушки?
Может высокая точность? Так нет там точности ни какой, точнее чем с катушки не придумаешь, да и зачем там точность, и форсунка бы сгодилась.
Может простота схемы? Тоже нет такой буквы иначе зачем операционники городить вместо пары резюков.
Может доступность подключения? И тут мимо - катушки они вот перед глазами открыл капот и подключай, не надо искать датчик коленвала в недрах.
Может простота программирования? Нифига подобного - примитивный счетчик вчистую выигрывает у анализатора импульсов.
Может меньше ресурсов контроллера? Нет - смотри пункт выше.
Может технологичность схемы? Но зачем нужна плата с операционниками против резюков навешанных на ардуинку или примитивной опторазвязки.
Может экономически оправдано? Да это вообще бред.
Может простота настройки? И такой буквы нет.
Может так безопасней? Если произойдет пробой и сигнал с датчика коленвала вдруг исчезнет, что будет - в худшем случае двигатель остановится, в лучшем если программа эбу позволит переключится на датчики распредвалов - либо остановка машины, либо серьезная потеря мощности, в неподходящий момент это может стоить жизни. А если сигнал датчика неудачно исказится и эбу начнет видеть вмт не в том месте где она есть- последствия также возможны печальные.
А если это вызовет плавающую неисправность которая не будет диагностироваться и просто создавать геморрой? Датчик коленвала устройство нежное.
А что будет с катушкой - да с ней ничего не будет, максимум пропуски зажигания - ничего смертельного, некоторая потеря мощности и все.
А может стадный эффект - и все так делают? Так тоже нет - никому кроме тебя даже в голову не пришло цепляться к датчику коленвала, как бы все понимают что это идиотизм какой то.
Так что ответь на вопрос ЗАЧЕМ ТЫ ЭТУ АХИНЕЮ ВЫДУМЫВАЕШЬ - а то я в лесу не выживу.
Re: Кнопка Старт/Стоп на МК Arduino
оооо, лесовичек рассказы сочинять умеет))) я смотрю ты уже самоопределился, ну так будь добр, помолчи, а люди сами выберут чем и как им пользоваться.
Re: Кнопка Старт/Стоп на МК Arduino
А ты сделай то скетч для людей - что бы им было из чего выбирать и чем пользоваться, тот самый который угловую скорость будет в обороты персчитывать. Не ссылку на спидометр к теме отношения не имеющий, со с словами там разберетесь - а реальный рабочий скетч обсчета датчика коленвала. Это же так просто, или максимум способен лажу разную втирать да рот затыкать? Не дорос батенька указывать что говорить а что нет. Примитивный скеч подсветки сам поправить не можешь, а выпендрежа полные штаны.
Re: Кнопка Старт/Стоп на МК Arduino
Оживлю тему...
По скетчу из поста В строке
251 delay (delay_ign); // Задержка на бензонасос и датчики
Я так понимаю это для бензиновых ожидание . А для дизеля нужно ждать когда свечи накала погаснут.
Помогите скетч поправить. Допустим сигнал от свечи идет на A2 (он же D16)
Если кому надо , то while спасет.
Получилось вместо
Цитата:
delay (delay_ign);
Пишем
Цитата:
while (digitalRead(svecha)) // Задержка на бензонасос или свечи накала
{
LOW;
}
Re: Кнопка Старт/Стоп на МК Arduino
Цитата:
Сообщение от
maestro777
Ребята если кто скачал прогу извините я там в коде ошибку допустил которая мешает экстренному отключению программы по нажатию кнопки вот исправленный код :
PHP код:
byte ACCPin = 11; //Выход на транзистор переферии ACC
byte EnginePin = 10; //Выход на транзистор зажигания
byte StarterPin = 9; //Выход на транзистор стартера
byte ButtonPin = 8; //Вход + с кнопки <----------------------------- Стягивающий резистор на "-"
byte StopPin = 12; //Вход с тормоза <----------------------------- Стягивающий резистор на "-"
byte ImmoPin = 7; //Вход с иммо <----------------------------- Подтягивающий резистор на "+"
byte TahoPin = 6; //Вход с тахометра <----------------------------- Стягивающий резистор на "-"
byte WordsPin = 5; //Выход на глазок 1
byte YellowGlazokPin = 4; //Выход на глазок 2
byte GreenGlazokPin = 3; //Выход на глазок 3
byte statusEngine = 0;
byte sw = 2;
//byte rotate = 0;
unsigned int rotate=0;
boolean stateACC = false;
unsigned long lastPress = 0;
unsigned long lastImmo = 0;
unsigned long splitTime = 0;
unsigned long time =0;
byte stat = 0;
void setup()
{
pinMode(sw,INPUT);
pinMode(EnginePin, OUTPUT);
pinMode(StarterPin, OUTPUT);
pinMode(ACCPin, OUTPUT);
pinMode(WordsPin, OUTPUT);
pinMode(YellowGlazokPin, OUTPUT);
pinMode(GreenGlazokPin, OUTPUT);
//time = 0;
lastImmo=millis();
lastPress=millis();
Serial.begin(9600);
Serial.println("Arduino is started");
}
// 0 - Все выключенно
// 1 - Включено только зажигание
// 2 - Крутиться стартер, ждем оборотов
// 3 - Двигатель работает, все включено
// 4 - Неудачная попытка запуска, включено только зажигание
// 5 - Двигатель заглушен, АСС пока еще работает
void loop()
{
if (stat != statusEngine) {stat = statusEngine;
Serial.println(stat);
}
unsigned long newTime = millis() - lastPress;
unsigned int button = pressButton();
if (button != 0) Serial.println(button);
lastImmoTest();
switch (statusEngine)
{
case 0:
digitalWrite(GreenGlazokPin, LOW);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH);
else digitalWrite(YellowGlazokPin, LOW);
if (millis() - lastImmo > 10000) digitalWrite(WordsPin, HIGH);
else digitalWrite(WordsPin, LOW);
if (button == 1500 && stateACC)
{
StopAll();
}
else if (button == 1500 && !stateACC) StartACC();
else if (button != 0 && millis() - lastImmo > 2000 && newTime > 500) {
StartEngine();
statusEngine=1;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 1:
if (digitalRead(ImmoPin) == LOW) StopAll();
digitalWrite(WordsPin, HIGH);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
if (millis() - lastImmo > 2000 && StopIsPress() && newTime < 900)
{
digitalWrite(GreenGlazokPin, HIGH);
digitalWrite(WordsPin, HIGH);
}
else
{
digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
delay(100);
}
if (button == 1500) {
StopAll();
}
else if (button != 0 && newTime > 500) {
if (!stateACC)
StopAll();
else
{StopEngine();
statusEngine=5;
}
}
else if (newTime > 9000 && newTime < 9100 && StopIsPress())//задержка на 9 секунд тут она не мешает основному циклу если нужна другая просто меняйте
{
StartStarter();
statusEngine=2;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 2:
digitalWrite(WordsPin, HIGH);
digitalWrite(GreenGlazokPin, HIGH);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH);
if (digitalRead(TahoPin) == HIGH) {
rotate++;
while (digitalRead(TahoPin) == HIGH) if (digitalRead(ImmoPin) == LOW) {StopAll(); break;}
}
if (rotate>=2)
{
unsigned int rpm = (rotate*60000*10000/2)/(micros()-splitTime);
Serial.print("rpm: ");
Serial.println(rpm);
rotate=0;
splitTime=micros();
if (rpm>1000) { //<-------ВЕРНУТЬ СЮДА ТЫЩУ!!!! <-------
StopStarter();
StartACC();
statusEngine=3;
Serial.println("Engine is WORK!!");
break;
}
}
if (button != 0 && newTime > 500) {
StopAll();
}
else if (newTime > 5000 || !StopIsPress()){
StopStarter();
statusEngine=4;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 3:
digitalWrite(GreenGlazokPin, HIGH);
digitalWrite(YellowGlazokPin, LOW);
if (newTime > 5000) digitalWrite(WordsPin, LOW);
else digitalWrite(WordsPin, HIGH);
if (button == 1500) {
StopAll();
}
else if (button != 0 && newTime > 500) {
StopEngine();
statusEngine=5;
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 4:
digitalWrite(WordsPin, HIGH);
digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
digitalWrite(YellowGlazokPin, LOW);
if (button == 1500 || newTime > 10000) {
StopAll();
}
else if (button != 0 && newTime > 500 && StopIsPress()) {
StartStarter();
statusEngine=2;
}
else if (button != 0 && newTime > 500 && !StopIsPress()) {
StopAll();
}
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
case 5:
digitalWrite(GreenGlazokPin, LOW);
if (stateACC) digitalWrite(YellowGlazokPin, HIGH); else digitalWrite(YellowGlazokPin, LOW);
if (newTime > 5000)
{
if (millis() - lastImmo > 5000) digitalWrite(WordsPin, HIGH); else digitalWrite(WordsPin, LOW);
}
else
digitalWrite(WordsPin, HIGH);
if (button == 1500) {
StopAll();
}
else if (millis() - lastImmo < 2000) StopAll();
else if (button != 0 && newTime > 500) {
StartEngine();
statusEngine=1;
}
lastImmoTest();
break;
//----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
}
}
void StartEngine(){
digitalWrite(EnginePin, HIGH);
Serial.println("Engine is ON");
lastPress=millis();
}
void StopEngine(){
digitalWrite(EnginePin, LOW);
Serial.println("Engine is OFF");
lastPress=millis();
}
void StopAll(){
digitalWrite(EnginePin, LOW);
digitalWrite(StarterPin, LOW);
digitalWrite(ACCPin, LOW);
Serial.println("All OFF");
while (!digitalRead(ButtonPin)){}
stateACC=false;
lastPress=millis();
statusEngine=0;
lastPress=millis();
}
void StartStarter(){
digitalWrite(StarterPin, HIGH);
Serial.println("Starter START!");
splitTime=micros();
lastPress=millis();
}
void StopStarter(){
digitalWrite(StarterPin, LOW);
Serial.println("Starter if OFF!");
lastPress=millis();
}
void StartACC(){
digitalWrite(ACCPin, HIGH);
Serial.println("Starter ACC!");
stateACC=true;
lastPress=millis();
}
void lastImmoTest(){
if (digitalRead(ImmoPin) == LOW) { //<----------------------------- Поменял на LOW
lastImmo=millis();
Serial.println("Immo+");
}
}
unsigned int pressButton(){
unsigned long newTime = millis();
boolean currentPosition = digitalRead(ButtonPin);
if (currentPosition == HIGH){
delay(50);
currentPosition=digitalRead(ButtonPin);
}
while (!currentPosition) {
currentPosition=digitalRead(ButtonPin);
if (millis() - newTime > 1000) return 1500;
}
newTime=millis() - newTime;
if (newTime < 60) newTime = 0;
return newTime;
}
boolean StopIsPress(){
return digitalRead(StopPin);
}
подниму тему. кто исправлял ошибку в подсчетах оборотов? у меня почемуто считывает завышенные обороты при запуске на хх больше 3500. Подключил вход тахометра к датчику холла на восьмерке
Re: Кнопка Старт/Стоп на МК Arduino
Re: Кнопка Старт/Стоп на МК Arduino
На входе делитель из двух резисторов и стабилитрон на 5.1 Вольт. Думаете после делителя добавить конденсатор?
Re: Кнопка Старт/Стоп на МК Arduino
Если не сложно опишите пожалуйста что и как подсчитывается в этой строчке
unsigned int rpm = (rotate*60000*10000/2)/(micros()-splitTime);
Serial.print("rpm: ");
Serial.println(rpm);
rotate=0;
splitTime=micros();
rotate я так понимаю это количество импульсов что пришло на пин умноженое на 60 секунд, и не могу разобраться в какой строке убрать выключение режима асс когда машина долго стоит, при запуске заводит но при этом асс продолжает быть отключённым пока долгим нажатием кнопки не выключишь всё. Заранее спасибо!