Работа с реле по времени

Det
Offline
Зарегистрирован: 08.04.2013

Здравствуйте.

Задумал сделать установку используя реле и Ардуино. Суть такова: есть LCD табло (16x2) и одно реле, но оно должно включаться и выключаться в разное время (3 сек работает, 5 нет, 6 работает, 20 нет). Эти данные я могу менять с кнопок.... Подскажите как лучше реализировать такую задачу?

Спасибо.

xDriver
xDriver аватар
Offline
Зарегистрирован: 14.08.2015

еще раз обращаю внимание обществености на дату регистрации, ник, и суть вопроса.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Лучше - реализовать путём написания кода. Если интервалы всегда одни и те же - проще. Если нужна привязка ко времени - нужна микросхема часов реального времени.

Начинать - надо с простого: подключить экран, научиться выводить туда информацию. Подключить кнопку - научиться работать с ней. Подключить часы - научиться работать с ними. Потом - всё это объединить, дописать логику включения/выключения - и всё, готово.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

xDriver пишет:

еще раз обращаю внимание обществености на дату регистрации, ник, и суть вопроса.

Ааааа.... Это у нас сегодня день троллинга, что ли? Спс, не приметил сходу.

Det
Offline
Зарегистрирован: 08.04.2013

Так а в чем дело?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Det пишет:

Так а в чем дело?

Да ни в чём, всё норм.

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Det пишет:

Так а в чем дело?

В том, что мужики тебя сильно уважают.

Человек, который интересуется ардуиной пять лет и при этом ТАК задаёт ТАКИЕ вопросы - это либо тролль,желающий подшутить над сообществом, либо идиот.

Заметь, второго никто даже не подумал - все подумали первое - уважают!

vvadim
Offline
Зарегистрирован: 23.05.2012

вот налетели аки коршуны.
может чел зарегистрировался и отвалил от темы.
а сейчас опять решил вернуться,
ЗЛЫЕ ВЫ.

 

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

DIYMan пишет:

ас сегодня день троллинга, что ли? Спс, не приметил сходу.

Зацени, что сказал САМ ещё год назад по поводу ТС - #11

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

МУЖИКИ!

А мы сегодня в соседней теме не с клономли ТС беседовали? Смотрите какая у ТС знакомая тема была - http://arduino.ru/forum/programmirovanie/podklyuchenie-50-svetodiodov

Вот, ... гадом буду!

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ворота пишет:

DIYMan пишет:

ас сегодня день троллинга, что ли? Спс, не приметил сходу.

Зацени, что сказал САМ ещё год назад по поводу ТС - #11

О, спс, раз САМ сказал - всё ясно :)

Det
Offline
Зарегистрирован: 08.04.2013

И снова всем привет)

Помогите оптимизировать...

#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
#include <EEPROM.h>
#define interval 1000
int Relay = 12;
unsigned int state = 0;
unsigned int t1, t11, t2, t22, t3, t33, t4, t44;
const int nextb = 8, start = 11;
const int upb = 9; int pupb = 0;
const int downb = 10; int pdownb = 0;
unsigned int buttonState1 = 0;
unsigned int buttonState2 = 0;
unsigned int buttonState3 = 0;
unsigned int buttonStateSart = 0;

void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  lcd.print("Start > > >");
  pinMode(nextb, INPUT_PULLUP);
  pinMode(upb, INPUT_PULLUP);
  pinMode(downb, INPUT_PULLUP);
  pinMode(start, INPUT_PULLUP);
  pinMode(Relay, OUTPUT);
  t1 = EEPROM.read(0);
  t11 = EEPROM.read(1);
  t2 = EEPROM.read(2);
  t22 = EEPROM.read(3);
  t3 = EEPROM.read(4);
  t33 = EEPROM.read(5);
  t4 = EEPROM.read(6);
  t44 = EEPROM.read(7);
  delay(500);
  lcd.clear();
}

void homeScreen() {

  lcd.setCursor(0, 0);
  lcd.print("T1");
  lcd.setCursor(0, 1);
  lcd.print(t1);

  lcd.setCursor(3, 0);
  lcd.print("T2");
  lcd.setCursor(3, 1);
  lcd.print(t2);

  lcd.setCursor(6, 0);
  lcd.print("T3");
  lcd.setCursor(6, 1);
  lcd.print(t3);

  lcd.setCursor(9, 0);
  lcd.print("T4");
  lcd.setCursor(9, 1);
  lcd.print(t4);

  lcd.setCursor(13, 1);
  lcd.print(">>>");
  delay(100);
}

void chooseT1() {
  t1 = changeValue(t1);
  if (pupb != t1) {
    lcd.clear();
    pupb = t1;
  }
  lcd.setCursor(0, 0);
  EEPROM.write(0, t1);
  lcd.print("T1= " + (String)t1);
}

void chooseT2() {
  t2 = changeValue(t2);
  if (pupb != t2) {
    lcd.clear();
    pupb = t2;
  }
  lcd.setCursor(3, 0);
  EEPROM.write(2, t2);
  lcd.print("T2= " + (String)t2);
}

void chooseT3() {
  t3 = changeValue(t3);
  if (pupb != t3) {
    lcd.clear();
    pupb = t3;
  }
  lcd.setCursor(6, 0);
  EEPROM.write(4, t3);
  lcd.print("T3= " + (String)t3);
}

void chooseT4() {
  t4 = changeValue(t4);
  if (pupb != t4) {
    lcd.clear();
    pupb = t4;
  }
  lcd.setCursor(9, 0);
  EEPROM.write(6, t4);
  lcd.print("T4= " + (String)t4);
}

void chooseT11() {
  t11 = changeValue(t11);
  if (pupb != t11) {
    lcd.clear();
    pupb = t11;
  }
  lcd.setCursor(0, 1);
  EEPROM.write(1, t11);
  lcd.print("t1= " + (String)t11);
}

void chooseT22() {
  t22 = changeValue(t22);
  if (pupb != t22) {
    lcd.clear();
    pupb = t22;
  }
  lcd.setCursor(3, 1);
  EEPROM.write(3, t22);
  lcd.print("t2= " + (String)t22);
}

void chooseT33() {
  t33 = changeValue(t33);
  if (pupb != t33) {
    lcd.clear();
    pupb = t33;
  }
  lcd.setCursor(6, 1);
  EEPROM.write(5, t33);
  lcd.print("t3= " + (String)t33
  );
}

void chooseT44() {
  t44 = changeValue(t44);
  if (pupb != t44) {
    lcd.clear();
    pupb = t44;
  }
  lcd.setCursor(9, 1);
  EEPROM.write(7, t44);
  lcd.print("t4= " + (String)t44);
}

int changeValue(int currentValue) {
  if (buttonState2 == HIGH) {
    delay(100);
    currentValue += 1;
  }
  if (buttonState3 == HIGH) {
    if (currentValue - 1 >= 0) {
      delay(100);
      currentValue -= 1;
    }
    else {
      currentValue = 0;
    }
  }
  return currentValue;
}

void loop() {
  buttonState1 = !digitalRead(nextb);
  buttonState2 = !digitalRead(upb);
  buttonState3 = !digitalRead(downb);
  buttonStateSart = !digitalRead(start);
  if (buttonState1 == HIGH) {
    state = state + 1;
    delay(250);
    if (state > 8) state = 0;
    lcd.clear();
  }
  if (buttonState2 == HIGH) {
    delay(150);
  }
  if (buttonState3 == HIGH) {
    delay(150);
  }

  switch (state) {
    case 0:
      homeScreen();
      break;
    case 1:
      chooseT1();
      break;
    case 2:
      chooseT2();
      break;
    case 3:
      chooseT3();
      break;
    case 4:
      chooseT4();
      break;
    case 5:
      chooseT11();
      break;
    case 6:
      chooseT22();
      break;
    case 7:
      chooseT33();
      break;
    case 8:
      chooseT44();
      break;
  }
  if (buttonStateSart == HIGH) {

    digitalWrite(13, HIGH);
    digitalWrite(Relay, HIGH);
    for ( int tim = t1; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(0, 1);
      lcd.print(tim);
    }
    digitalWrite(13, LOW);
    digitalWrite(Relay, LOW);
    for ( int tim = t11; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(0, 1);
      lcd.print(tim);
    }

    digitalWrite(13, HIGH);//yes
    digitalWrite(Relay, HIGH);
    for ( int tim = t2 ; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(3, 1);
      lcd.print(tim);
    }
    digitalWrite(13, LOW);//no
    digitalWrite(Relay, LOW);
    for ( int tim = t22; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(3, 1);
      lcd.print(tim);
    }

    digitalWrite(13, HIGH);
    digitalWrite(Relay, HIGH);
    for ( int tim = t3; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(6, 1);
      lcd.print(tim);
    }
    digitalWrite(13, LOW);//no
    digitalWrite(Relay, LOW);
    for ( int tim = t33; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(6, 1);
      lcd.print(tim);
    }

    digitalWrite(13, HIGH);//yes
    digitalWrite(Relay, HIGH);
    for ( int tim = t4; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(9, 1);
      lcd.print(tim);
    }
    digitalWrite(13, LOW);//no
    digitalWrite(Relay, LOW);
    for ( int tim = t44; tim >= 0; tim--) {
      delay(interval);
      lcd.setCursor(9, 1);
      lcd.print(tim);
    }
  }
}

 

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

Что именно оптимизировать?

С какой целью?

По какому критерию?

Det
Offline
Зарегистрирован: 08.04.2013

Я понимаю, что код написан не совсем правильно, то есть можно использовать циклы для перебора как на пример... Меня интересует уменьшение памяти на плате. Если есть нужно что то поменять в коде говорите)

sadman41
Offline
Зарегистрирован: 19.10.2016

Уменьшить память на плате можно вжикнув разок болгаркой по чипу...

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

Det пишет:

Я понимаю, что код написан не совсем правильно, то есть можно использовать циклы для перебора как на пример... Меня интересует уменьшение памяти на плате. Если есть нужно что то поменять в коде говорите)

как же ты за 5 лет после регистрации цыклы перебирать не научился. 

Det
Offline
Зарегистрирован: 08.04.2013

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

Ворота
Ворота аватар
Offline
Зарегистрирован: 10.01.2016

Det пишет:

не имеет значения 

Для тебя не имеет, а для кого-то имеет. Ты ведь не возражаешь, что люди могут иметь своё мнение, отличное от твоего? нет?