Управление реле.

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

А вот этот допускает одновременное нажатие 2х 3х итд .кнопок, он суммирует их воздействие но он для УНО хотя по аналогии можно написать и для меги


bool RELE_PIN[12] = {0,0,0,0,0,0,0,0,0,0,0,0};
bool f_viev=0;

uint16_t f_button = 0;
uint16_t f_b_temp = 0;


void setup()
{
//  Serial.begin(9600);
   for (uint8_t i = 2; i < 14; i++ ) {
    pinMode(i, OUTPUT);                          // пины реле на выход
    digitalWrite(i, 0);                        // выключить реле
  }
  pinMode(14, INPUT_PULLUP);//2-3- - - - - - -  -11  
  pinMode(15, INPUT_PULLUP);//2-3- - -6-7- - -  -11  
  pinMode(16, INPUT_PULLUP);// -3- - -6-7- -9-10-11 
  pinMode(17, INPUT_PULLUP);// -3- - -6-7- -9-10-  -12 
  pinMode(18, INPUT_PULLUP);// -3- - -6-7-8-9-10-  -12  
  pinMode(19, INPUT_PULLUP);//2-3- - -6- - - -10-  -  -13 
  pinMode(20, INPUT_PULLUP);//2- - - -6- -8- -10-  -12-13 
  pinMode(A7, INPUT_PULLUP);// - -4-5-6- -8-9-  -  -12-13 

}
void loop()
{
  if(f_b_temp != f_button)
  {

    f_b_temp = f_button;
    for(int i=0;i<12;i++)
    {
      RELE_PIN[i] = 0;
    }
    f_viev =1;
  }

 if (digitalRead(14) == 0) {
     
    f_button = f_button | (1<<0);
    RELE_PIN[0] = 1;
    RELE_PIN[1] = 1;
    RELE_PIN[9] = 1;
  }
  else f_button = f_button & ~(1<<0);

  if (digitalRead(15) == 0) {
    f_button = f_button | (1<<1);
    RELE_PIN[0] = 1;
    RELE_PIN[1] = 1;
    RELE_PIN[4] = 1;
    RELE_PIN[5] = 1;
  }
  else f_button = f_button & ~(1<<1);

  if (digitalRead(16) == 0) {
    f_button = f_button | (1<<2);
    RELE_PIN[1] = 1;
    RELE_PIN[4] = 1;
    RELE_PIN[5] = 1;
    RELE_PIN[7] = 1;
    RELE_PIN[8] = 1;
  }
  else f_button = f_button & ~(1<<2);

  if (digitalRead(17) == 0) {
    f_button = f_button | (1<<3);
    RELE_PIN[1] = 1;
    RELE_PIN[4] = 1;
    RELE_PIN[5] = 1;
    RELE_PIN[7] = 1;
    RELE_PIN[8] = 1;
    RELE_PIN[10] = 1;
  }
  else f_button = f_button & ~(1<<3);

  if (digitalRead(18) == 0) {
    f_button = f_button | (1<<4);
    RELE_PIN[1] = 1;
    RELE_PIN[4] = 1;
    RELE_PIN[5] = 1;
    RELE_PIN[6] = 1;
    RELE_PIN[7] = 1;
    RELE_PIN[8] = 1;
    RELE_PIN[10] = 1;
  }
  else f_button = f_button & ~(1<<4);

  if (digitalRead(19) == 0) {
    f_button = f_button | (1<<5);
    RELE_PIN[0] = 1;
    RELE_PIN[1] = 1;
    RELE_PIN[4] = 1;
    RELE_PIN[8] = 1;
    RELE_PIN[11] = 1;
  }
  else f_button = f_button & ~(1<<5);

  

  if(f_viev)
  {
    f_viev = 0;
    uint8_t z = 0;
    for(int i=2;i<14;i++)
    {
      digitalWrite(i,RELE_PIN[z]);
      z++;
    }
  } 
//delay(200);
}

 

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

b707 пишет:
Xdriver - ну что, как тебе нравится твой ученик? Обрати внимание, как он ободрился обещанием получить код и все больше наглеет. Понимаешь теперь, почему подобных персонажей посылают на всех форумах? И ведь даже если ты ему напишешь код - вряд ли это решит его проблему. Мало написать код - надо ведь суметь его использовать , собрать схему.... А в том что тс это сможет никакой уверенности нет.

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

пы.сы.  пойду дерну, за твои светлые мысли...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DetSimen пишет:

Никаво этот пенсионер не напоминает? 

и каво?

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

ua6em пишет:

DetSimen пишет:

Никаво этот пенсионер не напоминает? 

и каво?

алигер наверное?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

SLKH пишет:

Valex60 пишет:

 

Сейчас напишу для первой группы реле,затем для второй.

Кнопка 0 реле 2,3,12

Кнопка 1 реле 2,3,6,7

2 - 3,6,7,9,10

3 - 3,6,7,9,10,11

4 - 3,6,7,8,9,10,11

5 - 1,2,3,6,10

6 -1,2,6,8,9,10,11

7 - 1,4,5,6,8,9,11

И всё-таки: насколько необходима Мега? Ибо для первой группы нужно 38 диодов без всяких суперкомпьютеров. Для второй - не считал, но вряд ли намного больше.

Даже в чипедипе диоды идут по 2 рубля за штуку, а у братьев - 50 рублей за сотню (с доставкой).

 

не считал, но на шесть меньще (как минимум)

anatoli_nik
Offline
Зарегистрирован: 17.01.2019


uint8_t RELE1_PIN[12] = {
  1,  // Пин для реле 1
  2,  // Пин для реле 2 и т.д
  3,
  4,
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  12
 
};

uint8_t KNOPKA1_PIN[8] = {
  A0,  // Пин для кнопки 1
  A1,  // Пин для кнопки 2 и т.д.
  A2,
  A3,
  A4,
  A5,
  A6,
  A7
  
};
uint8_t RELE2_PIN[12] = {
  13,14,15,16,17,18,19,20,21,22,23,24
};

uint8_t KNOPKA2_PIN[8] = {
  A8,  A9,  A10,  A11, A12, A13,  A14,  A15,
};
void setup() {
  for (uint8_t i=0; i<sizeof(RELE1_PIN); i++ ){
    digitalWrite(RELE1_PIN[i], LOW);
    pinMode(RELE1_PIN[i],OUTPUT);
  }
for (uint8_t i=0; i<sizeof(RELE2_PIN); i++ ){
    digitalWrite(RELE2_PIN[i], LOW);
    pinMode(RELE2_PIN[i],OUTPUT);
  }
for (uint8_t i=0; i<sizeof(KNOPKA1_PIN); i++ ){
    pinMode(KNOPKA1_PIN[i],INPUT_PULLUP);
  }
  for (uint8_t i=0; i<sizeof(KNOPKA2_PIN); i++ ){
    pinMode(KNOPKA2_PIN[i],INPUT_PULLUP);
  }
}

void loop() {
  byte KNOPKA1_STATE[sizeof(KNOPKA1_PIN)];
   byte KNOPKA2_STATE[sizeof(KNOPKA2_PIN)];
for (uint8_t i=0; i<sizeof(KNOPKA1_PIN); i++ ){
    digitalRead(KNOPKA1_STATE[i]);
  }
  for (uint8_t i=0; i<sizeof(KNOPKA2_PIN); i++ ){
    digitalRead(KNOPKA2_STATE[i]);
  }
  //первый блок реле
digitalWrite(RELE1_PIN[0],!(KNOPKA1_STATE[5]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[1],!(KNOPKA1_STATE[0]|KNOPKA1_STATE[1]|KNOPKA1_STATE[5]|KNOPKA1_STATE[6]));
digitalWrite(RELE1_PIN[2],!(KNOPKA1_STATE[0]|KNOPKA1_STATE[1]|KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]));
digitalWrite(RELE1_PIN[3],!(KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[4],!(KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[5],!(KNOPKA1_STATE[1]|KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[5]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[6],!(KNOPKA1_STATE[1]|KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]));
digitalWrite(RELE1_PIN[7],!(KNOPKA1_STATE[4]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[8],!(KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[9],!(KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[5]|KNOPKA1_STATE[6]));
digitalWrite(RELE1_PIN[10],!(KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[11],!(KNOPKA1_STATE[0]));
//второй блок реле
digitalWrite(RELE1_PIN[0],!(KNOPKA1_STATE[5]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[1],!(KNOPKA1_STATE[0]|KNOPKA1_STATE[1]|KNOPKA1_STATE[5]|KNOPKA1_STATE[6]));
digitalWrite(RELE1_PIN[2],!(KNOPKA1_STATE[0]|KNOPKA1_STATE[1]|KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]));
digitalWrite(RELE1_PIN[3],!(KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[4],!(KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[5],!(KNOPKA1_STATE[1]|KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[5]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[6],!(KNOPKA1_STATE[1]|KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]));
digitalWrite(RELE1_PIN[7],!(KNOPKA1_STATE[4]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[8],!(KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[9],!(KNOPKA1_STATE[2]|KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[5]|KNOPKA1_STATE[6]));
digitalWrite(RELE1_PIN[10],!(KNOPKA1_STATE[3]|KNOPKA1_STATE[4]|KNOPKA1_STATE[6]|KNOPKA1_STATE[7]));
digitalWrite(RELE1_PIN[11],!(KNOPKA1_STATE[0]));
}

 

 

Valex60
Offline
Зарегистрирован: 14.11.2019

Спасибо всем,кто помог с кодом,несмотря ни на что!!!

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

Наклянчил таки. 

Valex60
Offline
Зарегистрирован: 14.11.2019

DetSimen пишет:

Наклянчил таки. 

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

b707
Offline
Зарегистрирован: 26.05.2017

Valex60 пишет:

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

неужели заработало? :)

Valex60
Offline
Зарегистрирован: 14.11.2019

b707 пишет:

Valex60 пишет:

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

неужели заработало? :)

А тебе,что до этого??Ты что тоже код писал??Как говорил Жеглов "Твой номер 16"Тебе приятнее будет общаться с "Детсименом",которого тоже очень это мучило.

b707
Offline
Зарегистрирован: 26.05.2017

Valex60 пишет:

А тебе,что до этого??Ты что тоже код писал??Как говорил Жеглов "Твой номер 16"Тебе приятнее будет общаться с "Детсименом",которого тоже очень это мучило.

значит не заработало

svm
Offline
Зарегистрирован: 06.11.2016

Valex60 пишет:

b707 пишет:

Valex60 пишет:

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

неужели заработало? :)

А тебе,что до этого??Ты что тоже код писал??Как говорил Жеглов "Твой номер 16"Тебе приятнее будет общаться с "Детсименом",которого тоже очень это мучило.

Вношу предложение, создать специальный форум "Сегодня Пятница". И темы подобные этой, не очень сложные с точки зрения программирования размещать там. Участие принимают только те кто будет решать задачу. Будет развлекательно - познавательный форум. Где можно посоревноваться в острословии и программировании. Главное требование, за пятницу написать программу, ну а ТС стойко сносить все нападки и издевательства и быть объективным рефери на ринге. Ну и это может оживить форум.