ARDUINO Флажки!!!

09.07.2019
14
0
1
#1
Ребята накидал алгоритм,
не могу правильно реализовать

void loop() {

boolean start = !digitalRead(5); кнопка старта
boolean tormos = !digitalRead(3); лягушка педали тормоза
boolean siga = !digitalRead(4); сигнализация (после снятия сигнализации идет HIGH сигнал)
boolean taho = !digitalRead(2); тахометр
boolean acc = digitalRead(6); ацц
boolean ingine = digitalRead(7); зажигание
boolean starter = digitalRead(8); стартер
boolean windowsin = !digitalRead(10);
boolean windowsout = digitalRead(11);
boolean triger = !digitalRead(9); тригер двери ( при открытие двери поступает LOW сигнал при закрытии нету ничего)

if (siga == 1 && triger == 1 && start == 0 && tormos == 0){
digitalWrite(6,1);
}
else if (siga == 1 && triger == 1 && start == 1 && tormos == 0){
digitalWrite(6,1);
digitalWrite(7,1);
}
else if (siga == 1 && triger == 1 && start == 1 && tormos == 1){
digitalWrite(6,0);
digitalWrite(7,1);
delay(3000);
digitalWrite(8,1);
}
else if (siga == 1 && triger == 0 && start == 1 && tormos == 0){
digitalWrite(6,1);
digitalWrite(7,1);
}
else if (siga == 1 && triger == 0 && start == 1 && tormos == 1){
digitalWrite(6,0);
digitalWrite(7,1);
delay(3000);
digitalWrite(8,1);
}
else {
digitalWrite(6,0);
digitalWrite(7,0);
digitalWrite(8,0);
}
 
09.07.2019
14
0
1
#5
pinMode(A0,INPUT);/
pinMode(13,OUTPUT);

как сделать элементарное:
нажал на пин А0 ( подал HIGH )
и на пине 13 появилось (HIGH) провисело 4 секунды и отключилось.


bool _bounseInputA0S = 0;
bool _bounseInputA0O = 0;
unsigned long _bounseInputA0P = 0UL;
bool _trgrt1 = 0;
bool _trgrt1I = 0;
bool _tim1I = 0;
bool _tim1O = 0;
unsigned long _tim1P = 0UL;
void setup()
{
pinMode(14, INPUT);
pinMode(13, OUTPUT);

_bounseInputA0O = digitalRead(14);
}
void loop()
{
bool _bounceInputTmpA0 = (digitalRead (14));

if (_bounseInputA0S)
{
if (millis() >= (_bounseInputA0P + 40))
{_bounseInputA0O= _bounceInputTmpA0; _bounseInputA0S=0;}
}
else
{
if (_bounceInputTmpA0 != _bounseInputA0O )
{_bounseInputA0S=1; _bounseInputA0P = millis();}
}




//Плата:1
if (( (_bounseInputA0O) || (0) )) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if(_trgrt1) {_tim1O = 1; _tim1I = 1;} else { if(_tim1I) {_tim1I = 0; _tim1P = millis();} else { if (_tim1O) {if ( _isTimer(_tim1P, 5000)) _tim1O = 0;}}}
digitalWrite(13, _tim1O);




}
bool _isTimer(unsigned long startTime, unsigned long period )
{
unsigned long currentTime;
currentTime = millis();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
}

ВОТ ТАКОЙ КОДЯРЮ НАКАЛЯКАЛ В ФЛЕ !!! ВСЕ РАБОТАЕТ, ЕГО МОЖНО КАК ТО УМЕНЬШИТЬ? И СДЕЛАТЬ ПО КРАСИВЕЕ
 

Wan-Derer

Модератор
Команда форума
31.07.2018
946
139
53
Москва
wan-derer.ru
#7
@WoostKember, Начинай повторный просмотр. Увидишь то на что не обратил внимания раньше. И надо не толькоо смотреть, надо делать примеры, разбираться как он работают, вносить свои правки, добиваться другого поведения программы и пр.
 
09.07.2019
14
0
1
#9
Если у тебя все заработало как надо, то лучше так и оставь и ничего не трогай
я понимаю! но хотелось бы научится писать это же код но по короче, а не как я в фле настроил !!!!
нужно просто при нажатии подать на 13 пин хай сигнал и подержать его 4 секунды! ))
 
19.01.2019
139
23
18
Киев
#10
я понимаю! но хотелось бы научится писать это же код но по короче, а не как я в фле настроил !!!!
нужно просто при нажатии подать на 13 пин хай сигнал и подержать его 4 секунды! ))
Если я ничего не напутал то вот тебе пища для размышления

#include <GyverButton.h>
#define PIN A0
GButton butt1(PIN);
unsigned long standby_timer;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);

butt1.setDebounce(50);
butt1.setTimeout(500);
butt1.setClickTimeout(300);
butt1.setType(LOW_PULL);
butt1.setDirection(NORM_OPEN);

}

void loop() {

while (1){
butt1.tick();

if(butt1.isClick()){
standby_timer = millis();
digitalWrite(13, HIGH);
}

if (millis() - standby_timer > 4000) {
digitalWrite(13, LOW);
}
}
}
 
Последнее редактирование:
09.07.2019
14
0
1
#11
Если я ничего не напутал то вот тебе пища для размышления

#include <GyverButton.h>
#define PIN A0
GButton butt1(PIN);
unsigned long standby_timer;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);

butt1.setDebounce(50);
butt1.setTimeout(500);
butt1.setClickTimeout(300);
butt1.setType(LOW_PULL);
butt1.setDirection(NORM_OPEN);

}

void loop() {

while (1){
butt1.tick();

if(butt1.isClick()){
standby_timer = millis();
digitalWrite(13, HIGH);
}

if (millis() - standby_timer > 4000) {
digitalWrite(13, LOW);
}
}
}
спасибо за помощь! буду разжовывать сидеть! этот код выполняется только один раз ! что бы еще раз нажать надо перезагрузить плату
но уже не плохо! 31 строка )))
 
09.07.2019
14
0
1
#13
Попробуй убрать из скетча while(1){

}

#include <GyverButton.h>
#define PIN 12
GButton butt1(12);
unsigned long standby_timer;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);

butt1.setDebounce(50);
butt1.setTimeout(500);
butt1.setClickTimeout(300);
butt1.setType(LOW_PULL);
butt1.setDirection(NORM_OPEN);

}

void loop() {


butt1.tick();

if(butt1.isClick()){
digitalWrite(13, HIGH);
}

if (millis() - standby_timer > 6000) {
digitalWrite(13, LOW);
}
}

не работает но конпелируется)
 
09.07.2019
14
0
1
#17
я вкл и в режиме imputpullup и инпут с подтяжкой и на + и на - не в одном не работает. который первый написан был в том он вкл как положено и выключал через N количество, но только в одном цыкле. а второй код на него вобще реакции нету
 
19.01.2019
139
23
18
Киев
#18
попробуй этот код, но самое важное правильно кнопку подключи

#include <GyverButton.h>
#define PIN A0
GButton butt1(PIN);
unsigned long standby_timer;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);

butt1.setDebounce(90); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(300); // настройка таймаута на удержание (по умолчанию 500 мс)

// HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC (PIN --- КНОПКА --- GND)
// LOW_PULL - кнопка подключена к VCC, пин подтянут к GND
butt1.setType(HIGH_PULL);

// NORM_OPEN - нормально-разомкнутая кнопка
// NORM_CLOSE - нормально-замкнутая кнопка
butt1.setDirection(NORM_OPEN);

// MANUAL - нужно вызывать функцию tick() вручную
// AUTO - tick() входит во все остальные функции и опрашивается сама!
butt1.setTickMode(AUTO);
}

void loop() {

if(butt1.isClick()){
digitalWrite(13, HIGH);
}

if (millis() - standby_timer > 4000) {
digitalWrite(13, LOW);
}
}
 
09.07.2019
14
0
1
#19
попробуй этот код, но самое важное правильно кнопку подключи

#include <GyverButton.h>
#define PIN A0
GButton butt1(PIN);
unsigned long standby_timer;

void setup() {
pinMode(13, OUTPUT);
digitalWrite(13, LOW);

butt1.setDebounce(90); // настройка антидребезга (по умолчанию 80 мс)
butt1.setTimeout(300); // настройка таймаута на удержание (по умолчанию 500 мс)

// HIGH_PULL - кнопка подключена к GND, пин подтянут к VCC (PIN --- КНОПКА --- GND)
// LOW_PULL - кнопка подключена к VCC, пин подтянут к GND
butt1.setType(HIGH_PULL);

// NORM_OPEN - нормально-разомкнутая кнопка
// NORM_CLOSE - нормально-замкнутая кнопка
butt1.setDirection(NORM_OPEN);

// MANUAL - нужно вызывать функцию tick() вручную
// AUTO - tick() входит во все остальные функции и опрашивается сама!
butt1.setTickMode(AUTO);
}

void loop() {

if(butt1.isClick()){
digitalWrite(13, HIGH);
}

if (millis() - standby_timer > 4000) {
digitalWrite(13, LOW);
}
}

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

Александр Симонов

Проходящий мимо
02.08.2018
162
27
38
#20
не работает. мб с библиотекой что то ))
В скетче ошибка. Если в голове не можешь прокрутить программу по шагам, понимая на каждом шаге, чему равны переменные, то расставляй отладочный вывод в монитор порта в ключевых местах.
Проблема в том, что гаснет сразу, а не через 4 секунды? Смотри, при каком условии гаснет диод, выводи там же в монитор порта значения переменных, от которых зависит условие.