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

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

Необходимо управлять несколькими реле,нажатием на одну кнопку.Пример,нажимаем кнопку один,включилось реле 2,3,4,кнопку два включились реле 2,3,4,5 и т.д.Кнопок 9, реле 12,для одной платы управления и такое же количество для другой.Ардуинка Мега,платы реле на 5 вольт две по 16 штук есть.Написал прогу,одна плата работает,при добавлении других реле на другой плате,начинает работать не корректно!!!

nik182
Offline
Зарегистрирован: 04.05.2015

В программировании  не получилось - в новички? Описание совершенно непонятно. Что нажать , что включить?

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

Валекс, давайте спокойно.

Во-первых - я вас не троллю

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

В третьих, собственно то что вы написали - это не вопрос, это заказ: "Необходимо написать..."

 

Повторяю - давайте мирно и спокойно. Если у вас есть вопрос по вашему коду - вставляйте код. Если вы хотите. чтобы код кто-то написал за вас - есть раздел "Ищу исполнителя"

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

Код Вы видели в разделе "программирование",какой смысл его сюда сейчас скидывать,если кроме тех,кто его видел в том разделе,других нет,никто не попросил его.Если Вы,можете чем то помочь,то посмотрите код в том разделе,если будут вопросы по коду то отвечу.Спасибо.

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

похоже пациент безнадежен.

Ну-ну, желаю удачи...

Valex60
Offline
Зарегистрирован: 14.11.2019
#define ON 1
#define OFF 0
//unsigned long time; // Переменная для хранения точки отсчета
//unsigned long currentTime; 
//unsigned long currentTime2;





 void setup()
{
// Serial.begin(9600);  
 pinMode(A0, INPUT);
  digitalWrite(A0,LOW); 
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(11, OUTPUT);
  // Serial.begin(9600);
   pinMode(A1, INPUT);
  digitalWrite(A1,LOW); 
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
 // Serial.begin(9600);
  pinMode(A2, INPUT);
  digitalWrite(A2,LOW); 
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
// Serial.begin(9600);
  pinMode(A3, INPUT);
  digitalWrite(A3,LOW); 
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(12, OUTPUT);
 //Serial.begin(9600);
  pinMode(A4, INPUT);
 digitalWrite(A4,LOW);  
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(8, OUTPUT);
 Serial.begin(9600);
  digitalWrite(A5,LOW);  
  pinMode(13, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(10, OUTPUT);
// Serial.begin(9600);
  pinMode(A6, INPUT);
 digitalWrite(A6,LOW);  
  pinMode(13, OUTPUT);
  pinMode(2, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(12, OUTPUT);
// Serial.begin(9600);
  pinMode(A7, INPUT);
  digitalWrite(A7,LOW);  
  pinMode(13, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(12, OUTPUT);
// Serial.begin(9600);
  pinMode(A8, INPUT);
 digitalWrite(A8,LOW);  
  pinMode(22, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(31, OUTPUT);
  pinMode(A9, INPUT);
  digitalWrite(A9,LOW);  
  pinMode(26, OUTPUT);
  pinMode(25, OUTPUT);
  pinMode(24, OUTPUT);
  pinMode(23, OUTPUT);
  pinMode(22, OUTPUT);
  
  
  
  
  }
void loop()
 {    


  

 
 if (digitalRead(A0) == 0) {
      digitalWrite(2,ON);
        digitalWrite(3,ON);
      digitalWrite(11,ON);
      
        
    }
   else
    {
    digitalWrite(2,OFF);//2.3.12
      digitalWrite(3,OFF);
      digitalWrite(11,OFF);
    delay(80);
      
 
  
 }
if (digitalRead(A1) == 0) {
      digitalWrite(2,ON);
        digitalWrite(3,ON);
      digitalWrite(6,ON);
        digitalWrite(7,ON);
        
    }
   else
    {
    digitalWrite(2,OFF);//2.3.6.7
      digitalWrite(3,OFF);
      digitalWrite(6,OFF);
      digitalWrite(7,OFF);
     delay(80);
      
 } 
if (digitalRead(A2) == 0) {
      digitalWrite(3,ON);
        digitalWrite(6,ON);
      digitalWrite(7,ON);
        digitalWrite(9,ON);
        digitalWrite(10,ON);
         
   }
   else
    {
    digitalWrite(3,OFF);
      digitalWrite(6,OFF);
      digitalWrite(7,OFF);
      digitalWrite(9,OFF);
      digitalWrite(10,OFF);
     delay(80);
      
 }    
if (digitalRead(A3) == 0) {
      digitalWrite(3,ON);
        digitalWrite(6,ON);
      digitalWrite(7,ON);
        digitalWrite(9,ON);
        digitalWrite(10,ON);
        digitalWrite(12,ON);
     
         
   }
   else
    {
    digitalWrite(3,OFF);
      digitalWrite(6,OFF);
      digitalWrite(7,OFF);
      digitalWrite(9,OFF);
      digitalWrite(10,OFF);
      digitalWrite(12,OFF);
       delay(80);
    }
if (digitalRead(A4) == 0) {
      digitalWrite(3,ON);
        digitalWrite(6,ON);
      digitalWrite(7,ON);
        digitalWrite(8,ON);
        digitalWrite(9,ON);
        digitalWrite(10,ON);
        digitalWrite(12,ON);
      
         
   }
   else
    {
    digitalWrite(3,OFF);
      digitalWrite(6,OFF);
      digitalWrite(7,OFF);
      digitalWrite(8,OFF);
      digitalWrite(9,OFF);
      digitalWrite(10,OFF);
      digitalWrite(12,OFF);
      delay(80);
      }  
if (digitalRead(A5) == 0) {
      digitalWrite(13,ON);     //реле 1
        digitalWrite(2,ON);
      digitalWrite(3,ON);
        digitalWrite(6,ON);
        digitalWrite(10,ON);
        
      }
   else
    {
    digitalWrite(13,OFF);     //реле 1
      digitalWrite(2,OFF);
      digitalWrite(3,OFF);
      digitalWrite(6,OFF);
      digitalWrite(10,OFF);
      delay(80);
      }      

      if (digitalRead(A6) == 0) {
      digitalWrite(13,ON);
        digitalWrite(2,ON);
      digitalWrite(6,ON);
        digitalWrite(8,ON);
        digitalWrite(9,ON);
        digitalWrite(10,ON);
        digitalWrite(12,ON);
        
      }
   else
    {
    digitalWrite(13,OFF);
      digitalWrite(2,OFF);
      digitalWrite(6,OFF);
      digitalWrite(8,OFF);
      digitalWrite(9,OFF);
      digitalWrite(10,OFF);
        digitalWrite(12,OFF);
      delay(80);
   
}
 if (digitalRead(A7) == 0) {
      digitalWrite(13,ON);
        digitalWrite(4,ON);
      digitalWrite(5,ON);
        digitalWrite(6,ON);
        digitalWrite(8,ON);
        digitalWrite(9,ON);
        digitalWrite(12,ON);
        
      }
   else
    {
    digitalWrite(13,OFF);
      digitalWrite(4,OFF);
      digitalWrite(5,OFF);
      digitalWrite(6,OFF);
      digitalWrite(8,OFF);
      digitalWrite(9,OFF);
        digitalWrite(12,OFF);
      delay(80);
    }
 
if (digitalRead(A8) == 0) {
      digitalWrite(22,ON);
        digitalWrite(23,ON);
      digitalWrite(31,ON);
     }
   else
    {
    digitalWrite(22,OFF);//реле 2
      digitalWrite(23,OFF);//реле 3
      digitalWrite(31,OFF);//реле 12,(11)
      delay(90);
    }
if (digitalRead(A9) == 0) {
      digitalWrite(26,ON);
        digitalWrite(25,ON);
      digitalWrite(24,ON);  //реле 6
      digitalWrite(23,ON);   //реле 7
      digitalWrite(22,ON);  //реле 10
     }
   else
    {
    digitalWrite(26,OFF);//реле 2
      digitalWrite(25,OFF);//реле 3
      digitalWrite(24,OFF);//реле 12,(11)
      digitalWrite(23,OFF);
      digitalWrite(22,OFF);
      delay(80);
   
    }
 }
 

 

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

у вас проблема в логике программы. Следите по строчкам:

Вот смотрите, допустим вы нажали кнопку A0  - Сработало условие в строчке 105, в строчке 106 включилось реле 2.

Но программа не останавливается. Она идет к условию строки 122, кнопка А1 не нажата - поэтому идем в ветвь else строчка 129 и в строке 131 выключаем реле.

 

И так практически с каждым реле - оно у вас включается в одном условии и тут же мгновенно выключается в других условиях.

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

чет мы с псами напилися и решил поумничать :) o_O

const uint8_t OFF = 0;            // Отключение реле
const uint8_t ON  = 1;            // Включение реле
const uint8_t BTN_press    = 0;   // Кнопка нажата
const uint8_t BTN_release  = 1;   // Кнопка отжата

//количество реле\/
uint8_t RELE_PIN[16] = {
  1,  // Пин для реле 1
  2,  // Пин для реле 2 и т.д
  3,
  4,
  5,
  6,
  7,
  8,
  9,
  10,
  11,
  12,
  13,
  14,
  15,
  16
};

//количество кнопок\/
uint8_t KNOPKA_PIN[9] = {
  A0,  // Пин для кнопки 1
  A1,  // Пин для кнопки 2 и т.д.
  A2,
  A3,
  A4,
  A5,
  A6,
  A7,
  A8
};

//статусы реле, кнопка\/ реле\/
uint8_t   RELE_STATUS[9]    [16] = {
// 1   2    3    4    5    6    7    8    9    10   11   12   13   14   15   16
  ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,  // Статусы реле при нажатии 1 кнопки
  OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,  // Статусы реле при нажатии 2 кнопки и т.д.
  OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
  OFF, OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
  OFF, OFF, OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
  OFF, OFF, OFF, OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
  OFF, OFF, OFF, OFF, OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
  OFF, OFF, OFF, OFF, OFF, OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF,
  OFF, OFF, OFF, OFF, OFF, OFF, OFF, OFF, ON , OFF, OFF, OFF, OFF, OFF, OFF, OFF
};


void setup() {
  Serial.begin(9600);
  for (uint8_t i = 0; i < sizeof(RELE_PIN); i++ ) {
    pinMode(RELE_PIN[i], OUTPUT);                          // пины реле на выход
    digitalWrite(RELE_PIN[i], OFF);                        // выключить реле
  }
  for (uint8_t i = 0; i < sizeof(KNOPKA_PIN); i++ ) {
    pinMode(KNOPKA_PIN[i], INPUT);                        // пины кнопок на вход
  }
}

void loop() {
  for (uint8_t i = 0; i < sizeof(KNOPKA_PIN); i++ ) {     // "опрашиваем" кнопки  
    if (digitalRead(KNOPKA_PIN[i]) == BTN_press) {        // если нажата
      for (uint8_t j = 0; j < sizeof(RELE_PIN); j++) {    // выставляем состояния 
        digitalWrite(RELE_PIN[i], RELE_STATUS[i][j]);     // в соотв. с таблицей
      }
      break;                                              // и уходим, приоритет кнопок от 1 до 16
    }
  }
  delay(100);                                             // типа дребезг обрабатываем :)
}

не проверял, жена все ардуины спрятала...

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

Понимаешь,все работало хорошо,пока не добавил еще одну плату с 16-ю реле,для работы с другой группой кнопок.Т.е. добавил адрес А8 и А9.Я читал,что задержка "делэй",это плохой оператор,от него лучше избавиться и перейти на другую задержку,но у меня не получается это сделать.тем более именно тогда происходит сбой,когда нажимается одна кнопка для реле одной группы и тут же нажимается кнопка для другой группы!!Тогда реле одной из плат начинает щелкать.Если пользоваться только одной любой кнопкой любой группы реле,то все будет работать,а вот при нажатии двух кнопок с разных пар программа дает сбой!Я понял,что процессору "не нравиться",когда к одной группе реле и другой группе обращаются одним и тем же оператором,поэтому процессор начинает "путаться".Тогда я изменил оператор по адресам А8,9 на  delayMicroseconds(100),вроде начала работать,но реле не дожимает контакты,хотя светодиод реле показывает его включение.

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

Спасибо,проверю обязательно,а вдруг заработает!!Жаль конечно,что жена спрятала ардуинки,наверное перестал обращать внимание жене))Мне это не грозит,мне седьмой десяток уже пошел,уже даже пенсию получаю,а поэтому времени для того,чтобы что-то паять достаточно,а вот чтобы стать программистом,то кже не потяну,сложно очень.Ну спасибо за прогу,сейчас запущу,проверю!!!Если что,то дам знать!!

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

ну так может просто питания не хватает?

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

С питанием все хорошо.Мощный блок питания стоит.Мало того,я когда писал свою прогу,то сначала намучился с этим.Короче не было в проге оператора делэй,все реле срабатывают,но не дотягивают контакты,а вот когда добавил оератор делэй,то все стало работать,реле замыкаются.Понимаешь,если бы в мою прогу добавить подпрограмму на включение другой группы реле,то может стало работать хорошо,я смотрел другие проги,там много раз пользуются оператором "войд",я не знаю как его добавить себе,чтобы проверить,а добавить его именно для включения второй группы реле.

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

void это не оператор, это тип или спецификатор типа (меня поправят).

и поверь, твоя проблема не в нем.

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

Извини за наглость,напиши пожалуйста форму записи в строке 8 и 28(может глядя на мою прогу выше,а может тебе это и не нужно).Я потом сам соображу,что делать в других строках

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

xDriver - сдается мне, что в твоем коде после отпускания кнопки реле выключатся не будут - нет такой логической связи у тебя в алгоритме.

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

b707 пишет:

xDriver - сдается мне, что в твоем коде после отпускания кнопки реле выключатся не будут - нет такого логической связи у тебя в алгоритме.

То есть проблема родственная той, что была у ТС  - дело в том, что в этой программе нужно отслеживать не состояния "кнопка включена" и "кнопка выключена" - а "кнопка включается" и "выключается"

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

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

b707 пишет:

xDriver - сдается мне, что в твоем коде после отпускания кнопки реле выключатся не будут - нет такой логической связи у тебя в алгоритме.

так и есть, такой задачи не стояло, мож я не прально понял.

ну пару строк добавить если не че не нажато, то все в OFF.

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

xDriver пишет:

так и есть, такой задачи не стояло, мож я не прально понял.

судя по словам ТС - нужно чтобы выключалось:

Valex60 пишет:

пока держишь кнопку реле включено,отпустил,оно выключилось

но вообще в твоем лгоритме это можно поправить одной строчкой :)

 

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

Понимаете,я сейчас напишу самое интересное.Я с этим кодом обращался в другие чаты,там везде все подняли меня на УРА!Это прога очень простая,не стоит и выеденного яйца,даже пару человек в общих фразах написали как мне написать скетч.Имено на словах и все такие программисты,такие асы,гуру.Но никто даже двух трех сток строк скетча не подсказал.А то,что товарищ мне скинул только что скутч,может правильный,а может нет,за это ему большой респект и мое уважение.Это первый человек,который попытался мне реально помочь делом а не болтовней!Спасибо Ему!!!

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

b707 пишет:

но вообще в твоем лгоритме это можно поправить одной строчкой :)

знаешь, а ты был прав (#4) :)

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

Valex60 пишет:

Понимаете,я сейчас напишу самое интересное.

ну тогда и я вам напишу "самое интересное". То, что xDriver вам скинул готовый код - это реально ваше невероятное везение, потому что такое ни на этом, ни на других программистких форумах не принято.

Направить, подсказать, ответить на вопросы - это всегда пожалуйста. А делать за новичка, давать готовый код - такое не практикуется Если спрашивающий толковый - он разберется сам, а если нет - туда ему и дорога, значит не очень и надо

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

b707 пишет:

Valex60 пишет:

Понимаете,я сейчас напишу самое интересное.

ну тогда и я вам напишу "самое интересное". То, что xDriver вам скинул готовый код - это реально ваше невероятное везение, потому что такое ни на этом, ни на других программистких форумах не принято.

Направить, подсказать, ответить на вопросы - это всегда пожалуйста. А делать за новичка, давать готовый код - такое не практикуется Если спрашивающий толковый - он разберется сам, а если нет - туда ему и дорога, значит не очень и надо

Толковый,может и разберется,но если я в программировании совершенно ничего не знаю,мало того такой скетч,который мне скинул выше товарищ мне никогда не написать,хоть убейте меня.Прогаммист,это талант как  музыкантам,писателям,поэтам и т.д.Ты говоришь так принято никому ничего,это у нас у славян.У меня товарищ,тоже что-то хотел сделать и тоже получил такой же ответ.А когда обратился за помощью на зарубежные сайты,то помогли без всяких "так принято,так нельзя" и бесплатно.Чисто по человечески.

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

Valex60 пишет:

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

ну на это могу сказать две вещи

- первое, если вы уверены, что на импортных форумах так здорово - почему вы не написали туда? Заодно и проверили бы, так ли там все хорошо...

Ну а второе - на самом деле вы ошибаетесь. Халявщиков не любят нигде. Если вы придете на форум arduino.cc и попросите написать вам код - вас с вероятностью 99% пошлют. На форумах отвечают на вопросы, когда человек что-то делает сам и у него возникли проблемы. Если же человек ничего не знает - ему надо читать руководства и документацию, а не постить вопросы в форумах

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

Аналогия простая - если вы пойдете на сайт, посвещенный ремонту квартиры - вам подскажут, как клеить обои и класть плитку. Но именно подскажут - не думаете же вы. что кто-то "чисто по человечески" придете и сделает вам ремонт бесплатно?

Так вот, когда вам подсказывают, как исправить ошибки в скетче - это как подсказка про обои, а если вы просите код - это как просить постороннего человека оклеить вам кухню.

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

только из уважению к возрасту:

вы не можете четко сформулировать задачу, выстроить алгоритм.

от этого все беды, для программиста очевидны два состояния, стоит не стоит... тьфууу, ДА-НЕТ, ну или условие ЕСЛИ-ТО-ИНАЧЕ.

и доносить надо так, есть 9 кнопок и 16 реле, изначально то-то, нажимаю на кнопку один происходит то-то, отпускаю то-то и так для каждой кнопки и их комбинаций.

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

b707 пишет:

Valex60 пишет:

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

ну на это могу сказать две вещи

- первое, если вы уверены, что на импортных форумах так здорово - почему вы не написали туда? Заодно и проверили бы, так ли там все хорошо...

Ну а второе - на самом деле вы ошибаетесь. Халявщиков не любят нигде. Если вы придете на форум arduino.cc и попросите написать вам код - вас с вероятностью 99% пошлют. На форумах отвечают на вопросы, когда человек что-то делает сам и у него возникли проблемы. Если же человек ничего не знает - ему надо читать руководства и документацию, а не постить вопросы в форумах

Не обратился к зарубежным сайтам,потому что проблема с английским,а читать руководство,то это уже мне не поможет,слишком поздно.Насчет халявы,то что я хочу сделать управление на реле это первое мое знакомство с ардуино.Ты написал,что на форумах отвечают на вопросы,когда человек что-то делает сам.Я же скинул свой скетч и объяснил проблемы.И к тебе просьба,если нет у тебя ничего по существу,по скетчу,то лучше ничего не пиши уже.Я такого уже начитался и наслушался,ты в этом не одинок.Видать xdRiver не туда попал.

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

Valex60 пишет:

 к тебе просьба,если нет у тебя ничего по существу,по скетчу,то лучше ничего не пиши уже.Я такого уже начитался и наслушался,ты в этом не одинок.Видать xdRiver не туда попал.

так, понятно, значит четкое обьяснение твоих ошибок в сообщении #6 - это "не по существу", по существу - это только когда код готовый? :)

 

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

xDriver пишет:

только из уважению к возрасту:

вы не можете четко сформулировать задачу, выстроить алгоритм.

от этого все беды, для программиста очевидны два состояния, стоит не стоит... тьфууу, ДА-НЕТ, ну или условие ЕСЛИ-ТО-ИНАЧЕ.

и доносить надо так, есть 9 кнопок и 16 реле, изначально то-то, нажимаю на кнопку один происходит то-то, отпускаю то-то и так для каждой кнопки и их комбинаций.

Да согласен,что я не написал алгоритм,я думал,что по моему скетчу будет видно как работает программа,скетч то действительно мой простой.А алгоритм,что его писать,зачем?После всего прочитанного от от другого участника чата,так Вы поступили неправильно,что написали мне скетч,если даже сделали это из уважения к возрасту.Хотя для Вас я алгоритм напишу в двух словах.Есть ардуино Мега(чтобы было много адресных входов),ессть две платы по 16 реле и 18 кнопок,по 9 на каждую.Рабочих реле будет по 12 в каждой плате.Необходимо,чтобы при нажатии на кнопку и ее удержания включилось несколько реле на одной плате,при нажатии и удержании другой кнопки включились другие реле на другой плате.Т.е.,когда отпустил енопки и нажал на другие,включаются снова реле среди которых могут быть те,что были при нажатии ранее,но к ним добявятся и другие реле.Вот такой алгоритм.

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

b707 пишет:

Valex60 пишет:

 к тебе просьба,если нет у тебя ничего по существу,по скетчу,то лучше ничего не пиши уже.Я такого уже начитался и наслушался,ты в этом не одинок.Видать xdRiver не туда попал.

так, понятно, значит четкое обьяснение твоих ошибок в сообщении #6 - это "не по существу", по существу - это только когда код готовый? :)

 

Извини,но если бы я действительно был программистом со стажем,то твою подсказку #6 я бы понял и начал действовать,а на данный момент это действительно не по существу.Я прекрасно понимаю,как я выгляжу среди вас,мне стыдно и обидно,что это так,но это печальный факт.

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

ну хорошо, я так понял будет 24 реле и 18 кнопок.

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

и еще алгоритм включения реле от кнопок.

допустим, нажали кнопку один, включились реле 1,2,3...,  они включены пока кнопка нажата? или включились и все, если в купе с кнопкой один нажали кнопку два, что в этом случае? включились еще реле 5,6,7... а 1,2,3 выключились?

ну так далее, а еще лучше конечную задачу "человеческим языком", нажал 1 полетели ракеты на..., отпустил - команда на самоуничтожение и т.д.

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

xDriver пишет:

ну хорошо, я так понял будет 24 реле и 18 кнопок.

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

и еще алгоритм включения реле от кнопок.

допустим, нажали кнопку один, включились реле 1,2,3...,  они включены пока кнопка нажата? или включились и все, если в купе с кнопкой один нажали кнопку два, что в этом случае? включились еще реле 5,6,7... а 1,2,3 выключились?

ну так далее, а еще лучше конечную задачу "человеческим языком", нажал 1 полетели ракеты на..., отпустил - команда на самоуничтожение и т.д.

СПАСИБО!!!Сейчас для Вас напишу,что и зачем!!Так,вот две строки цифр,ниже!!

7,8,9,10,11,12

1,2,3,4,5,6 это порядок реле на одной плате реле и такой же на другой плате реле!!

Кнопка "0" при нажатии замыкает реле 2,3,12 на плате номер один

Вторая кнопка "0" из другой группы кнопок тоже нажимает реле 2,3,12,которые на другой плате реле(плата номер 2

отпускаем кнопки,реле выключились,переходим на другую кнопку

Кнопка "1",замкнула реле 2,3,6,7 на плате с реле номер один

Кнопка "1" из другой группы кнопок замкнула реле 2,3,6,7,10 плата номер 2

отпустили кнопки,все выключилось перешли на следующую

Кнопка "2" замкнула 3,6,7,9,10 на плате номер 1

Кнопка "2" замкнула реле 3,6,7,9,10,11 на плате номер 2

Только здесь нужно учесть,что эти кнопки во всех случаях могут работать синхронно,но могут и отдельно!!Т.е.на нажиматься сразу вместе!

И так далее,если нужно могу написать,но это может завтра,уже ночь,пора Вам спать или продолжить??

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

Valex60 пишет:

Кнопка "0" при нажатии замыкает реле 2,3,12 на плате номер один

Вторая кнопка "0" из другой группы кнопок 

нееее..

сегодня я это не переварю.

 

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

да,из другой пары!!!Короче две пары кнопок и две платы с реле.Одна группа кнопок работает с одной платой реле,другая с другой.При этом кнопки могут нажиматься синхронно ,а могут отдельно друг от друга!!Все кнопки  без фиксации,реле замкнуто пока держишь кнопку.Нажатие двух кнопок и более на любой из пар невозможно.У нас постоянно переход из одной кнопки к другой при этом от которой уходим она выключается сразу без задержек по времени!!

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

я спать...

но напомню об этом

xDriver пишет:

ну хорошо, я так понял будет 24 реле и 18 кнопок.

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

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

Спокойной ночи!!До завтра!!

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

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

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

Добрый день!

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

Valex60 пишет:

Да согласен,что я не написал алгоритм,я думал,что по моему скетчу будет видно как работает программа,скетч то действительно мой простой.А алгоритм,что его писать,зачем?

Видите ли, программа ВСЕГДА работает так, как ее написали. Правда, это не всегда совпадает с тем, как ее ХОТЕЛИ написать.

По коду можно судить о том, что Вы написали, но код никак не может подсказать, что же Вы на самом деле хотели написать.

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

 

PS. Если я правильно понял, всю логику работы можно реализовать только на диодах без Ардуино. Если это так, подтвердите, это существенно облегчит понимание написанного Вами, т.к. пока это написанное допускает еще слишком широкий спектр вариантов интерпретации. Вам же советовали, что описывать алгоритм лучше по форме: кнопка №Х нажата - происходит это, отпущена - это, и так со всеми кнопками. Опять же, сильно затрудняет понимание упоминание Вами двух групп кнопок и двух плат реле, для чего это нужно?

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

andriano пишет:

Valex60 пишет:

Да согласен,что я не написал алгоритм,я думал,что по моему скетчу будет видно как работает программа,скетч то действительно мой простой.А алгоритм,что его писать,зачем?

Видите ли, программа ВСЕГДА работает так, как ее написали. Правда, это не всегда совпадает с тем, как ее ХОТЕЛИ написать.

По коду можно судить о том, что Вы написали, но код никак не может подсказать, что же Вы на самом деле хотели написать.

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

 

PS. Если я правильно понял, всю логику работы можно реализовать только на диодах без Ардуино. Если это так, подтвердите, это существенно облегчит понимание написанного Вами, т.к. пока это написанное допускает еще слишком широкий спектр вариантов интерпретации. Вам же советовали, что описывать алгоритм лучше по форме: кнопка №Х нажата - происходит это, отпущена - это, и так со всеми кнопками. Опять же, сильно затрудняет понимание упоминание Вами двух групп кнопок и двух плат реле, для чего это нужно?

Опять же, сильно затрудняет понимание упоминание Вами двух групп кнопок и двух плат реле, для чего это нужно?

А Вам зачем??Хотите написать код или что-то посоветовать???Но,если Вы внимательно прочитали страницу,то в ней ясно написано,что коды здесь не пишут,а в советах я не нуждаюсь.А во-вторых мне пообещали написать код,так что вроде вопрос уже почти решен,осталось дождаться.

 

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

Valex60 пишет:

...а в советах я не нуждаюсь.

И зачем тогда было писать на форум?

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

я их уже наслушался до Вас именно на форуме.

Green
Offline
Зарегистрирован: 01.10.2015

Гонористый новичок.(

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

Вы можете внятно написать, например:

реле1.плата1=Pin1(ардуино);

реле2.плата1=Pin2 и т.д

кнопка1.плата1=Pin5;

кнопка2.плата1=Pin6 и т.д.

кнопка1.плата1=реле1.плата1+реле2.плата2+...+релеN.платаN

и так все кнопки и реле, а то тут экстрасенсов нету, а троллей много.

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

anatoli_nik пишет:

Вы можете внятно написать, например:

реле1.плата1=Pin1(ардуино);

реле2.плата1=Pin2 и т.д

кнопка1.плата1=Pin5;

кнопка2.плата1=Pin6 и т.д.

кнопка1.плата1=реле1.плата1+реле2.плата2+...+релеN.платаN

и так все кнопки и реле, а то тут экстрасенсов нету, а троллей много.

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

Кнопка 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

Для второй платы реле(реле я обозначил тоже от 1 до 12 и кнопки тоже от 0 до 8, но чтобы было ясно, кнопки и реле  первые и кнопки вторые и реле,между собой не имеют связи,т.е. работают отдельно)

0 - 2,3,12

1 -2,3,6,7,10

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

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

4-2,3,12

5 - 2,3,12

6 - 1,2,3,6,10

7 - 1,2,6,10

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

 

Все кнопки без фиксации,т.е.работает кнопка пока ее держишь.Второе две кнопки сразу в любой из групп нажиматься не будут,т.е.происходит переход с одной на другую.Но кнопка в одной и кнопка в другой группе могут быть нажаты одновременно.Вот вроде написал.Тот код,что я написал,он работает,если убрать вторую группу реле,т.е.адреса А8 и А9.С самого начала я все это делал на ардуине уно,но мне не хватало адресов для второй группы реле,я купил ардуино мега,теперь адресов достаточно,Но при подключении второй группы реле происходит сбой работы реле.Дело в том,что при работе может быть нажата кнопка с одной группы и нажата кнопка с другой группы,когда это происходит,то реле в одной группе не замыкаются,а начинают щелкать.А поэтому мой код не работает.Я так понимаю,что когда происходит обращение к двум адресам сразу,а у них одинаковые операторы,допустим задержка "делэй",то процессор начинает "путаться".Хотел заменить оператор "делэй" на другой в другой группе,заменил его на делэй микросекнунд,это не спасло.Ребята,мне кажется,что даже другой код будет давать сбой.Конечно интересно проверить,так ли это.Но выход всегда есть,так что если другой код не будет работать,то я им воспользуюсь.И теперь самое главное!!Ребята,не нужно писать код,для тех кому это в тягость,не нужно мучиться и тратить свое драгоценное время.Но очень конечно интересно,что код всего лишь для одних реле,без всяких связей на андроид,видео и т.д. может быть таким сложным для профессионалов.

SLKH
Offline
Зарегистрирован: 17.08.2015

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 рублей за сотню (с доставкой).

 

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

Пенсионер, ты бы начал разбираца со светлодиода, одной кнопки и одного реле. 

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

DetSimen пишет:

Пенсионер, ты бы начал разбираца со светлодиода, одной кнопки и одного реле. 

Читай внимательно,мой код работает,но есть проблема при дополнении второй платы реле.А вот получится ли у тебя в реале,а не на словах,это еще вопрос.И даже,если написать код,его нужно проверить в работе,а поэтому писать здесь можно что угодно,все это пустое,болтологие на уровне программирования!!

P.S.Слышь,умник,выучи сначала русский язык,а то у тебя в слове х.. пять ошибок.

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

Valex60 пишет:

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

Правильная программа должна корректно обрабатывать ошибочные ситуации, следовательно, должна предусматривать возможность одновременного нажатия на кнопки. А, следовательно, и в ТЗэтот факт должен быть отражен.

Т.е. как следует реагировать программе на одновременное нажатие тех кнопок, одновременное нажатмие которых запрещено?

Цитата:

Тот код,что я написал,он работает,если убрать вторую группу реле... Но при подключении второй группы реле происходит сбой работы реле.

При описанных симптомах одна из наиболее вероятных причин - нехватка питания.

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

andriano пишет:

Valex60 пишет:

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

Правильная программа должна корректно обрабатывать ошибочные ситуации, следовательно, должна предусматривать возможность одновременного нажатия на кнопки. А, следовательно, и в ТЗэтот факт должен быть отражен.

Т.е. как следует реагировать программе на одновременное нажатие тех кнопок, одновременное нажатмие которых запрещено?

Цитата:

Тот код,что я написал,он работает,если убрать вторую группу реле... Но при подключении второй группы реле происходит сбой работы реле.

При описанных симптомах одна из наиболее вероятных причин - нехватка питания.

НЕТ,по питанию все хорошо!Блок питания мощный,и даже у меня их два,но причина сбоя не исчезает при любом блоке питания.Мало того,смотри,есть моменты,когда при нажатии кнопки,срабатывают сразу  семь штук реле,я проверял неоднократно,все реле срабатывают.когда добавил вторую плату реле,то при нажатии нулевой кнопки первой платы,там где три реле (2,3,12) и такой же кнопка по адресу А8,второй платы реле (2,3,12) тоже работает все четко,контакты замыкаются везде,Но когда добавил второе реле во вторую группу по адресу А9 реле (2,3,6,7,10), То происходит сбой,т.е. теперь даже когда нажму кнопки для (2,3,12) там и там,реле начинают щелкать на одной из плат!!

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

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

vosara
vosara аватар
Offline
Зарегистрирован: 08.02.2014
Пенсионеры всех стран СОЕДИНЯЙТЕСЬ!!!
Так как я тоже пенсионер попробую помочь.
Этот код не будет обрабатывать нажатие двух кнопок в одном блоке, обработает только первую по програме а в разных блоках обработка двух кнопок должна происходить
Код написан в Вашем стиле так что должен быть понятен.Не прверял - пробуйте.
//Первая група кнопок подключается к пинам (2-9) вторая (10-18)
//Первая група реле подключается к пинам (22-33) вторая (34-45)
/*
 0  	2	 23	24	33				           
 1  	3	 23	24	27	28			         
 2  	4	 24	27	28	30	31		       
 3  	5	 24	27	28	30	31	32	     
 4  	6	 24	27	28	29	30	31	32   
 5  	7	 22	23	24	27	31		       
 6  	8	 22	23	27	29	30	31	32   
 7  	9	 22	25	26	27	29	30	32   
 	  	 						                   
 	  	 						                   
 0  	10 	35	36	45				         
 1  	11 	35	36	39	40	43		     
 2  	12 	36	39	40	42	43	44	   
 3  	13 	36	39	40	41	42	43	44 
 4  	14 	35	36	45				         
 5  	15 	35	36	45				         
 6  	16 	34	35	36	39	43		     
 7  	17 	34	35	39	43			       
 8  	18 	34	37	38	39	41	42	44 
 */

void setup(){
  for (uint8_t i = 22; i < 46; i++ ) {
    pinMode(i, OUTPUT);                          // пины реле на выход
    digitalWrite(i, 0);                        // выключить реле
  }
  for (uint8_t i = 2; i < 19; i++ ) {
    pinMode(i, INPUT_PULLUP);                        // пины кнопок на вход
  }

}

void loop(){
  //Первая группа
  if(!digitalRead(2))
  {
    digitalWrite(23, 1);
    digitalWrite(24, 1);
    digitalWrite(33, 1);
  }
  else if(!digitalRead(3))
  {
    digitalWrite(23, 1);
    digitalWrite(24, 1);
    digitalWrite(27, 1);
    digitalWrite(28, 1);
  }
  else if(!digitalRead(4))
  {
    digitalWrite(24, 1);
    digitalWrite(27, 1);
    digitalWrite(28, 1);
    digitalWrite(30, 1);
    digitalWrite(31, 1);
  }
  else if(!digitalRead(5))
  {
    digitalWrite(24, 1);
    digitalWrite(27, 1);
    digitalWrite(28, 1);
    digitalWrite(30, 1);
    digitalWrite(31, 1);
    digitalWrite(32, 1);
  }
  else if(!digitalRead(6))
  {
    digitalWrite(24, 1);
    digitalWrite(27, 1);
    digitalWrite(28, 1);
    digitalWrite(29, 1);
    digitalWrite(30, 1);
    digitalWrite(31, 1);
    digitalWrite(32, 1);
  }
  else if(!digitalRead(7))
  {
    digitalWrite(22, 1);
    digitalWrite(23, 1);
    digitalWrite(24, 1);
    digitalWrite(17, 1);
    digitalWrite(31, 1);
  }
  else if(!digitalRead(8))
  {
    digitalWrite(22, 1);
    digitalWrite(23, 1);
    digitalWrite(27, 1);
    digitalWrite(29, 1);
    digitalWrite(30, 1);
    digitalWrite(31, 1);
    digitalWrite(32, 1);
  }
  else if(!digitalRead(9))
  {
    digitalWrite(22, 1);
    digitalWrite(25, 1);
    digitalWrite(26, 1);
    digitalWrite(27, 1);
    digitalWrite(29, 1);
    digitalWrite(30, 1);
    digitalWrite(32, 1);
  }
  else {
    for (uint8_t i = 22; i < 34; i++ ) {
      digitalWrite(i, 0);                        // выключить реле
    }
  }
  //Вторая группа *****************************************
  if(!digitalRead(10))
  {
    digitalWrite(35, 1);
    digitalWrite(36, 1);
    digitalWrite(45, 1);
  }
  else if(!digitalRead(11))
  {
    digitalWrite(35, 1);
    digitalWrite(36, 1);
    digitalWrite(39, 1);
    digitalWrite(40, 1);
    digitalWrite(43, 1);
  }
  else if(!digitalRead(12))
  {
    digitalWrite(36, 1);
    digitalWrite(39, 1);
    digitalWrite(40, 1);
    digitalWrite(42, 1);
    digitalWrite(43, 1);
    digitalWrite(44, 1);
  }
  else if(!digitalRead(13))
  {
    digitalWrite(36, 1);
    digitalWrite(39, 1);
    digitalWrite(40, 1);
    digitalWrite(41, 1);
    digitalWrite(42, 1);
    digitalWrite(43, 1);
    digitalWrite(44, 1);
  }
  else if(!digitalRead(14))
  {
    digitalWrite(35, 1);
    digitalWrite(36, 1);
    digitalWrite(45, 1);
  }
  else if(!digitalRead(15))
  {
    digitalWrite(35, 1);
    digitalWrite(36, 1);
    digitalWrite(45, 1);
  }
  else if(!digitalRead(16))
  {
    digitalWrite(34, 1);
    digitalWrite(35, 1);
    digitalWrite(36, 1);
    digitalWrite(39, 1);
    digitalWrite(43, 1);
  }
  else if(!digitalRead(17))
  {
    digitalWrite(34, 1);
    digitalWrite(35, 1);
    digitalWrite(39, 1);
    digitalWrite(43, 1);
  }
  else if(!digitalRead(18))
  {
    digitalWrite(34, 1);
    digitalWrite(37, 1);
    digitalWrite(38, 1);
    digitalWrite(39, 1);
    digitalWrite(41, 1);
    digitalWrite(42, 1);
    digitalWrite(44, 1);
  }
  else {
    for (uint8_t i = 34; i < 46; i++ ) {
      digitalWrite(i, 0);                        // выключить реле
    }
  }
}