ARDUINO Флажки!!!

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
Ребята накидал алгоритм,
не могу правильно реализовать

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);
}
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
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 Июл 2018
2,132
412
Москва
wan-derer.ru
@WoostKember, Начинай повторный просмотр. Увидишь то на что не обратил внимания раньше. И надо не толькоо смотреть, надо делать примеры, разбираться как он работают, вносить свои правки, добиваться другого поведения программы и пр.
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
176
Киев
Если у тебя все заработало как надо, то лучше так и оставь и ничего не трогай
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
Если у тебя все заработало как надо, то лучше так и оставь и ничего не трогай
я понимаю! но хотелось бы научится писать это же код но по короче, а не как я в фле настроил !!!!
нужно просто при нажатии подать на 13 пин хай сигнал и подержать его 4 секунды! ))
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
176
Киев
я понимаю! но хотелось бы научится писать это же код но по короче, а не как я в фле настроил !!!!
нужно просто при нажатии подать на 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);
}
}
}
 
Изменено:

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
Если я ничего не напутал то вот тебе пища для размышления

#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 строка )))
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
Попробуй убрать из скетча 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);
}
}

не работает но конпелируется)
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
А кнопка как подключена?
я вкл и в режиме imputpullup и инпут с подтяжкой и на + и на - не в одном не работает. который первый написан был в том он вкл как положено и выключал через N количество, но только в одном цыкле. а второй код на него вобще реакции нету
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
176
Киев
попробуй этот код, но самое важное правильно кнопку подключи

#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);
}
}
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
попробуй этот код, но самое важное правильно кнопку подключи

#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);
}
}

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

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

★★★★✩✩✩
2 Авг 2018
727
208
не работает. мб с библиотекой что то ))
В скетче ошибка. Если в голове не можешь прокрутить программу по шагам, понимая на каждом шаге, чему равны переменные, то расставляй отладочный вывод в монитор порта в ключевых местах.
Проблема в том, что гаснет сразу, а не через 4 секунды? Смотри, при каком условии гаснет диод, выводи там же в монитор порта значения переменных, от которых зависит условие.
 

Fleshdeck

★★★✩✩✩✩
19 Янв 2019
349
176
Киев
такая же история))))
не работает. мб с библиотекой что то ))
мой безобразный скетч работает а ваш нет!!! через раз мигнет и пропадает. в порт на нажатие реагирует, а на выходе через раз при нажатие диод дергается на пол секунды
хорошо, вот тебе из урока про кнопку
код рабочий сам проверил в эмуляторе


boolean butt_flag = 0;
boolean butt;
boolean led_flag = 0;
unsigned long last_press, standby_timer;
void setup() {
pinMode(A0, INPUT_PULLUP);
Serial.begin(9600);
pinMode(13, OUTPUT);
}

void loop() {
butt = !digitalRead(A0);

if (butt == 1 && butt_flag == 0 && millis() - last_press > 100) {
butt_flag = 1;
Serial.println("Button pressed");
led_flag = !led_flag;
digitalWrite(13, led_flag);
last_press = millis();
standby_timer = millis();
}
if (butt == 0 && butt_flag == 1) {
butt_flag = 0;
Serial.println("Button released");
}
if (millis() - standby_timer > 4000) {
digitalWrite(13, LOW);
}
}
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
вобщем короче без библиотек походу не сделать

вот работает этот и все
bool _gtv1;
bool _trgrt1 = 0;//
bool _trgrt1I = 0;//
bool BUTTS = 0;
bool BUTT = 0;
unsigned long BUTTP = 0UL;
bool _timer1I = 0;
bool _timer1O = 0;
unsigned long _timer1P = 0UL;
void setup()
{
pinMode(12, INPUT);
pinMode(13, OUTPUT);

BUTT = digitalRead(12);
}
void loop()
{
bool BUTT_TMP = (digitalRead (12));

if (BUTTS)
{
if (millis() >= (BUTTP + 40))
{BUTT= BUTT_TMP; BUTTS=0;}
}
else
{
if (BUTT_TMP != BUTT )
{BUTTS=1; BUTTP = millis();}
}




//Плата:1
//Наименование:поднятие стеклодоводчиков
if (_gtv1) { if (_trgrt1I) { _trgrt1 = 0;} else {_trgrt1 = 1; _trgrt1I = 1;} } else {_trgrt1 = 0; _trgrt1I = 0;};
if(_trgrt1) {_timer1O = 1; _timer1I = 1;} else { if(_timer1I) {_timer1I = 0; _timer1P = millis();} else { if (_timer1O) {if ( _isTimer(_timer1P, 3600)) _timer1O = 0;}}}
digitalWrite(13, _timer1O);
_gtv1 = BUTT;




}
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));}
}
 

Nick_SPb

★✩✩✩✩✩✩
1 Ноя 2018
55
13
Автор, для того что бы получить полноценный ответ... опишите текстом алгоритм работы вашего устройства, набросайте эл. схему и не забудьте указать в каком состоянии находятся пины вашего МК.
 

WoostKember

✩✩✩✩✩✩✩
9 Июл 2019
14
0
pinMode(14, INPUT);
pinMode(13, OUTPUT);
digitalWrite(13, LOW);
если на 14 поступает короткий импульс HIGH
то на 13 пин подается HIGH продолжительностью 4 секунды!
 

Вложения