управление 4 Reley Module.

arter
Offline
Зарегистрирован: 16.01.2015

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

arter
Offline
Зарегистрирован: 16.01.2015

и еще, если какая то кнопка нажата или все нажаты то реле не влкюается

axill
Offline
Зарегистрирован: 05.09.2011

кнопка1 при любом нажатии переводит все 4 реле в состояние ВКЛ?

кнопка2 переводит РЕЛЕ2 в состояние ВЫКЛ? и т.д.?

т.е. включение только кнопкой1, а выключение только кнопками 1-2-3-4?

последнее предложение не понял. Ни одно реле не должно включаться если нажата хоть одна из кнопок 1-2-3-4?

arter
Offline
Зарегистрирован: 16.01.2015

правельно.

если точнее, есть 5 кнопок (0,1,2,3,4)

кнопка 0 включает все реле. только вкючает.

а кнопки 1,2,3,4 выключают реле, если зажата одна, две или все  кнопки, то соответствующее реле не включается.

каждая из 1,2,3,4 кнопки, выкючает тоько 1 реле

axill
Offline
Зарегистрирован: 05.09.2011

нулевая кнопка так хотели? исхожу из того, что кнопка замыкает на GND


if(!digitalRead(BUT0)) {
    delay(200);
    digitalWrite(REL1, HIGHT);
    digitalWrite(REL2, HIGHT);
    digitalWrite(REL3, HIGHT);
    digitalWrite(REL4, HIGHT);
}
axill
Offline
Зарегистрирован: 05.09.2011

остальные кнопки

boolean but1 = !digitalRead(BUT1);
boolean but2 = !digitalRead(BUT2);
boolean but3 = !digitalRead(BUT3);
boolean but4 = !digitalRead(BUT4);

if(but1 && !(but2 || but3 || but4)) {
    digitalWrite(REL1, LOW);
}

// остальные по аналогии

 

Bum
Offline
Зарегистрирован: 16.01.2015

может все через if реолизовать.

if
Конструкция if проверяет, будет ли выполнено некое условие, такое, как,
например, будет ли аналоговое значение больше заданного числа, и выполняет
какое-то выражение в скобках, если это условие true (истинно). Если нет, то
выражение в скобках будет пропущено. Формат для if следующий:

if (someVariable ?? value) {

                                        }
Пример выше сравнивает someVariable со значением (value), которое может быть
и переменной, и константой. Если выражение или условие в скобках истинно,
выполняется выражение в фигурных скобках. Если нет, выражение в фигурных
скобках пропускается, и программа выполняется с оператора, следующего за
скобками.
Примечание: Остерегайтесь случайного использования «=», как в if (x = 10), что
технически правильно, определяя x равным 10, но результат этого всегда true.
Вместо этого используйте «==», как в if (x == 10), что осуществляет проверку
значения x — равно ли оно 10 или нет. Запомните «=» - равно, а «==» - равно ли?

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

кнопки можно подсоединить к пинам 8...12 и считывать состояние регистра

далее через swith

01111 = включить все реле

10111 - выкл Р_4

11011 - выкл Р_3

11101 - выкл Р_2

11110 - выкл Р_1

все остальные комбинации - ничего не делать

кнопки через подтяжку к земле !!!!!

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

всего если 5 кнопок как понял, то включить все 4 рэле без проблемм (не считая от ложных срабатываний с использованием delay или millis/micros)

а выключить также несложно

добавляем флаг что все рэле были включены например booalean all_on=1 после нажатия определенной кнопки

после этого в обработку остальных кнопок в условие добавить 

if(all_on && digitalRead(button_1) dagitalWrite(channel_1, 0);

if(all_on && digitalRead(button_2) dagitalWrite(channel_2, 0);

if(all_on && digitalRead(button_3) dagitalWrite(channel_3, 0);

if(all_on && digitalRead(button_4) dagitalWrite(channel_4, 0);

не помю как пишется точно, кажется elseif. можно использовать, но сути не меняет

все это дело еще запихнуть в функцию и цикл, цикл в приципе необязателен, как и функция, просто проще для понимания

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

 

arter
Offline
Зарегистрирован: 16.01.2015

всем спасибо, приду с работы буду пробоват

 

arter
Offline
Зарегистрирован: 16.01.2015

ничего не получается у меня, может кто по подробней описать как что делать?

arter
Offline
Зарегистрирован: 16.01.2015
int switchPin = 12;
int relay1Pin = 6;
int loc1Pin = 2;
int loc2Pin = 3;
int relay2Pin = 7;
int relay3Pin = 8;
int loc3Pin = 4;
int loc4Pin = 5;
int relay4Pin = 9;



void setup()
{
  pinMode(switchPin, INPUT);
  pinMode(relay1Pin, OUTPUT);
  pinMode(loc1Pin, INPUT);
  pinMode(relay2Pin, OUTPUT);
  pinMode(loc2Pin, INPUT);
  pinMode(relay3Pin, OUTPUT);
  pinMode(loc3Pin, INPUT);
  pinMode(relay4Pin, OUTPUT);
  pinMode(loc4Pin, INPUT);
  
 
}

void loop()

{
  if (digitalRead(switchPin) == LOW)
  {  
    if (digitalRead(loc1Pin) == LOW)
  digitalWrite(relay1Pin, LOW);   
  } 
  if (digitalRead(switchPin) == LOW)
  { 
    if (digitalRead(loc2Pin) == LOW)  
    digitalWrite(relay2Pin, LOW );
  }
  if (digitalRead(switchPin) == LOW)
  {   
    if (digitalRead(loc3Pin) == LOW)  
    digitalWrite(relay3Pin, LOW);
  }
  if (digitalRead(switchPin) == LOW)
  {  
    if (digitalRead(loc4Pin) == LOW) 
    digitalWrite(relay4Pin, LOW );
  }
   else 
  {
 
   digitalWrite(relay1Pin, HIGH);

   digitalWrite(relay2Pin, HIGH);
   
   digitalWrite(relay3Pin, HIGH);

   digitalWrite(relay4Pin, HIGH);  
  
  }
}

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

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

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

про работу с кнопками почитай. от ложных срабатываний

и можно же написать по другому

//==========================Кнопки
#define switchPin 12
#define loc1Pin    2
#define loc2Pin    3
#define loc3Pin    4
#define loc4Pin    5
//============================Рэле
#define relay1Pin  6
#define relay2Pin  7
#define relay3Pin  8
#define relay4Pin  9

void setup(){
  pinMode(switchPin, INPUT_PULLUP);
  pinMode(loc1Pin,   INPUT_PULLUP);
  pinMode(loc2Pin,   INPUT_PULLUP);
  pinMode(loc3Pin,   INPUT_PULLUP);
  pinMode(loc4Pin,   INPUT_PULLUP);
  pinMode(relay1Pin,   OUTPUT);
  pinMode(relay2Pin,   OUTPUT);
  pinMode(relay3Pin,   OUTPUT);
  pinMode(relay4Pin,   OUTPUT);
  
}

void loop(){
  if (digitalRead(switchPin) == LOW){
    if (digitalRead(loc1Pin) == LOW)  digitalWrite(relay1Pin, LOW);   
    if (digitalRead(loc2Pin) == LOW)  digitalWrite(relay2Pin, LOW);
    if (digitalRead(loc3Pin) == LOW)  digitalWrite(relay3Pin, LOW);
    if (digitalRead(loc4Pin) == LOW)  digitalWrite(relay4Pin, LOW);
  }
   else {
   digitalWrite(relay1Pin, HIGH);
   digitalWrite(relay2Pin, HIGH);
   digitalWrite(relay3Pin, HIGH);
   digitalWrite(relay4Pin, HIGH);  
   }
}

правда после else меня смущает, но оставил как есть

arter
Offline
Зарегистрирован: 16.01.2015

jeka_tm пишет:

про работу с кнопками почитай. от ложных срабатываний

и можно же написать по другому


правда после else меня смущает, но оставил как есть

 

ложный срабатываний нет. сколько не проверял...

и ваш набросок кода не работает... он только включает все реле разом, не смотря на кнопки 1-4

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у тебя кнопки подтянуты куда нибудь?

я в коде добавил подтяжку к плюсу. а ты как делаешь?

реле каким потенциалом замыкает контакты?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

arter пишет:
проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя

Перед кодом "включение всех кнопок" сделать проверку - не нажата ли сейчас кнопка 1-4.

arter
Offline
Зарегистрирован: 16.01.2015

jeka_tm пишет:

у тебя кнопки подтянуты куда нибудь?

я в коде добавил подтяжку к плюсу. а ты как делаешь?

реле каким потенциалом замыкает контакты?

все кнопки работают с "+", то есть на все кнопи подтсянуты к плюсу, так же и реле.

arter
Offline
Зарегистрирован: 16.01.2015

Tomasina пишет:

arter пишет:
проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя

Перед кодом "включение всех кнопок" сделать проверку - не нажата ли сейчас кнопка 1-4.

а разве мой код не далает это?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

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

потяжка к земле это это когда один пин кнопки висит на плюсе, а второй через резистор к минусу

у тебя как?

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

arter пишет:
а разве мой код не далает это?

Из кода в посте #12 сложно навскидку что-то понять. Получается, что не делает: проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя

Лучше так:

/* есть 5 кнопок (0,1,2,3,4)
 кнопка 0 включает все реле. только вкючает.
 а кнопки 1,2,3,4 выключают реле, если зажата одна, две или все  кнопки, то соответствующее реле не включается.
 каждая из 1,2,3,4 кнопки, выкючает тоько 1 реле */


// Задаем подключенные пины
#define PIN_BUTTON 12              // пин кнопки 0
const byte pinLock[4]={2,3,4,5};   // пины кнопок 1-4
const byte pinRelay[4]={6,7,8,9};  // пины реле 1-4


void setup()
{
  pinMode(PIN_BUTTON, INPUT);
  for (byte i=1; i>4; i++)           // последовательно с 1-го по 4-е
  {      
    pinMode(pinLock[i-1], INPUT);    // определяем пины на ввод
    pinMode(pinRelay[i-1], OUTPUT);  // или вывод
  } 
}


void loop()
{
  if (digitalRead(PIN_BUTTON))      // если нажали кнопку 0, то включаем все реле
  {
    for (byte i=1; i>4; i++)        // последовательно с 1-го по 4-е
    {
      relayOn(i);                   // отдаем команду на включение i-го реле
    } 
  }  


  for (byte i=1; i>4; i++)            // последовательно с 1-го по 4-ю проверяем кнопки
  {
    if (digitalRead(pinLock[i-1]))    // если нажата, то...
      relayOff(i);                    //  отдаем команду на выключение реле
  } 
}


void relayOn(byte n)
{
  if (digitalRead(pinLock[n-1]) == LOW)    // если n-я кнопка НЕ нажата
  {
    digitalWrite(pinRelay[n-1], HIGH);     // то включаем n-e реле
    // здесь делаем что-то еще
  }
}


void relayOff(byte k)
{
  digitalWrite(pinRelay[k-1], LOW);     // выключаем n-e реле
  // здесь делаем что-то еще
}

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

кнопки на землю и на пины

#define pinR1 8
#define pinR2 9
#define pinR3 8
#define pinR4 10


#define pinBut1   A0
#define pinBut2   A1
#define pinBut3   A2
#define pinBut4   A3
#define pinButSET A4

byte command;
void setup()
{                
  DDRB= B00001111; // 4 выхода
  PORTB=B00000000; // 4 выхода - в ноль
  DDRC= B00000000; // 4 входа
  PORTC=B00011111; // 4 входа - подтяжка
}
//===============================================================
void loop()
{
  command=PINC;
  delay(100);
  switch (command)
    {
      case B11101111: PORTB=PORTB | B00001111; break;
      case B11110111: PORTB=PORTB & B11110111; break;
      case B11111011: PORTB=PORTB & B11111011; break;
      case B11111101: PORTB=PORTB & B11111101; break;
      case B11111110: PORTB=PORTB & B11111110; break;
    }
}
//===============================================================

 

arter
Offline
Зарегистрирован: 16.01.2015

SU-27-16 пишет:

кнопки на землю и на пины

#define pinR1 8
#define pinR2 9
#define pinR3 8
#define pinR4 10


#define pinBut1   A0
#define pinBut2   A1
#define pinBut3   A2
#define pinBut4   A3
#define pinButSET A4

byte command;
void setup()
{                
  DDRB= B00001111; // 4 выхода
  PORTB=B00000000; // 4 выхода - в ноль
  DDRC= B00000000; // 4 входа
  PORTC=B00011111; // 4 входа - подтяжка
}
//===============================================================
void loop()
{
  command=PINC;
  delay(100);
  switch (command)
    {
      case B11101111: PORTB=PORTB | B00001111; break;
      case B11110111: PORTB=PORTB & B11110111; break;
      case B11111011: PORTB=PORTB & B11111011; break;
      case B11111101: PORTB=PORTB & B11111101; break;
      case B11111110: PORTB=PORTB & B11111110; break;
    }
}
//===============================================================

 

 

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

 

arter
Offline
Зарегистрирован: 16.01.2015

Tomasina пишет:

Из кода в посте #12 сложно навскидку что-то понять. Получается, что не делает: проблема только вот в чем, при нажатии кнопки "0", все реле включаются даже если кнопки нажаты, после того как кнопку "0" отпускаешь реле кнопки которых зажаты откюлючаюстя

Лучше так:

/* есть 5 кнопок (0,1,2,3,4)
 кнопка 0 включает все реле. только вкючает.
 а кнопки 1,2,3,4 выключают реле, если зажата одна, две или все  кнопки, то соответствующее реле не включается.
 каждая из 1,2,3,4 кнопки, выкючает тоько 1 реле */


// Задаем подключенные пины
#define PIN_BUTTON 12              // пин кнопки 0
const byte pinLock[4]={2,3,4,5};   // пины кнопок 1-4
const byte pinRelay[4]={6,7,8,9};  // пины реле 1-4


void setup()
{
  pinMode(PIN_BUTTON, INPUT);
  for (byte i=1; i>4; i++)           // последовательно с 1-го по 4-е
  {      
    pinMode(pinLock[i-1], INPUT);    // определяем пины на ввод
    pinMode(pinRelay[i-1], OUTPUT);  // или вывод
  } 
}


void loop()
{...

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

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

arter пишет:

SU-27-16 пишет:

кнопки на землю и на пины

#define pinR1 8
#define pinR2 9
#define pinR3 8
#define pinR4 10


#define pinBut1   A0
#define pinBut2   A1
#define pinBut3   A2
#define pinBut4   A3
#define pinButSET A4

byte command;
void setup()
{                
  DDRB= B00001111; // 4 выхода
  PORTB=B00000000; // 4 выхода - в ноль
  DDRC= B00000000; // 4 входа
  PORTC=B00011111; // 4 входа - подтяжка
}
//===============================================================
void loop()
{
  command=PINC;
  delay(100);
  switch (command)
    {
      case B11101111: PORTB=PORTB | B00001111; break;
      case B11110111: PORTB=PORTB & B11110111; break;
      case B11111011: PORTB=PORTB & B11111011; break;
      case B11111101: PORTB=PORTB & B11111101; break;
      case B11111110: PORTB=PORTB & B11111110; break;
    }
}
//===============================================================

 

 

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

 

он что - сразу заработал ? я про этот способ писал в ##7, 8

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012
#define pinR1 8
#define pinR2 9
#define pinR3 8
#define pinR4 10


#define pinBut1   A0
#define pinBut2   A1
#define pinBut3   A2
#define pinBut4   A3
#define pinButSET A4

byte command;
void setup()
{                
  DDRB= B00001111; // PB7 , PB6 , PB5 , PB4 - входы , PB3 , PB2 , PB1 , PB0 - вsходы
                   // это заменяет 4 команды pinMode( pin , INPUT )
                   //            и 4 команды pinMode( pin , OUTPUT )
  PORTB=B00000000; // на PB7......PB0 установить LOW
                   // это заменяет 8 команд digitalWrite( pin , LOW )
  DDRC= B00000000; // PС7......PС0 - входы
  PORTC=B00011111; // PС7 , PС6 , PС5 - входы без подтяжки , PС4 , PС3 , PС2 , PС1 , PС0 - входы c подтяжкой
}
//===============================================================
void loop()
{
  command=PINC; // считывает состояние 8-ми входов
                // это заменяет 8 команд digitalRead( pin )
  delay(100);
  switch (command)
    {
      case B11101111: PORTB=PORTB | B00001111; break; // нажата ВКЛ - вкл реле 1,2,3,4
      case B11110111: PORTB=PORTB & B11110111; break; // нажата 4 - выкл реле 4
      case B11111011: PORTB=PORTB & B11111011; break; // нажата 3 - выкл реле 3
      case B11111101: PORTB=PORTB & B11111101; break; // нажата 2 - выкл реле 2
      case B11111110: PORTB=PORTB & B11111110; break; // нажата 1 - выкл реле 1
      // другие варианты ( нажатие двух и более кнопок - просто не обрабатываются
      // обрабытываются 5 комбинаций из 32
    }
}
//===============================================================

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

пинам 2,3,4,5 не прописана подтяжка....

строка 18 -        pinMode( pinLock[i-1] , INPUT );    // определяем пины на ввод

строка 18А - digitalWrite( pinLock[i-1] , HIGH  );    // включаем подтяжку

а так ?

arter
Offline
Зарегистрирован: 16.01.2015

SU-27-16 пишет:

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

пинам 2,3,4,5 не прописана подтяжка....

строка 18 -        pinMode( pinLock[i-1] , INPUT );    // определяем пины на ввод

строка 18А - digitalWrite( pinLock[i-1] , HIGH  );    // включаем подтяжку

а так ?

вы уверены что строку "digitalWrite( pinLock[i-1] , HIGH  );" нудно вставить именно в setup.

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

может я не так подключаю.

arter
Offline
Зарегистрирован: 16.01.2015

       

 

 

вот схема, и код

int but1 = 2;
int but2 = 3;
int but3 = 4;
int but4 = 5;
 
int relay1Pin = 12; 
int relay2Pin = 11;
int relay3Pin = 10; 
int relay4Pin = 9;
 
int ButPin = A0;          
 
void setup()
{
  pinMode(relay1Pin, OUTPUT);
  pinMode(relay2Pin, OUTPUT);
  pinMode(relay3Pin, OUTPUT);
  pinMode(relay4Pin, OUTPUT);
  pinMode(but1, INPUT);
  pinMode(but2, INPUT);
  pinMode(but3, INPUT);
  pinMode(but4, INPUT);
}  
 
void loop()
{
  if(digitalRead(ButPin) == HIGH)  // если кнопка нажата
    {
     if(digitalRead(but1) == HIGH)
      { 
        digitalWrite(relay1Pin, HIGH);     
      }
      else                                
      {
        digitalWrite(relay1Pin,LOW); 
      }
    }
    if(digitalRead(ButPin) == HIGH)
    {
     if(digitalRead(but2) == HIGH)
      {
        digitalWrite(relay2Pin, HIGH);
      }
      else                                
      {               
        digitalWrite(relay2Pin,LOW);
      }
    
    }
 if(digitalRead(ButPin) == HIGH)  // если кнопка нажата
    {
     if(digitalRead(but3) == HIGH)
      { 
        digitalWrite(relay3Pin, HIGH);     
      }
      else                                
      {
        digitalWrite(relay3Pin,LOW); 
      }
    }
 if(digitalRead(ButPin) == HIGH)  // если кнопка нажата
    {
     if(digitalRead(but4) == HIGH)
      { 
        digitalWrite(relay4Pin, HIGH);     
      }
      else                                
      {
        digitalWrite(relay4Pin,LOW); 
      }
    }   
    
      if(digitalRead(but1) == LOW)
      {
       digitalWrite(relay1Pin, LOW);
      }
       if(digitalRead(but2) == LOW)
      {
       digitalWrite(relay2Pin, LOW);
      }
      if(digitalRead(but3) == LOW)
      {
       digitalWrite(relay3Pin, LOW);
      }
       if(digitalRead(but4) == LOW)
      {
       digitalWrite(relay4Pin, LOW);
      }
}
 
все реле включаются одновременно. не получилось сделать последовательно, так как для этого можно и так сделать, а с последовательным включением было бы просто идиально, так что не судите строго это первый проект.
в принципиальной схеме указаны простые реле, но по факту там релейный модуль (Relay Module 2), я их переделал что бы они работали от Плюса (то есть на них 4 контакта "END" "IN" "IN2" "VCC", и на "IN1""IN2" надо подавать "+". так как с "-" я долго не мог срастить как у них LOW а как HIGH).
 
Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

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

Его не надо никуда внедрять, это полностью готовый скетч. Сначала надо убедиться что он работает в таком виде, а уж потом переделывать под себя. Что именно не работает?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

у человека то подтяжка к минусу, а к говорил что к плюсу

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

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukomment...

для кнопок три основных схемы поключения :

резистор на GND и на PIN , кнопку на VCC и PIN

резистор на VCC и на PIN , кнопку на GND  и PIN

кнопку на GND  и PIN и digitalWrite( PIN , HIGH ) - схема 2 , только резистор внутренний, а внешнего нет

 

у вас подключено по схеме 1, мой скетч под схему 3

от какая схема 1 или 2,3 - зависит код в некоторых местах :)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

ТС , как успехи во вникании в скетч из #25 ?

arter
Offline
Зарегистрирован: 16.01.2015

Tomasina пишет:

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

Его не надо никуда внедрять, это полностью готовый скетч. Сначала надо убедиться что он работает в таком виде, а уж потом переделывать под себя. Что именно не работает?

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

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

 

arter
Offline
Зарегистрирован: 16.01.2015

SU-27-16 пишет:

http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii

для кнопок три основных схемы поключения :

резистор на GND и на PIN , кнопку на VCC и PIN

резистор на VCC и на PIN , кнопку на GND  и PIN

кнопку на GND  и PIN и digitalWrite( PIN , HIGH ) - схема 2 , только резистор внутренний, а внешнего нет

 

у вас подключено по схеме 1, мой скетч под схему 3

от какая схема 1 или 2,3 - зависит код в некоторых местах :)

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

 

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

Tomasina
Tomasina аватар
Offline
Зарегистрирован: 09.03.2013

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

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

Схему (хотя бы на бумажке, от руки, а не на словах) надо было выложить в самом первом посте, это сильно ускорило бы решение вопросов. ;)

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

таааааак ! начинаем лоббировать свои схемы и скетчи ! :)

схема всего-то - реле ( включение от HIGH ! ) - на указанные пины , кнопки - на землю и на указанные пины - ВСЁ !

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

разница небольшая...

аппаратно - схема1 нужен внешний резистор , схема2 нужен внешний резистор , схема2 НЕ нужен внешний резистор

программно - схема1 при отпущенной кнопке при опросе пина получим 0

                      схема1 при нажатой       кнопке при опросе пина получим 1

программно - схема2,3 при отпущенной кнопке при опросе пина получим 1

                      схема2,3 при нажатой       кнопке при опросе пина получим 0

т.е. - схема2,3 - начинает работать обратная-отрицательная логика - значащими становятся не 1 , а 0.... инверсия логики

arter
Offline
Зарегистрирован: 16.01.2015

SU-27-16 пишет:

#define pinR1 8
#define pinR2 9
#define pinR3 8
#define pinR4 10


#define pinBut1   A0
#define pinBut2   A1
#define pinBut3   A2
#define pinBut4   A3
#define pinButSET A4

byte command;
void setup()
{                
  DDRB= B00001111; // PB7 , PB6 , PB5 , PB4 - входы , PB3 , PB2 , PB1 , PB0 - вsходы
                   // это заменяет 4 команды pinMode( pin , INPUT )
                   //            и 4 команды pinMode( pin , OUTPUT )
  PORTB=B00000000; // на PB7......PB0 установить LOW
                   // это заменяет 8 команд digitalWrite( pin , LOW )
  DDRC= B00000000; // PС7......PС0 - входы
  PORTC=B00011111; // PС7 , PС6 , PС5 - входы без подтяжки , PС4 , PС3 , PС2 , PС1 , PС0 - входы c подтяжкой
}
//===============================================================
void loop()
{
  command=PINC; // считывает состояние 8-ми входов
                // это заменяет 8 команд digitalRead( pin )
  delay(100);
  switch (command)
    {
      case B11101111: PORTB=PORTB | B00001111; break; // нажата ВКЛ - вкл реле 1,2,3,4
      case B11110111: PORTB=PORTB & B11110111; break; // нажата 4 - выкл реле 4
      case B11111011: PORTB=PORTB & B11111011; break; // нажата 3 - выкл реле 3
      case B11111101: PORTB=PORTB & B11111101; break; // нажата 2 - выкл реле 2
      case B11111110: PORTB=PORTB & B11111110; break; // нажата 1 - выкл реле 1
      // другие варианты ( нажатие двух и более кнопок - просто не обрабатываются
      // обрабытываются 5 комбинаций из 32
    }
}
//===============================================================

 

я туту вычитал то такой rод может не работать, из за назначения пинов микроконтроллера 

  • (Код менее переносимый. При использовании digitalRead() и digitalWrite(), гораздо проще написать код, который будет работать на всех микроконтроллерах Atmel, тогда как управляющие регистры и регистры порта могут быть разными у каждого типа микроконтроллера.

у меня Arduino UNO R3 c контроллером ATMEGA328P

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

купи слона))

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

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

у всех МК они одинаковые, только у кого-то меньше , у кого-то больше - у ATtyni85 - всего один порт B и тот урезан до шести разрядов....

ну, и выводятся физически они на разные ноги микросхемы - всё просто !

http://arduino.ru/forum/obshchii/pin-mapping-sootvetstvie-vyvodov-i-regi...

а та программа под Arduino UNO R3 c контроллером ATMEGA328P и сделана :)