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

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

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

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

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

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

1pinMode(t1, INPUT);
2digitalWrite(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
001#include <Bounce2.h> // подключаем библиотеку подавления дребезга Bounce 2
002#define pressed_long 2000 // длительность долговременное нажатия
003#define max_mode 3 // количество режимов
004#define Button 7 // пин кнопки
005#define Clutch 8 // пин входа сцепления
006#define Buzzer 3 // пин зуммера
007#define ACC 4 // пин аксессуаров
008#define Ign1 5 // пин зажигания 1
009#define Ign2 12 // пин зажигания 2
010#define Starter 11 // пин стартера
011#define Rled 6 // пин красного сид
012#define Gled 9 // пин зеленого сид
013#define Bled 10 // пин синего сид 
014#define Dimmer A4 // пин входа габаритов
015#define ob_start 100 // обороты запуска двигателя
016#define delay_ign 1800 // задержка перед включением стартера
017unsigned long astop_Starter = 3000; // ограничение автоматической работы стартера
018unsigned long mstop_Starter = 10000; // ограничение ручной работы стартера
019unsigned long previousMillis = 0; // счетчик времени
020 
021// Тахометр для ускорения и точности переменные помещаются в ОЗУ командой volatile:
022volatile unsigned long micros_th = 0; // переменная времени импульса
023volatile byte tz = 0; // счетчик обнуления
024volatile unsigned int tp = 0; // обороты
025volatile boolean tt = false; // триггер тахометра
026 
027 
028// Установки кнопки:
029int regim = 1; // начальный режим
030Bounce bouncer = Bounce(); // создаем экземпляр класса Bounce
031unsigned long pressed_moment; // счетчик времени нажатия
032 
033// Установки светодиодов:
034int brightness = 0; // начальная яркость
035int fadeAmount = 7; // шаг изменеия яркости
036unsigned long inter = 100; // частота мигания
037unsigned long currentTime; // счетчик времени
038unsigned long loopTime; // период сид
039unsigned long RpreviousMillis; // период сид
040 
041void setup()
042{
043  attachInterrupt(0, tahometr, FALLING); // активация прерывания для тахотера
044  pinMode(Button, INPUT); // объявляем режим работы пина
045  pinMode(Clutch, INPUT); // объявляем режим работы пина
046  pinMode(Buzzer, OUTPUT); // объявляем режим работы пина
047  pinMode(ACC, OUTPUT); // объявляем режим работы пина
048  pinMode(Ign1, OUTPUT); // объявляем режим работы пина
049  pinMode(Ign2, OUTPUT); // объявляем режим работы пина
050  pinMode(Starter, OUTPUT); // объявляем режим работы пина
051  pinMode(Rled, OUTPUT); // объявляем режим работы пина
052  pinMode(Gled, OUTPUT); // объявляем режим работы пина
053  pinMode(Bled, OUTPUT); // объявляем режим работы пина
054  pinMode(Dimmer, INPUT); // объявляем режим работы пина
055  digitalWrite(2, HIGH); // включаем вход
056  digitalWrite(Clutch, HIGH); // включаем выход
057  digitalWrite(ACC, LOW); // выключаем выход
058  digitalWrite(Ign1, LOW); // выключаем выход
059  digitalWrite(Ign2, LOW); // выключаем выход
060  digitalWrite(Starter, LOW); // выключаем выход
061  digitalWrite(Rled, LOW); // выключаем сид
062  digitalWrite(Gled, LOW); // выключаем сид
063  digitalWrite(Bled, LOW); // выключаем сид
064  bouncer .attach(Button); // привязываем библиотеку кнопки к выводу Button
065  bouncer .interval(20); // устанавливаем период дребезга = 20 мс
066  Serial.begin(9600); // установка Serial-порта на скорость 9600 бит/сек
067  currentTime = millis(); // устанавливаем время
068  loopTime = currentTime; // синхронизируем время
069}
070 
071 
072void loop()
073{
074  currentTime = millis(); // счетчик привязываем ко времени
075  if (tz != 0) {
076    tz--;
077  } else {
078    tp = 0;
079  }; // обработка тахометра
080  Serial.print("Tacho: ");
081  Serial.println (tp);
082  //delay (500);
083 
084  if (bouncer.update()) // если произошло событие
085  {
086    if (bouncer.read() == 1) // если кнопка нажата
087    {
088      pressed_moment = millis(); // запоминаем время нажатия
089      tone(Buzzer, 3500, 60); // подаем сигнал что нажата кнопка
090    }
091    else // кнопка отпущена
092    {
093      if ((millis() - pressed_moment) < pressed_long) // если кнопка была нажата кратковременно
094      {
095        if (regim == 4 && digitalRead(Clutch) == LOW) {
096          regim = 2; // если был включен 4 режим и нажато сцепление устанавливаем 2, обнуляем момент нажатия
097          pressed_moment = 0;
098          goto rej2;
099        }
100        if (digitalRead (Clutch) == HIGH) // сцепление при этом не нажато
101        {
102          regim++; // увеличиваем счетчик текушего режима
103          if (regim > max_mode) {
104            regim = 1; // при достижении максимального режима возвращаемся в режим1
105          }
106          pressed_moment = 0; // обнуляем момент нажатия
107        }
108        else
109        {
110          if (regim == 4) {
111            regim = 1; // если был включен 4 режим устанавливаем 1, обнуляем момент нажатия
112            pressed_moment = 0;
113            goto rej1;
114          }
115          else // иначе, если нажато сцепление:
116          {
117            regim = 5; // устанавливаем 5 режим
118            pressed_moment = 0; // обнуляем момент нажатия
119            tone(Buzzer, 3500, 100); // звуковой сигнал
120            delay(200);
121            tone(Buzzer, 3500, 100); // звуковой сигнал
122            goto rej5;
123          }
124        }
125      }
126    }
127  }
128  if ((pressed_moment > 0) && ((millis() - pressed_moment) > pressed_long)) // кнопка удерживалась долго
129  {
130    if (regim == 4) // если режим 4
131    {
132      regim = 1; // то устанавливаем режим 1
133      pressed_moment = 0; // обнуляем момент нажатия
134      goto rej1; // переход на 1 режим
135    }
136    if (regim == 1 || regim == 2 || regim == 3) // если режим 1, 2 или 3
137    {
138      regim = 5; // то переходим к 5
139      pressed_moment = 0; // обнуляем момент нажатия
140      tone(Buzzer, 3500, 100); // подаем много звуковых сигналов
141      delay(200);              // потому как начинается запуск без защиты тормозом
142      tone(Buzzer, 3500, 100); // для не стандартных ситуаций
143      delay(200);
144      tone(Buzzer, 3500, 100); // звуковой сигнал
145      delay(200);
146      tone(Buzzer, 3500, 100); // звуковой сигнал
147      goto rej5; // переход на 5 режим
148    }
149  }
150 
151  if (regim == 1) // первый режим - все выключено
152  { rej1: // ссылка на 1 режим
153    digitalWrite(ACC, LOW); // Аксессуары отключены
154    digitalWrite(Ign1, LOW); // Зажигание отключено
155    digitalWrite(Ign2, LOW); // Зажигание отключено
156    digitalWrite(Starter, LOW); // Стартер отключен
157    digitalWrite(Rled, LOW); // Красный сид выключен
158    digitalWrite(Gled, LOW); // Зеленый сид выключен
159    digitalWrite(Bled, LOW); // Синий сид выключен
160    if (digitalRead(Clutch) == LOW) // если нажато сцепление
161    {
162      if (currentTime >= (loopTime + 1)) // проверяем время
163      {
164        analogWrite(Rled, brightness);    // Передаём яркость сид
165        brightness = brightness + fadeAmount;  // Прибавляем шаг изменения яркости
166        if (brightness <= 0 || brightness >= 255) {
167          fadeAmount = -fadeAmount; // если достигли мин. или макс. значения, то идем в обратную сторону (реверс)
168        }
169        if (brightness >= 255) {
170          brightness = 255; // устанавливаем предел чтобы не мигал
171        }
172        if (brightness <= 0) {
173          brightness = 0; // устанавливаем предел чтобы не мигал
174        }
175        loopTime = currentTime; // синхронизируем время
176      }
177    } else {
178      digitalWrite(Rled, LOW); // Гасим сид
179    }
180    Serial.println("ALL OFF:");  // Передаем режим рабоы
181  }
182 
183  if (regim == 2) // второй режим - включены аксессуары
184  { rej2: // ссылка на 2 режим
185    digitalWrite(ACC, HIGH); // Аксессуары включены
186    digitalWrite(Ign1, LOW); // Зажигание отключено
187    digitalWrite(Ign2, LOW); // Зажигание отключено
188    digitalWrite(Starter, LOW); // Стартер отключен
189    digitalWrite(Rled, LOW); // Красный сид выключен
190    digitalWrite(Gled, HIGH); // Зеленый сид включен
191    digitalWrite(Bled, LOW); // Синий сид выключен
192    if (digitalRead(Clutch) == LOW) // если нажато сцепление
193    {
194      if (currentTime >= (loopTime + 1)) // проверяем время
195      {
196        digitalWrite(Gled, LOW); // Выключаем зеленый сид
197        analogWrite(Rled, brightness); // Передаём яркость сид
198        brightness = brightness + fadeAmount;  // прибавляем шаг изменения яркости
199        if (brightness <= 0 || brightness >= 255) {
200          fadeAmount = -fadeAmount; // если достигли мин. или макс. значения, то идем в обратную сторону (реверс)
201        }
202        if (brightness >= 255) {
203          brightness = 255; // устанавливаем предел чтобы не мигал
204        }
205        if (brightness <= 0) {
206          brightness = 0; // устанавливаем предел чтобы не мигал
207        }
208        loopTime = currentTime; // синхронизируем время
209      }
210    }
211    else {
212      digitalWrite(Rled, LOW); //Гасим сид
213      digitalWrite(Gled, HIGH); // Восстанавливаем сид
214    }
215 
216    Serial.println("ACC ONLY"); // Передаем режим работы
217  }
218 
219  if (regim == 3) // третий режим - ручное включение зажигания
220  { rej3: // ссылка на 3 режим
221    if (tp >= ob_start) {
222      digitalWrite(Starter, LOW);  // защита автозапуска
223      regim = 4;
224      goto rej4;
225    }
226    digitalWrite(ACC, HIGH); // Аксессуары включены
227    digitalWrite(Ign1, HIGH); // Зажигание включено
228    digitalWrite(Ign2, HIGH); // Зажигание включено
229    digitalWrite(Starter, LOW); // Стартер отключен
230    digitalWrite(Rled, LOW); // Красный сид выключен
231    digitalWrite(Gled, LOW); // Зеленый сид выключен
232    digitalWrite(Bled, HIGH); // Синий сид включен
233    if (digitalRead(Clutch) == LOW) // если нажато сцепление
234    {
235      if (currentTime >= (loopTime + 1)) // проверяем время
236      {
237        digitalWrite(Bled, LOW); // Синий сид выключен
238        analogWrite(Rled, brightness); // Передаём яркость сид
239        brightness = brightness + fadeAmount;  // прибавляем шаг изменения яркости
240        if (brightness <= 0 || brightness >= 255) {
241          fadeAmount = -fadeAmount; // если достигли мин. или макс. значения, то идем в обратную сторону (реверс)
242        }
243        if (brightness >= 255) {
244          brightness = 255; // устанавливаем предел чтобы не мигал
245        }
246        if (brightness <= 0) {
247          brightness = 0; // устанавливаем предел чтобы не мигал
248        }
249        loopTime = currentTime; // синхронизируем время
250      }
251    }
252    else {
253      digitalWrite(Rled, LOW); // Гасим сид
254      digitalWrite(Bled, HIGH); // Восстанавливаем сид
255    }
256    Serial.println("IGN ON ENGIN OFF");   // Передаем режим работы
257  }
258 
259  if (regim == 4) // четвертый режим - основной рабочий
260  { rej4: // ссылка на 4 режим
261    digitalWrite(ACC, HIGH); // Аксессуары включены
262    digitalWrite(Ign1, HIGH); // Зажигание включено
263    digitalWrite(Ign2, HIGH); // Зажигание включено
264    digitalWrite(Starter, LOW); // Стартер отключен
265    if (analogRead(Dimmer) >= 200) {
266      analogWrite(Rled, 50); // Если включены габариты красный снижает яркость чтобы не слепить
267    } else {
268      digitalWrite(Rled, HIGH);
269    }
270    digitalWrite(Gled, LOW); // Зеленый сид выключен
271    digitalWrite(Bled, LOW); // Синий сид выключен
272    Serial.println("ENGIN ON"); // Передаем режим работы
273    if (tp < 50) {
274      regim = 3; // если заглох переходим в режм 3
275      goto rej3;
276    }
277  }
278 
279  if (regim == 5) // пятый режим - пуск двигателя
280  { rej5: // ссылка на 5 режим
281    if (tp >= ob_start) {
282      digitalWrite(Starter, LOW); // Защита автозапуска
283      regim = 4;
284      goto rej4;
285    }
286    digitalWrite(ACC, LOW); // Аксессуары выключены
287    digitalWrite(Ign1, HIGH); // Включить зажигание
288    digitalWrite(Ign2, LOW); // Зажигание отключено
289    digitalWrite(Gled, LOW); // Зеленый сид выключен
290    digitalWrite(Bled, LOW); // Синий сид выключен
291    delay (delay_ign); // Задержка на бензонасос и датчики
292    previousMillis = millis(); // время для ограничения стартера
293    RpreviousMillis = millis(); // время для мигания красного сид
294    if (bouncer.read() == 0 && digitalRead(Clutch) == 0) // если кнопка отпущена и нажато сцепление
295    { auto_start: // подпрограмма автозапуска
296      currentTime = millis(); // текущее время
297      if (currentTime - RpreviousMillis > inter) {
298        RpreviousMillis = currentTime;  // мигание сид
299        digitalWrite(Rled, !digitalRead(Rled));
300      }
301      if (tp <= ob_start && digitalRead(Clutch) == 0) // если не заведена, но сцепление нажато
302      {
303        digitalWrite(Starter, HIGH); // включаем стартер
304        Serial.print("Starter ON AUTO :"); Serial.println (tp); // информация в порт
305      }
306      if (tp >= ob_start) {
307        digitalWrite(Starter, LOW); // если завелась, отключаем стартер, сообщаем, переходим в режим 4
308        regim = 4;
309        Serial.println("START Ok!!!");
310        goto rej4;
311      }
312      if (currentTime - previousMillis > astop_Starter) {
313        digitalWrite(Starter, LOW); // если сработал таймаут, отключаем стартер, сообщаем об ошибке, переходим в режим 3
314        tone (Buzzer, 3500, 1000);
315        regim = 3;
316        Serial.println("Error: TimeOut");
317        goto rej3;
318      }
319      if (digitalRead(Button) == 1) {
320        digitalWrite(Starter, LOW); // если еще раз нажали кнопку, отключаем стартер, сообщаем об ошибке, переходим в режим 3
321        regim = 3;
322        Serial.println("Error: Press Button");
323        delay (1000);
324        goto rej3;
325      }
326      goto auto_start; // возврат в начало подпрограммы автозапуска.
327    }
328    else // если не сработало первое правило (кнопка отпущена нажато сцепление)
329    { manual_start: // подпрограмма ручного запуска
330      if (digitalRead(Button) == 1) // кнопка нажата, начинается ручной запуск
331      {
332        currentTime = millis(); // текущее время
333        if (currentTime - RpreviousMillis > inter) {
334          RpreviousMillis = currentTime;  // мигаем сид
335          digitalWrite(Rled, !digitalRead(Rled));
336        }
337        digitalWrite(Starter, HIGH); // включаем стартер
338        Serial.print("Starter ON MANUAL :"); Serial.println (tp); // передаем информацию
339      }
340      else {
341        digitalWrite(Starter, LOW); // если отпустили кнопку отключаем стартер, сообщаем об ошибке, переходим в режим 3
342        regim = 3;
343        Serial.println("Start OFF");
344        goto rej3;
345      }
346      if (currentTime - previousMillis > mstop_Starter) {
347        digitalWrite(Starter, LOW); // если сработал таймаут, отключаем стартер, сообщаем об ошибке, переходим в режим 3
348        tone (Buzzer, 3500, 1000);
349        regim = 3;
350        Serial.println("Error: TimeOut");
351        goto rej3;
352      }
353      goto manual_start; // возврат в начало подпрограммы ручного запуска
354    }
355  }
356}
357 
358 
359void tahometr() // подпрограмма измерения оборотов
360{
361  if (!tt) {
362    micros_th = micros();
363  }
364  else {
365    tp = (60000000 / (micros() - micros_th));
366  }
367  tt = !tt;
368  tz = 10;
369}

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

Клапауций 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

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

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