Arduino nano к 8-ми канальному релейному модулю

poroh999
Offline
Зарегистрирован: 15.05.2018

Здраствуйте, подскажите пожалуйста, подключили Arduino nano к 8-ми канальному релейному модулю, залили прогу, но при включении ардуинка сразу выдаёт 5в. на все выхода и реле срабатывают,а нужно что сделать чтобы реле не срабатывали, может прописать какую нибудь команду.

вот прога, нам нужно просто управлять реле с монитора, здесь прописано что при нажатии 1, включается первое и второе реле, при нажатии 2 включается третье и четвёртое реле  и так далее:

byte pins[8] = {2,3,4,5,6,7,8,9};
bool states[8] = {0,0,0,0,0,0,0,0};
char nums[] = "11223344";
 
void setup()
{
  Serial.begin(9600);
  for(byte i = 0; i < 8; i++) 
    pinMode(pins[i], OUTPUT);
}
 
void loop()
{
  if(Serial.available())
  {
    char val = Serial.read();
    for(byte i = 0; i < 8; i++)
    { 
      if(val == nums[i]) 
      {
        states[i] = !states[i];
        digitalWrite(pins[i], states[i]);
        Serial.print(nums[i]);
        Serial.println(states[i]?" ON":" OFF");
      }
    }
  }
}
bwn
Offline
Зарегистрирован: 25.08.2014

После 18 строки добавьте:  digitalWrite(pins[i], LOW);

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

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

poroh999, в таких случаях включают реле командой pinMode(x, OUTPUT) а отключают командой pinMode(x, INPUT) .  Скетч нужно основательно переделать.

digitalWrite использовать не нужно.

poroh999
Offline
Зарегистрирован: 15.05.2018

bwn, спасибо, но не помогло, при включении всё равно все реле включаются

bwn
Offline
Зарегистрирован: 25.08.2014

poroh999 пишет:

bwn, спасибо, но не помогло, при включении всё равно все реле включаются

а как Dimax советовал? 

P/S я кстати не знаю, где там какая строка и никто не знает, пока код нормально не вставите.

poroh999
Offline
Зарегистрирован: 15.05.2018

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

poroh999
Offline
Зарегистрирован: 15.05.2018
byte pins[8] = {2,3,4,5,6,7,8,9};
bool states[8] = {0,0,0,0,0,0,0,0};
char nums[] = "11223344";

void setup()
{
  Serial.begin(9600);
  for(byte i = 0; i < 8; i++) 
    pinMode(pins[i], OUTPUT);
}

void loop()
{
  if(Serial.available())
  {
    char val = Serial.read();
    for(byte i = 0; i < 8; i++)
    { 
      if(val == nums[i]) 
      {
        states[i] = !states[i];
        digitalWrite(pins[i], states[i]);
        Serial.print(nums[i]);
        Serial.println(states[i]?" ON":" OFF");
      }
    }
  }
}

 

 

 

poroh999
Offline
Зарегистрирован: 15.05.2018

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

poroh999
Offline
Зарегистрирован: 15.05.2018

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

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

poroh999, я уже написал вам что нужно делать, это вполне по силам начинающему.  Есть правда способ проще, в сетапе добавить команду переводящую пин в HIGH перед тем как сделать его выходом.


	  for(byte i = 0; i < 8; i++)
	    digitalWrite(pins[i], HIGH);
	    pinMode(pins[i], OUTPUT);