Страница 6 из 16 ПерваяПервая 123456789101112 ... ПоследняяПоследняя
Показано с 51 по 60 из 152

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    34
    Вес репутации
    149

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Ребята если кто скачал прогу извините я там в коде ошибку допустил которая мешает экстренному отключению программы по нажатию кнопки вот исправленный код :
    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(EnginePinOUTPUT);
    pinMode(StarterPinOUTPUT);
    pinMode(ACCPinOUTPUT);
    pinMode(WordsPinOUTPUT);
    pinMode(YellowGlazokPinOUTPUT);
    pinMode(GreenGlazokPinOUTPUT);
    //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 != 0Serial.println(button);
    lastImmoTest();
    switch (
    statusEngine
    {
    case 
    0:
    digitalWrite(GreenGlazokPinLOW);
    if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); 
    else 
    digitalWrite(YellowGlazokPinLOW);
    if (
    millis() - lastImmo 10000digitalWrite(WordsPinHIGH); 
    else 
    digitalWrite(WordsPinLOW);
    if (
    button == 1500 && stateACC)
    {
    StopAll();
    }
    else if (
    button == 1500 && !stateACCStartACC();
    else if (
    button != && millis() - lastImmo 2000 && newTime 500) {
    StartEngine();
    statusEngine=1;
    }
    break;
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
    case 1:
    if (
    digitalRead(ImmoPin) == LOWStopAll();
    digitalWrite(WordsPinHIGH); 
    if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
    if (
    millis() - lastImmo 2000 && StopIsPress() && newTime 900
    {
    digitalWrite(GreenGlazokPinHIGH); 
    digitalWrite(WordsPinHIGH);
    }
     else
    {
    digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
    delay(100);
    }
     
    if (
    button == 1500) {
    StopAll();
    }
    else if (
    button != && newTime 500) {
    if (!
    stateACC
    StopAll();
    else
    {
    StopEngine();
     
    statusEngine=5;
     }
     }
     else if (
    newTime 9000 && newTime 9100 && StopIsPress())//задержка на 9 секунд тут она не мешает основному циклу если нужна другая просто меняйте 
     
     
    {
     
     
    StartStarter();
     
    statusEngine=2;
     }
     break;
     
     
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 2:
     
    digitalWrite(WordsPinHIGH); 
     
    digitalWrite(GreenGlazokPinHIGH); 
     if (
    stateACCdigitalWrite(YellowGlazokPinHIGH);
     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 != && newTime 500) { 
     
    StopAll();
     }
     else if (
    newTime 5000 || !StopIsPress()){
     
    StopStarter();
     
    statusEngine=4;
     }
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 3:
     
    digitalWrite(GreenGlazokPinHIGH);
     
    digitalWrite(YellowGlazokPinLOW);
     if (
    newTime 5000digitalWrite(WordsPinLOW); 
     else 
    digitalWrite(WordsPinHIGH);
     if (
    button == 1500) {
     
    StopAll();
     }
     else if (
    button != && newTime 500) { 
     
    StopEngine();
     
    statusEngine=5;
     }
     break;
     
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
     
    case 4:
     
     
    digitalWrite(WordsPinHIGH);
     
    digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
     
    digitalWrite(YellowGlazokPinLOW);
     if (
    button == 1500 || newTime 10000) {
     
    StopAll();
     }
     else if (
    button != && newTime 500 && StopIsPress()) {
     
    StartStarter();
     
    statusEngine=2;
     }
     else if (
    button != && newTime 500 && !StopIsPress()) {
     
    StopAll();
     }
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 5:
     
    digitalWrite(GreenGlazokPinLOW);
     if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
     if (
    newTime 5000
     {
     if (
    millis() - lastImmo 5000digitalWrite(WordsPinHIGH); else digitalWrite(WordsPinLOW);
     }
     else 
     
    digitalWrite(WordsPinHIGH);
     if (
    button == 1500) {
     
    StopAll();
     }
     else if (
    millis() - lastImmo 2000StopAll();
     else if (
    button != && newTime 500) {
     
    StartEngine();
     
    statusEngine=1;
     }
     
    lastImmoTest();
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    }
     }

    void StartEngine(){
    digitalWrite(EnginePinHIGH);
    Serial.println("Engine is ON");
    lastPress=millis();
     }
     
    void StopEngine(){
     
    digitalWrite(EnginePinLOW);
     
    Serial.println("Engine is OFF");
     
    lastPress=millis();
     }
     
    void StopAll(){
     
    digitalWrite(EnginePinLOW);
     
    digitalWrite(StarterPinLOW);
     
    digitalWrite(ACCPinLOW);
     
    Serial.println("All OFF"); 
     while (!
    digitalRead(ButtonPin)){}
     
    stateACC=false;
     
    lastPress=millis();
     
    statusEngine=0;
     
    lastPress=millis(); 
     }
     
     
    void StartStarter(){
     
    digitalWrite(StarterPinHIGH);
     
    Serial.println("Starter START!");
     
    splitTime=micros();
     
    lastPress=millis();
     }
     
    void StopStarter(){
     
    digitalWrite(StarterPinLOW);
     
    Serial.println("Starter if OFF!");
     
    lastPress=millis();
     }
     
     
    void StartACC(){
     
    digitalWrite(ACCPinHIGH);
     
    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 60newTime 0;
     return 
    newTime
     }
     
    boolean StopIsPress(){
     return 
    digitalRead(StopPin); 
     } 

  2. #2
    Новичок
    Регистрация
    28.05.2019
    Сообщений
    3
    Вес репутации
    0

    По умолчанию 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(EnginePinOUTPUT);
    pinMode(StarterPinOUTPUT);
    pinMode(ACCPinOUTPUT);
    pinMode(WordsPinOUTPUT);
    pinMode(YellowGlazokPinOUTPUT);
    pinMode(GreenGlazokPinOUTPUT);
    //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 != 0Serial.println(button);
    lastImmoTest();
    switch (
    statusEngine
    {
    case 
    0:
    digitalWrite(GreenGlazokPinLOW);
    if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); 
    else 
    digitalWrite(YellowGlazokPinLOW);
    if (
    millis() - lastImmo 10000digitalWrite(WordsPinHIGH); 
    else 
    digitalWrite(WordsPinLOW);
    if (
    button == 1500 && stateACC)
    {
    StopAll();
    }
    else if (
    button == 1500 && !stateACCStartACC();
    else if (
    button != && millis() - lastImmo 2000 && newTime 500) {
    StartEngine();
    statusEngine=1;
    }
    break;
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- 
    case 1:
    if (
    digitalRead(ImmoPin) == LOWStopAll();
    digitalWrite(WordsPinHIGH); 
    if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
    if (
    millis() - lastImmo 2000 && StopIsPress() && newTime 900
    {
    digitalWrite(GreenGlazokPinHIGH); 
    digitalWrite(WordsPinHIGH);
    }
     else
    {
    digitalWrite(GreenGlazokPin,!digitalRead(GreenGlazokPin));
    delay(100);
    }
     
    if (
    button == 1500) {
    StopAll();
    }
    else if (
    button != && newTime 500) {
    if (!
    stateACC
    StopAll();
    else
    {
    StopEngine();
     
    statusEngine=5;
     }
     }
     else if (
    newTime 9000 && newTime 9100 && StopIsPress())//задержка на 9 секунд тут она не мешает основному циклу если нужна другая просто меняйте 
     
     
    {
     
     
    StartStarter();
     
    statusEngine=2;
     }
     break;
     
     
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 2:
     
    digitalWrite(WordsPinHIGH); 
     
    digitalWrite(GreenGlazokPinHIGH); 
     if (
    stateACCdigitalWrite(YellowGlazokPinHIGH);
     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 != && newTime 500) { 
     
    StopAll();
     }
     else if (
    newTime 5000 || !StopIsPress()){
     
    StopStarter();
     
    statusEngine=4;
     }
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 3:
     
    digitalWrite(GreenGlazokPinHIGH);
     
    digitalWrite(YellowGlazokPinLOW);
     if (
    newTime 5000digitalWrite(WordsPinLOW); 
     else 
    digitalWrite(WordsPinHIGH);
     if (
    button == 1500) {
     
    StopAll();
     }
     else if (
    button != && newTime 500) { 
     
    StopEngine();
     
    statusEngine=5;
     }
     break;
     
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
     
    case 4:
     
     
    digitalWrite(WordsPinHIGH);
     
    digitalWrite(GreenGlazokPin, !digitalRead(GreenGlazokPin)); delay(50);
     
    digitalWrite(YellowGlazokPinLOW);
     if (
    button == 1500 || newTime 10000) {
     
    StopAll();
     }
     else if (
    button != && newTime 500 && StopIsPress()) {
     
    StartStarter();
     
    statusEngine=2;
     }
     else if (
    button != && newTime 500 && !StopIsPress()) {
     
    StopAll();
     }
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    case 5:
     
    digitalWrite(GreenGlazokPinLOW);
     if (
    stateACCdigitalWrite(YellowGlazokPinHIGH); else digitalWrite(YellowGlazokPinLOW);
     if (
    newTime 5000
     {
     if (
    millis() - lastImmo 5000digitalWrite(WordsPinHIGH); else digitalWrite(WordsPinLOW);
     }
     else 
     
    digitalWrite(WordsPinHIGH);
     if (
    button == 1500) {
     
    StopAll();
     }
     else if (
    millis() - lastImmo 2000StopAll();
     else if (
    button != && newTime 500) {
     
    StartEngine();
     
    statusEngine=1;
     }
     
    lastImmoTest();
     break;
     
    //----- ----- ----- ----- ----- ----- ----- ----- ----- ----- ----- -----
     
    }
     }

    void StartEngine(){
    digitalWrite(EnginePinHIGH);
    Serial.println("Engine is ON");
    lastPress=millis();
     }
     
    void StopEngine(){
     
    digitalWrite(EnginePinLOW);
     
    Serial.println("Engine is OFF");
     
    lastPress=millis();
     }
     
    void StopAll(){
     
    digitalWrite(EnginePinLOW);
     
    digitalWrite(StarterPinLOW);
     
    digitalWrite(ACCPinLOW);
     
    Serial.println("All OFF"); 
     while (!
    digitalRead(ButtonPin)){}
     
    stateACC=false;
     
    lastPress=millis();
     
    statusEngine=0;
     
    lastPress=millis(); 
     }
     
     
    void StartStarter(){
     
    digitalWrite(StarterPinHIGH);
     
    Serial.println("Starter START!");
     
    splitTime=micros();
     
    lastPress=millis();
     }
     
    void StopStarter(){
     
    digitalWrite(StarterPinLOW);
     
    Serial.println("Starter if OFF!");
     
    lastPress=millis();
     }
     
     
    void StartACC(){
     
    digitalWrite(ACCPinHIGH);
     
    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 60newTime 0;
     return 
    newTime
     }
     
    boolean StopIsPress(){
     return 
    digitalRead(StopPin); 
     } 
    подниму тему. кто исправлял ошибку в подсчетах оборотов? у меня почемуто считывает завышенные обороты при запуске на хх больше 3500. Подключил вход тахометра к датчику холла на восьмерке

  3. #3
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    34
    Вес репутации
    149

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Это делитель напряжения, главное чтоб на вход ардуины не попало более 5.5в при лог входе = 1 но не менее 3.2 в. я еще в схему добавил стабилитроны случай всякий бывает .

  4. #4
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    25
    Вес репутации
    148

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    А как ты стабилитроны подключал?

  5. #5
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Лучше использовать оптроны

  6. #6
    Пользователь
    Регистрация
    05.01.2014
    Сообщений
    34
    Вес репутации
    149

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Цитата Сообщение от Chip Посмотреть сообщение
    Лучше использовать оптроны
    полностью согласен с вами

  7. #7
    Новичок
    Регистрация
    28.02.2014
    Сообщений
    9
    Вес репутации
    143

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Здравствуйте форумчане. Скажите, Собрал я схему. Вроде все нормально но стартер не крутит зажигание включается минут пять работает потом выключается. При длительном нажатии кнопки ACC включается. Но почему стартер не крутит? Подключал следующим образом. Тахометр на панель низковольтный стягивающий резистор на 2.2кОм. Тормоз на +12 через 2.2кОм и стягивающий резистор тоже 2.2кОм. Кнопка на массу подтягивающий резистор 2.2кОм на 5в. Иммобилайзер на массе через подтягивающий 2.2кОм. Реле работают через транзисторы кт972а. Маленькие 5 амперные которые управляют 20 и 40 амперными.

  8. #8
    Новичок
    Регистрация
    28.02.2014
    Сообщений
    9
    Вес репутации
    143

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    Здравствуйте друзья. Вообщем победил проблему с запуском. Был брак резистора. Машина заводится отлично. Без прокрутки стартера. Но не работает тахометр. А с ключа все ок. Может у кого такое было? И что сделали что б был сигнал на плату и тахометр работал. Вот кстати фото моей платы.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	DSC_0039.jpg 
Просмотров:	1327 
Размер:	95.9 Кб 
ID:	17582   Нажмите на изображение для увеличения. 

Название:	DSC_0038.jpg 
Просмотров:	889 
Размер:	89.1 Кб 
ID:	17581  

  9. #9
    Администратор Аватар для Chip
    Регистрация
    08.06.2007
    Возраст
    55
    Сообщений
    13,381
    Вес репутации
    10

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    А какой уровень сигнала с выхода тахометра?

  10. #10
    Новичок
    Регистрация
    28.02.2014
    Сообщений
    9
    Вес репутации
    143

    По умолчанию Re: Кнопка Старт/Стоп на МК Arduino

    напряжение пляшет от 3.79v до 3.87v

Страница 6 из 16 ПерваяПервая 123456789101112 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •