помогите реализовать новечку скейч

virfl
Offline
Зарегистрирован: 11.11.2017

здраввствуйте помогите.

Когда брался за это думал  смогу выглядело просто, после 2 суток руки опустились.

задача в том, при появления сигнала +5v на pin3 на pin4 появился сигнал +5v на 10 секунд, при повторном появлении сигнала на pin3 чтобы появился на pin5 5v на 15сек и так по кругу

5v=pin3 pin4=5v на 10 сек  pin5=0   1 сигнал
5v=pin3 pin5=5v на 15 сек  pin4=0   2 сигнал

 

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014

Ну если очень по простому то пробуйте

#define pin3 3
#define pin4 4
#define pin5 5
bool regim;

void setup(){
  pinMode(pin3, INPUT);
  pinMode(pin4, OUTPUT);
  pinMode(pin5, OUTPUT);
}

void loop(){
  if (digitalRead(pin3)== HIGH && regim == 0)
  {
    regim = 1;
    digitalWrite(pin4,HIGH);
    delay(10000);
    digitalWrite(pin4,LOW);
  }
  if (digitalRead(pin3)== HIGH && regim == 1)
  {
    regim = 0;
    digitalWrite(pin5,HIGH);
    delay(20000);
    digitalWrite(pin5,LOW);
  }
}

 

vk007
Offline
Зарегистрирован: 16.06.2015

Задача поставлена не в полном объеме для нормальной реализации.

Как часто на pin3 появляется сигнал? Что должно происходить если сигнал появится в момент, когда включен pin4 и 10 сек еще не прошло - ничего не делать или включать pin5? Для pin5 аналогично - игнорировать и ждать 15 сек или включать pin4?

virfl
Offline
Зарегистрирован: 11.11.2017

Сигнал не часто происходит, одновременно включать  pin4 и pin5 нельзя, при подаче сигнала во время интервала в указанное промежуток времени можно произвести сигнал на pin5 по окончании времени 10 сек.

Пример: pin4 и pin5 как действие открыть закрыть, дверь закрывается по pin4 открывается по pin5  нажал во время открытия она открылась потом закрылась.

virfl
Offline
Зарегистрирован: 11.11.2017

я пробовал по этому коду но он испорчен чемто наверно


int Levo = 3;
int Pravo = 4; 
int ButPin = 7;
int flag = 0; 
int regim = 0; 


void setup()
{
pinMode(Levo, OUTPUT);
pinMode(Pravo, OUTPUT);
}

void loop()
{
if(digitalRead(ButPin) == HIGH && flag == 0)
{
regim ++;
flag = 1;

if(regim > 3) 
regim = 0;
}
}

if(digitalRead(ButPin) == LOW && flag == 1)
{
flag = 0;
}


if(regim == 0)
{
digitalWrite(Levo, LOW);
digitalWrite(Levo, LOW);
}

// РЕЖИМ 1: R
if(regim == 1)
{
digitalWrite(Levo, HIGH);
digitalWrite(Pravo, LOW);
}

// РЕЖИМ 2: G
if(regim == 2)
{
digitalWrite(Levo, LOW);
digitalWrite(Pravo, HIGH);
}
}

 

5N62V
Offline
Зарегистрирован: 25.02.2016

virfl пишет:

я пробовал по этому коду но он испорчен чемто наверно

похоже , что это код от какой-то другой технической задачи, явно не от той, что Вы описали.


DetSimen
DetSimen аватар
Offline
Зарегистрирован: 25.01.2017

virfl пишет:

я пробовал по этому коду но он испорчен чемто наверно

Протух.

romanvod
Offline
Зарегистрирован: 13.11.2017

Приветствую! Кое-что получилось с русификацией дисплея. Теперь возник вопрос как убрать непонятные символы (которые раньше были символом-стрелочкой в конце каждого слова в меню). Заместо этих стрелочек теперь выводится буква "л".

дисплей lcd1306 128х64 в прошивке repetor.