Подтягивающие резисторы (программирвемыые)

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Я начинающий ардуинщик. Не судите строго =)

Железо - Ардуино Мега 2560. Питание от USB.

В общем для начала хотел немного осовиться с контроллером, чтобы 13 лампочка моргала как я ей скажу при помощи дискретных входов. Запилил прогу, грубо - если видишь 30 вход то лампочка вкл, если 31, то выкл. 

30 и 31 входы настроил таким образом 

pinMode(t1, INPUT);
digitalWrite(t1, HIGH);

В результате на входы не откликается (замыкаю просто проводком с 5V на 30 вход, например).

Затем строку digitalWrite(t1, HIGH); заменил на digitalWrite(t1, LOW); - стала работать, но нельзя сказать что стабильно, т.е. не всегда при замыкании лампа гаснет, и не всегда загорается.

Вообще, ход мыслей был следующий:

1. читаю статью про дискретный вход http://arduino.ru/tutorials/button

2. делаю вывод, что нужен подтягивающий резитор (хотя честно говоря его смысла я не понимаю ибо не сильно шарю в электрике)

3. читаю статью http://arduino.ru/Tutorial/DigitalPins

4. делаю вывод, что подтягивающий резистор есть программный, и можно, включив его, замыкать просто проводком и все будет ОК

 

Внимание вопрос - что я сделал не так? =) и как заставить программу реагировать нормально на дискретный вход?

kisoft
kisoft аватар
Offline
Зарегистрирован: 13.11.2012

Подтяжка к питанию. Плюс Вы замыкаете пин на питание, вопрос на засыпку, а почему должно что то меняться?

bwn
Offline
Зарегистрирован: 25.08.2014

Вот здесь еще интересно. Может картинки на размышления наведут.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

kisoft пишет:
Подтяжка к питанию. Плюс Вы замыкаете пин на питание, вопрос на засыпку, а почему должно что то меняться?

Спасибо! но  "подтяжка к питанию" мне ни о чем не говорит, я же сказал не понимаю электроники. Почему должно меняться - потому что я думал что внутри контроллера (в смысле процессора, короче атмела) GND замкнут (грубо), и при подаче питания на вход возникнец цепь и потечет ток.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Спасибо! Жаль, ведь брал ардуино чтобы не паять... А есть обьяснение почему не рекомендовано использовать программные "подтяжки" ?

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Raikkonnen пишет:

Спасибо! Жаль, ведь брал ардуино чтобы не паять... А есть обьяснение почему не рекомендовано использовать программные "подтяжки" ?

"Будучи как автор" могу рекомендовать "Сагу о кнопках" собственного разлива... тьфу, т.е. производства. Там про различного рода подтяжки и оттяжки тоже есть.

Хочешь - используй. Не хочешь - не используй. Не хочешь паять - не паяй. Но так, чтобы вовсе об электронику не мораться... Не получится. :))

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

На, читай статью: http://easyelectronics.ru/avr-uchebnyj-kurs-ustrojstvo-i-rabota-portov-vvoda-vyvoda.html , там и про подтягивающие резисторы есть (в картинках в конце статьи). Чтобы заниматься ардуиной нужно владеть хотя бы базовыми навыками электроники, даже если ничего не паять. Без этого никак.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Всем спасибо, особенно за статьи! Я не планирую не мокаться, даже по пояс бы зашел, но не планирую ходить в дальние плавания =) Паяльником владею. Просто я хотел собрать красиво - проводки и все, а теперь придется еще думать че как запилить эти сопротивления, чтобы выглядело не колхозом. 

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Raikkonnen пишет:

Просто я хотел собрать красиво - проводки и все, а теперь придется еще думать

тебе же объясняют, что для того, что бы ничего не паять - нужно изучить электротехнику курса средней школы.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Клапауций 911 пишет:

тебе же объясняют, что для того, что бы ничего не паять - нужно изучить электротехнику курса средней школы.

Откуда столько злости? Лучше расскажи, если есть решение подключения кнопки без подтяжки.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Raikkonnen пишет:

а теперь придется еще думать

Ага, это ключевая фраза. Читать и думать придется, много.

Есть два вида подтягивающих резисторов: Pull-Up (подтягивает к питанию, VCC) и Pull-Down (подтягивает к земле, GND). Программная подтяжка в ардуине - это тот же подтягивающий резистор, только он внутри микросхемы находится. Но в ардуине есть только подтяжка к питанию VCC (Pull-Up). Поэтому, чтобы на входе ардуино с программной подтяжкой (к питанию VCC) что-то изменилось, нужно подавать на вход землю (GND).

bwn
Offline
Зарегистрирован: 25.08.2014

Raikkonnen пишет:

Клапауций 911 пишет:

тебе же объясняют, что для того, что бы ничего не паять - нужно изучить электротехнику курса средней школы.

Откуда столько злости? Лучше расскажи, если есть решение подключения кнопки без подтяжки.

Да почитай, ссылку что я дал, и "Сагу .....". И все поймешь. Почти верно сделал, но есть нюанс.
Единственное, это хорошо на очень коротких проводах, а дальше полезут проблемы.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Raikkonnen пишет:

Откуда столько злости? 

Нет никакой злости, Клапауций 911 абсолютно правильно говорит. Без элементарных знаний электроники тут делать нечего. 

Raikkonnen пишет:

Лучше расскажи, если есть решение подключения кнопки без подтяжки.

Да подключай без подтяжки, кто ж тебе запрещает. Вот только работать будет хреново, т.к. помехи и наводки.

 

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Raikkonnen пишет:

Откуда столько злости? Лучше расскажи, если есть решение подключения кнопки без подтяжки.

есть решение... но, ты же схемы электрические читать не желаешь учиться.

сходи к учителю музыки и заяви, что ты желаешь учиться, но ноты учить не собираешься - пусть он тебе балалайку о твою голову разломает.

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Jeka_M пишет:

Нет никакой злости, Клапауций 911 абсолютно правильно говорит.

не ломай мой имидж злого демона, угнетающего кретинов.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Я все статьи прочел, про встроенную подтяжку понял. Сейчас попробую, думаю сработет.

Jeka_M Отдельное спасибо за терпение!

Осталься один вопрос - почему не рекомедовано использовать встроенную подтяжку? потому что появится наводка посильней, то сгорит процессор, а так бы сгорело внешнее сопротивление?

Вы такие все хитрые, я написал - "думать, чтобы выглядело не колхозом" имея ввиду, чтобы не висели сопротивления на проводах замотаные изолетной, а вы услышали только "придется думать"

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Клапауций 911 пишет:

сходи к учителю музыки и заяви, что ты желаешь учиться, но ноты учить не собираешься - пусть он тебе балалайку о твою голову разломает.

Хендрикс нот не знал.... Но этого и ты мог не знать, но про Моцарта то слыхал?

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Raikkonnen пишет:

Хендрикс нот не знал....

ну, что можно возразить кретину?

разбить о твою дурную голову балалайку?

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Хендрикс не задавал на форумах вопросов, как играть на гитаре.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Клапауций 911 пишет:

 

ну, что можно возразить кретину?

разбить о твою дурную голову балалайку?

Тревиально мыслишь! Не должны все учиться так, как учился ты. Я играю на гитаре (музыкалка ноты вся фигня), и Я смогу научить за пару дней сыграть че-нить несложное и красивое, шоб 1 раз выпендриться где-нить перед девушкой, например. И !!!ВНИАНИЕ!!! человек не будет знать даже что дакое скрипичный ключ!

 

Duino A.R.
Offline
Зарегистрирован: 25.05.2015

Raikkonnen пишет:

Осталься один вопрос - почему не рекомедовано использовать встроенную подтяжку?

Тьфу ты, триста христа поперек... Чтоб у твоей диагональной матрицы детерминант не сходился! МОИ резоны в применении "подтягивающих", "стягивающих" и встроенных подтягивающих приведены в "Саге о кнопках". Хотите овладеть - придется читать. Как у других - тоже придется читать. Возможно, меньше, но все одно - придется. :))

P.S.

- У Вас оригинальный аттракцион есть?

- Да. Муха, делающая пертвую петлю. Я эту муху пять лет дрессировал.

- (Давя пальцем насекомое) И что?

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

andriano пишет:

Хендрикс не задавал на форумах вопросов, как играть на гитаре.

Думаю, в свое время настроить гитару его все же научили....

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Duino A.R. пишет:

 приведены в "Саге о кнопках". Хотите овладеть - придется читать. Как у других - тоже придется читать. 

Про сагу не понял, что это буквально. Теперь понял и нашел, прочту, спасибо!

Анекдота не понял, да и пофиг.

зы. АХАХАХАХ начал читать - поржал с первых строк =))))) Круто!

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Raikkonnen пишет:

Тревиально мыслишь! Не должны все учиться так, как учился ты.

верно - тебя будут учить на этом форуме, разбивая балалайки о твою голову.

результатом обучения будет твоё умение читать электрические схемы и понимание основ электротехники.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

Клапауций 911 пишет:

результатом обучения будет твоё умение читать электрические схемы и понимание основ электротехники.

Входы уже работают, кстати. правда чета лапочка PWR тухнет когда я небрежно проводком ковыраю =)))))

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

Raikkonnen пишет:

Входы уже работают, кстати.

ок. у меня балалаек хватит на всех.

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Raikkonnen пишет:

правда чета лапочка PWR тухнет когда я небрежно проводком ковыраю =)))))

Дык того.... этого... надо смелей и уверенней ковырать. Чтоб если лапочка PWR потухла, то уже чтоб не повадно ей было обратно зажигаться. Покажи мастер-класс и кто тут главный! Лапочка PWR должна тебя слушаться.

bwn
Offline
Зарегистрирован: 25.08.2014

Мдя, похоже я неправильные ссылки давал, попробуйте лучше эту и эту.

Raikkonnen
Offline
Зарегистрирован: 01.11.2015

=))))) больше всего понравилась фотка с шурупом. Нам как раз скоро на даче электричесво подключать, шурупы есть, а орехов нет, так зачем усложнять =))))

Я через все это прошел. Большинство на авто - отвертки друг с другом спаял однажды, потом еще ток на АКБ замерял =))))))))))))

Клапауций 911
Offline
Зарегистрирован: 18.10.2015

bwn пишет:

Мдя, похоже я неправильные ссылки давал, попробуйте лучше эту и эту.

вот правильная ссылка для ТС https://www.google.com/search?q=бугага

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Raikkonnen пишет:

andriano пишет:

Хендрикс не задавал на форумах вопросов, как играть на гитаре.

Думаю, в свое время настроить гитару его все же научили....

Пианистоам проще - они сами свой инструмент не настраивают.

И вообще, не факт, что его целенаправленно учили настраивать гитару, а не он научился сам, наблюдая, как это делают другие.

mralvad
Offline
Зарегистрирован: 22.11.2016

А можно ли использовать встроенные подтягивающие резисторы если ввод настрен на прерывание? Например для считывания оборот двигателя на пине D2, прерывание вызывается только при смене значения на порту с HIGH на LOW:

void setup()
{
attachInterrupt(0, tahometr, FALLING);
digitalWrite(2, HIGH);
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Можно, пока Клапауций не запретил.

mralvad
Offline
Зарегистрирован: 22.11.2016

На цифровом входе был программно включен подтягивающий резистор. При подключении питания этот цифровой вход сразу же был подключен к массе (все пока на столе и скручены провода в один пучек), т.е. дуина еще не загрузилась а пин уже висел на массе. После нескольких десятков включений выключений питания этот вход все время теперь считывает LOW назвисимо от того висит ли он на массе. Получется я спалил вход дуины, потому что он был подключен а дуина еще не загрузилась? И если я все же его спалил, сгорел бы он если ипользовался внешний подтягивающий резистор?

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

mralvad пишет:

На цифровом входе был программно включен подтягивающий резистор. При подключении питания этот цифровой вход сразу же был подключен к массе (все пока на столе и скручены провода в один пучек), т.е. дуина еще не загрузилась а пин уже висел на массе. После нескольких десятков включений выключений питания этот вход все время теперь считывает LOW назвисимо от того висит ли он на массе. Получется я спалил вход дуины, потому что он был подключен а дуина еще не загрузилась? И если я все же его спалил, сгорел бы он если ипользовался внешний подтягивающий резистор?

бред.

mralvad
Offline
Зарегистрирован: 22.11.2016

Почему он тогда постоянно считывет LOW? Хотя до этого полчаса исправно все работало

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

mralvad пишет:

Почему он тогда постоянно считывет LOW? Хотя до этого полчаса исправно все работало

если ты опубликуешь схему подключения и код скетча, то я, возможно, смогу ответить, а пока иди в пень.

mralvad
Offline
Зарегистрирован: 22.11.2016
Клапауций 234
Offline
Зарегистрирован: 24.10.2016

публикуешь электрическую схему и код скетча, или идёшь нахуй. 2.0

mralvad
Offline
Зарегистрирован: 22.11.2016

ладно, дерзкий ты хрен, "спасибо" за помощь

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

mralvad пишет:

ладно, дерзкий ты хрен, "спасибо" за помощь

ссылки свои открой, убийца разума.

mralvad
Offline
Зарегистрирован: 22.11.2016

изображение платы, схемы нет, удалил уже, и скетч переименованный в png, потому что здесь прикрепляются только изображения

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

mralvad пишет:

и скетч переименованный в png, потому что здесь прикрепляются только изображения

Не надо выкладывать скетч файлом, выкладывай кодом через кнопку  "code" на панели инструментов.

И да, схема электрическая принципиальная нужна.

mralvad
Offline
Зарегистрирован: 22.11.2016
#include <Bounce2.h> // подключаем библиотеку подавления дребезга Bounce 2
#define pressed_long 2000 // длительность долговременное нажатия
#define max_mode 3 // количество режимов
#define Button 7 // пин кнопки
#define Clutch 8 // пин входа сцепления
#define Buzzer 3 // пин зуммера
#define ACC 4 // пин аксессуаров
#define Ign1 5 // пин зажигания 1
#define Ign2 12 // пин зажигания 2
#define Starter 11 // пин стартера
#define Rled 6 // пин красного сид
#define Gled 9 // пин зеленого сид
#define Bled 10 // пин синего сид  
#define Dimmer A4 // пин входа габаритов
#define ob_start 100 // обороты запуска двигателя
#define delay_ign 1800 // задержка перед включением стартера
unsigned long astop_Starter = 3000; // ограничение автоматической работы стартера
unsigned long mstop_Starter = 10000; // ограничение ручной работы стартера
unsigned long previousMillis = 0; // счетчик времени

// Тахометр для ускорения и точности переменные помещаются в ОЗУ командой volatile:
volatile unsigned long micros_th = 0; // переменная времени импульса
volatile byte tz = 0; // счетчик обнуления
volatile unsigned int tp = 0; // обороты
volatile boolean tt = false; // триггер тахометра


// Установки кнопки:
int regim = 1; // начальный режим
Bounce bouncer = Bounce(); // создаем экземпляр класса Bounce
unsigned long pressed_moment; // счетчик времени нажатия

// Установки светодиодов:
int brightness = 0; // начальная яркость
int fadeAmount = 7; // шаг изменеия яркости
unsigned long inter = 100; // частота мигания
unsigned long currentTime; // счетчик времени
unsigned long loopTime; // период сид
unsigned long RpreviousMillis; // период сид

void setup()
{
  attachInterrupt(0, tahometr, FALLING); // активация прерывания для тахотера
  pinMode(Button, INPUT); // объявляем режим работы пина
  pinMode(Clutch, INPUT); // объявляем режим работы пина
  pinMode(Buzzer, OUTPUT); // объявляем режим работы пина
  pinMode(ACC, OUTPUT); // объявляем режим работы пина
  pinMode(Ign1, OUTPUT); // объявляем режим работы пина
  pinMode(Ign2, OUTPUT); // объявляем режим работы пина
  pinMode(Starter, OUTPUT); // объявляем режим работы пина
  pinMode(Rled, OUTPUT); // объявляем режим работы пина
  pinMode(Gled, OUTPUT); // объявляем режим работы пина
  pinMode(Bled, OUTPUT); // объявляем режим работы пина
  pinMode(Dimmer, INPUT); // объявляем режим работы пина
  digitalWrite(2, HIGH); // включаем вход
  digitalWrite(Clutch, HIGH); // включаем выход
  digitalWrite(ACC, LOW); // выключаем выход
  digitalWrite(Ign1, LOW); // выключаем выход
  digitalWrite(Ign2, LOW); // выключаем выход
  digitalWrite(Starter, LOW); // выключаем выход
  digitalWrite(Rled, LOW); // выключаем сид
  digitalWrite(Gled, LOW); // выключаем сид
  digitalWrite(Bled, LOW); // выключаем сид
  bouncer .attach(Button); // привязываем библиотеку кнопки к выводу Button
  bouncer .interval(20); // устанавливаем период дребезга = 20 мс
  Serial.begin(9600); // установка Serial-порта на скорость 9600 бит/сек
  currentTime = millis(); // устанавливаем время
  loopTime = currentTime; // синхронизируем время
}


void loop()
{
  currentTime = millis(); // счетчик привязываем ко времени
  if (tz != 0) {
    tz--;
  } else {
    tp = 0;
  }; // обработка тахометра
  Serial.print("Tacho: ");
  Serial.println (tp);
  //delay (500);

  if (bouncer.update()) // если произошло событие
  {
    if (bouncer.read() == 1) // если кнопка нажата
    {
      pressed_moment = millis(); // запоминаем время нажатия
      tone(Buzzer, 3500, 60); // подаем сигнал что нажата кнопка
    }
    else // кнопка отпущена
    {
      if ((millis() - pressed_moment) < pressed_long) // если кнопка была нажата кратковременно
      {
        if (regim == 4 && digitalRead(Clutch) == LOW) {
          regim = 2; // если был включен 4 режим и нажато сцепление устанавливаем 2, обнуляем момент нажатия
          pressed_moment = 0;
          goto rej2;
        }
        if (digitalRead (Clutch) == HIGH) // сцепление при этом не нажато
        {
          regim++; // увеличиваем счетчик текушего режима
          if (regim > max_mode) {
            regim = 1; // при достижении максимального режима возвращаемся в режим1
          }
          pressed_moment = 0; // обнуляем момент нажатия
        }
        else
        {
          if (regim == 4) {
            regim = 1; // если был включен 4 режим устанавливаем 1, обнуляем момент нажатия
            pressed_moment = 0;
            goto rej1;
          }
          else // иначе, если нажато сцепление:
          {
            regim = 5; // устанавливаем 5 режим
            pressed_moment = 0; // обнуляем момент нажатия
            tone(Buzzer, 3500, 100); // звуковой сигнал
            delay(200);
            tone(Buzzer, 3500, 100); // звуковой сигнал
            goto rej5;
          }
        }
      }
    }
  }
  if ((pressed_moment > 0) && ((millis() - pressed_moment) > pressed_long)) // кнопка удерживалась долго
  {
    if (regim == 4) // если режим 4
    {
      regim = 1; // то устанавливаем режим 1
      pressed_moment = 0; // обнуляем момент нажатия
      goto rej1; // переход на 1 режим
    }
    if (regim == 1 || regim == 2 || regim == 3) // если режим 1, 2 или 3
    {
      regim = 5; // то переходим к 5
      pressed_moment = 0; // обнуляем момент нажатия
      tone(Buzzer, 3500, 100); // подаем много звуковых сигналов
      delay(200);              // потому как начинается запуск без защиты тормозом
      tone(Buzzer, 3500, 100); // для не стандартных ситуаций
      delay(200);
      tone(Buzzer, 3500, 100); // звуковой сигнал
      delay(200);
      tone(Buzzer, 3500, 100); // звуковой сигнал
      goto rej5; // переход на 5 режим
    }
  }

  if (regim == 1) // первый режим - все выключено
  { rej1: // ссылка на 1 режим
    digitalWrite(ACC, LOW); // Аксессуары отключены
    digitalWrite(Ign1, LOW); // Зажигание отключено
    digitalWrite(Ign2, LOW); // Зажигание отключено
    digitalWrite(Starter, LOW); // Стартер отключен
    digitalWrite(Rled, LOW); // Красный сид выключен
    digitalWrite(Gled, LOW); // Зеленый сид выключен
    digitalWrite(Bled, LOW); // Синий сид выключен
    if (digitalRead(Clutch) == LOW) // если нажато сцепление
    {
      if (currentTime >= (loopTime + 1)) // проверяем время
      {
        analogWrite(Rled, brightness);    // Передаём яркость сид
        brightness = brightness + fadeAmount;  // Прибавляем шаг изменения яркости
        if (brightness <= 0 || brightness >= 255) {
          fadeAmount = -fadeAmount; // если достигли мин. или макс. значения, то идем в обратную сторону (реверс)
        }
        if (brightness >= 255) {
          brightness = 255; // устанавливаем предел чтобы не мигал
        }
        if (brightness <= 0) {
          brightness = 0; // устанавливаем предел чтобы не мигал
        }
        loopTime = currentTime; // синхронизируем время
      }
    } else {
      digitalWrite(Rled, LOW); // Гасим сид
    }
    Serial.println("ALL OFF:");  // Передаем режим рабоы
  }

  if (regim == 2) // второй режим - включены аксессуары
  { rej2: // ссылка на 2 режим
    digitalWrite(ACC, HIGH); // Аксессуары включены
    digitalWrite(Ign1, LOW); // Зажигание отключено
    digitalWrite(Ign2, LOW); // Зажигание отключено
    digitalWrite(Starter, LOW); // Стартер отключен
    digitalWrite(Rled, LOW); // Красный сид выключен
    digitalWrite(Gled, HIGH); // Зеленый сид включен
    digitalWrite(Bled, LOW); // Синий сид выключен
    if (digitalRead(Clutch) == LOW) // если нажато сцепление
    {
      if (currentTime >= (loopTime + 1)) // проверяем время
      {
        digitalWrite(Gled, LOW); // Выключаем зеленый сид
        analogWrite(Rled, brightness); // Передаём яркость сид
        brightness = brightness + fadeAmount;  // прибавляем шаг изменения яркости
        if (brightness <= 0 || brightness >= 255) {
          fadeAmount = -fadeAmount; // если достигли мин. или макс. значения, то идем в обратную сторону (реверс)
        }
        if (brightness >= 255) {
          brightness = 255; // устанавливаем предел чтобы не мигал
        }
        if (brightness <= 0) {
          brightness = 0; // устанавливаем предел чтобы не мигал
        }
        loopTime = currentTime; // синхронизируем время
      }
    }
    else {
      digitalWrite(Rled, LOW); //Гасим сид
      digitalWrite(Gled, HIGH); // Восстанавливаем сид
    }

    Serial.println("ACC ONLY"); // Передаем режим работы
  }

  if (regim == 3) // третий режим - ручное включение зажигания
  { rej3: // ссылка на 3 режим
    if (tp >= ob_start) {
      digitalWrite(Starter, LOW);  // защита автозапуска
      regim = 4;
      goto rej4;
    }
    digitalWrite(ACC, HIGH); // Аксессуары включены
    digitalWrite(Ign1, HIGH); // Зажигание включено
    digitalWrite(Ign2, HIGH); // Зажигание включено
    digitalWrite(Starter, LOW); // Стартер отключен
    digitalWrite(Rled, LOW); // Красный сид выключен
    digitalWrite(Gled, LOW); // Зеленый сид выключен
    digitalWrite(Bled, HIGH); // Синий сид включен
    if (digitalRead(Clutch) == LOW) // если нажато сцепление
    {
      if (currentTime >= (loopTime + 1)) // проверяем время
      {
        digitalWrite(Bled, LOW); // Синий сид выключен
        analogWrite(Rled, brightness); // Передаём яркость сид
        brightness = brightness + fadeAmount;  // прибавляем шаг изменения яркости
        if (brightness <= 0 || brightness >= 255) {
          fadeAmount = -fadeAmount; // если достигли мин. или макс. значения, то идем в обратную сторону (реверс)
        }
        if (brightness >= 255) {
          brightness = 255; // устанавливаем предел чтобы не мигал
        }
        if (brightness <= 0) {
          brightness = 0; // устанавливаем предел чтобы не мигал
        }
        loopTime = currentTime; // синхронизируем время
      }
    }
    else {
      digitalWrite(Rled, LOW); // Гасим сид
      digitalWrite(Bled, HIGH); // Восстанавливаем сид
    }
    Serial.println("IGN ON ENGIN OFF");   // Передаем режим работы
  }

  if (regim == 4) // четвертый режим - основной рабочий
  { rej4: // ссылка на 4 режим
    digitalWrite(ACC, HIGH); // Аксессуары включены
    digitalWrite(Ign1, HIGH); // Зажигание включено
    digitalWrite(Ign2, HIGH); // Зажигание включено
    digitalWrite(Starter, LOW); // Стартер отключен
    if (analogRead(Dimmer) >= 200) {
      analogWrite(Rled, 50); // Если включены габариты красный снижает яркость чтобы не слепить
    } else {
      digitalWrite(Rled, HIGH);
    }
    digitalWrite(Gled, LOW); // Зеленый сид выключен
    digitalWrite(Bled, LOW); // Синий сид выключен
    Serial.println("ENGIN ON"); // Передаем режим работы
    if (tp < 50) {
      regim = 3; // если заглох переходим в режм 3
      goto rej3;
    }
  }

  if (regim == 5) // пятый режим - пуск двигателя
  { rej5: // ссылка на 5 режим
    if (tp >= ob_start) {
      digitalWrite(Starter, LOW); // Защита автозапуска
      regim = 4;
      goto rej4;
    }
    digitalWrite(ACC, LOW); // Аксессуары выключены
    digitalWrite(Ign1, HIGH); // Включить зажигание
    digitalWrite(Ign2, LOW); // Зажигание отключено
    digitalWrite(Gled, LOW); // Зеленый сид выключен
    digitalWrite(Bled, LOW); // Синий сид выключен
    delay (delay_ign); // Задержка на бензонасос и датчики
    previousMillis = millis(); // время для ограничения стартера
    RpreviousMillis = millis(); // время для мигания красного сид
    if (bouncer.read() == 0 && digitalRead(Clutch) == 0) // если кнопка отпущена и нажато сцепление
    { auto_start: // подпрограмма автозапуска
      currentTime = millis(); // текущее время
      if (currentTime - RpreviousMillis > inter) {
        RpreviousMillis = currentTime;  // мигание сид
        digitalWrite(Rled, !digitalRead(Rled));
      }
      if (tp <= ob_start && digitalRead(Clutch) == 0) // если не заведена, но сцепление нажато
      {
        digitalWrite(Starter, HIGH); // включаем стартер
        Serial.print("Starter ON AUTO :"); Serial.println (tp); // информация в порт
      }
      if (tp >= ob_start) {
        digitalWrite(Starter, LOW); // если завелась, отключаем стартер, сообщаем, переходим в режим 4
        regim = 4;
        Serial.println("START Ok!!!");
        goto rej4;
      }
      if (currentTime - previousMillis > astop_Starter) {
        digitalWrite(Starter, LOW); // если сработал таймаут, отключаем стартер, сообщаем об ошибке, переходим в режим 3
        tone (Buzzer, 3500, 1000);
        regim = 3;
        Serial.println("Error: TimeOut");
        goto rej3;
      }
      if (digitalRead(Button) == 1) {
        digitalWrite(Starter, LOW); // если еще раз нажали кнопку, отключаем стартер, сообщаем об ошибке, переходим в режим 3
        regim = 3;
        Serial.println("Error: Press Button");
        delay (1000);
        goto rej3;
      }
      goto auto_start; // возврат в начало подпрограммы автозапуска.
    }
    else // если не сработало первое правило (кнопка отпущена нажато сцепление)
    { manual_start: // подпрограмма ручного запуска
      if (digitalRead(Button) == 1) // кнопка нажата, начинается ручной запуск
      {
        currentTime = millis(); // текущее время
        if (currentTime - RpreviousMillis > inter) {
          RpreviousMillis = currentTime;  // мигаем сид
          digitalWrite(Rled, !digitalRead(Rled));
        }
        digitalWrite(Starter, HIGH); // включаем стартер
        Serial.print("Starter ON MANUAL :"); Serial.println (tp); // передаем информацию
      }
      else {
        digitalWrite(Starter, LOW); // если отпустили кнопку отключаем стартер, сообщаем об ошибке, переходим в режим 3
        regim = 3;
        Serial.println("Start OFF");
        goto rej3;
      }
      if (currentTime - previousMillis > mstop_Starter) {
        digitalWrite(Starter, LOW); // если сработал таймаут, отключаем стартер, сообщаем об ошибке, переходим в режим 3
        tone (Buzzer, 3500, 1000);
        regim = 3;
        Serial.println("Error: TimeOut");
        goto rej3;
      }
      goto manual_start; // возврат в начало подпрограммы ручного запуска
    }
  }
}


void tahometr() // подпрограмма измерения оборотов
{
  if (!tt) {
    micros_th = micros();
  }
  else {
    tp = (60000000 / (micros() - micros_th));
  }
  tt = !tt;
  tz = 10;
}

Блин схему никак, я их обычно удаляю после того как нарисовал печатку. 

Клапауций 234
Offline
Зарегистрирован: 24.10.2016

mralvad пишет:

Блин схему никак, я их обычно удаляю после того как нарисовал печатку. 

молодец.

mralvad
Offline
Зарегистрирован: 22.11.2016

это просто вторая плата, первая уже месяц стоит в авто и без нареканий. и сэтой то проблем нет, просто перекинуть на другой пин вход педали сцепления и припоять перемычку, уже проверил работает.  интересно что стало с 8 пином и почему. и вообще все же лучше использовать внутренние резисторы или внешние?

Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Лучше ставь внешние.

gena
Offline
Зарегистрирован: 04.11.2012

  Вывести скетч "блинк" на этот больной пин. Оно и видно станет.

Лично я предпочитаю для подтяжки внешние резисторы. Для длинных сигнальных линий  - номинал поменьше.