к nano подключить больше 8 реле

sersahar
Offline
Зарегистрирован: 04.06.2014

На практике имею: на пинах d3-d9 все отлично. на d2 реле живет своей жизнью, т.е. иногда само включается/выключается. на d10 изначально светодиод реле светится, хотя оно в положении LOW. Программно выходы активирую

pinMode(v2, OUTPUT);
  digitalWrite(v2, HIGH);
  pinMode(v3, OUTPUT);
  digitalWrite(v3, HIGH);

 и так далее.. Вот и можно ли реализовать использование 10 выходов? Спасибо

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

Приведите плз весь скетч.

Araris
Offline
Зарегистрирован: 09.11.2012

От чего питаются реле ?

sersahar
Offline
Зарегистрирован: 04.06.2014

реле питаниются от внешнего БП 5 вольт. Скетчи разные, везде реализованно управление реле через веб а так же пингование хостов. Да даже просто банально делал простой пример, и просто назначал разные выходы, и результат тот же. с 3 по 9 все ок, а вот остальные беда

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

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

sersahar
Offline
Зарегистрирован: 04.06.2014

с D2 похоже разобрался. Проблема была действительно в скетче. Загрузил старый скетч, который написано по другому алгоритму - проблем нет. А вот что подскажите с d10,11 ? Они при любых условиях не работают у меня :(

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

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

sersahar
Offline
Зарегистрирован: 04.06.2014
#include <dnslkup.h>
#include <enc28j60.h>
#include <EtherShield.h>
#include <ip_arp_udp_tcp.h>
#include <ip_config.h>
#include <net.h>
#include <websrv_help_functions.h>

// A simple web server to turn 2 LED on or off

#include "etherShield.h"
#include "ETHER_28J60.h"

int outputPin = 2; // LED1 to pin 6
int anotherOutputPin = 3; // LED2 to pin 7
int anotherOutputPin5 = 4; // LED2 to pin 5
int anotherOutputPin9 = 5; // LED2 to pin 9

static uint8_t mac[6] = {
  0x54, 0x55, 0x58, 0x10, 0x00, 0x24};   // this just needs to be unique for your network, 

static uint8_t ip[4] = {
  192, 168, 100, 222}; // IP address for the webserver

static uint16_t port = 80; // Use port 80 - the standard for HTTP

ETHER_28J60 e;

void setup()
{ 
  e.setup(mac, ip, port);
  pinMode(outputPin, OUTPUT);
  pinMode(anotherOutputPin, OUTPUT);
  pinMode(anotherOutputPin5, OUTPUT);
  pinMode(anotherOutputPin9, OUTPUT);
  digitalWrite(anotherOutputPin9, HIGH);
  digitalWrite(anotherOutputPin5, HIGH);
  digitalWrite(anotherOutputPin, HIGH);
  digitalWrite(outputPin, HIGH);
}

void loop()
{
  char* params;
  if (params = e.serviceRequest())
  {
    e.print("<h1><a href='/?led1=on&led2=on'>Arduino Web Remote</a></h1>");
    e.print("<h1><a href='/?led5'>Reset1</a></h1>");
    e.print("<h1><a href='/?led9'>Reset2</a></h1>");
    if (strcmp(params, "?led5") == 0)
    {     
      digitalWrite(anotherOutputPin5, LOW);
      delay(30);
      digitalWrite(anotherOutputPin5, HIGH);
    }
    
     if (strcmp(params, "?led9") == 0)
    {     
      digitalWrite(anotherOutputPin9, LOW);
      delay(30);
      digitalWrite(anotherOutputPin9, HIGH);
    }
    
    if (strcmp(params, "?led1=on&led2=off") == 0)
    {
      digitalWrite(outputPin, HIGH);
      digitalWrite(anotherOutputPin, LOW);
      e.print("<a href='?led1=off&led2=off'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>POWER ON</button></a><a href='?led1=on&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>POWER IS OFF</button></a>");
    }
    else if (strcmp(params, "?led1=off&led2=on") == 0)
    {
      digitalWrite(outputPin, LOW);
      digitalWrite(anotherOutputPin, HIGH);
      e.print("<a href='?led1=on&led2=on'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>POWER OFF</button></a><a href='?led1=off&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>POWER IS ON</button></a>");
    }
    else if (strcmp(params, "?led1=off&led2=off") == 0)
    {
      digitalWrite(outputPin, LOW);
      digitalWrite(anotherOutputPin, LOW);
      e.print("<a href='?led1=on&led2=off'><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>POWER  OFF</button></a><a href='?led1=off&led2=on'><br/><button style='border: 1px solid #000; border-left: 10px solid #000' type='button'>POWER IS OFF</button></a>");
    }
    else if (strcmp(params, "?led1=on&led2=on") == 0)
    {
      digitalWrite(outputPin, HIGH);
      digitalWrite(anotherOutputPin, HIGH);
      e.print("<a href='?led1=off&led2=on'><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>POWER ON</button></a><a href='?led1=on&led2=off'><br/><button style='border: 1px solid #ff0000; border-left: 10px solid #ff0000' type='button'>POWER IS ON</button></a>");
    }
    e.respond();
  }
}

 

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

Внимание, вопрос: а какие пины для своей работы использует ETHER_28J60? Подозреваю, что работает сие через SPI, следовательно пины 10, 11, 12, 13 (или 8, 11, 12, 13) - заняты под нужды SPI.

Я ответил на ваш вопрос о том, почему реле на этих пинах не работает, как надо?

sersahar
Offline
Зарегистрирован: 04.06.2014

Большое спасибо!!!