Arduino garaje controlador (6 / 8 paso)

Paso 6: El código de Arduino

Aquí está el código que se ejecuta en el Arduino:

/*
Controlador de garaje
Escrito por Aram Perez
Licenciado bajo GPLv2, disponible en http://www.gnu.org/licenses/gpl-2.0.txt
*/

#define LOG_SERIAL

#include < SPI.h >
#include < Ethernet.h >
#include < Wire.h >

#define NO_PORTA_PINCHANGES
#define NO_PORTC_PINCHANGES
#include < PinChangeInt.h >

#define IOPORT 23 //Normal telnet puerto
#define NBR_OF_RELAYS 4

Botón y sensores de puerta de garaje
#define GARAGE_CLOSED_SENSOR 2 //Connect a terminal NC, alta activa
#define GARAGE_PARTIALLY_OPEN_SENSOR 3 //Connect a ningún terminal, activo alto

#define RELAY0 4
#define GARAGE_RELAY RELAY0 //Relay para el botón de la puerta de garaje
#define relé 1 5
#define relé 2 6
#define RELAY3 7

#define CR ((char) 13)
#define LF ((char) 10)

Introduzca una dirección de MAC y dirección IP para el controlador a continuación.
La dirección IP dependerá de su red local.
puerta de enlace y subred son opcionales:
mac de estática bytes [] = {}
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
ip dirección IP estática (192 168 1, 170);
entrada de dirección IP estática (192, 168, 1, 1);
subred de dirección IP estática (255, 255, 255, 0);

server(IOPORT) de EthernetServer estáticos;
cliente de EthernetClient estático;

Static char relayState [NBR_OF_RELAYS];

clase GarageDoor
{
bool closedState, partiallyOpenState;
público:
GarageDoor();
void Init();
void SetClosedState(bool st) {}
closedState = st;
}
void SetPartiallyOpenState(bool st) {}
partiallyOpenState = st;
}
char State() const;
void PushButton();
};

garageDoor de GarageDoor estático;

Esto debe ser una función privada en la clase de GarageDoor
es decir, GarageDoor::StateChangedISR(void),
pero el compilador da un error si es :-(
Static void StateChangedISR(void)
{
Si (PCintPort::arduinoPin == GARAGE_CLOSED_SENSOR) {}
garageDoor.SetClosedState(PCintPort::pinState);
}
Else {}
Debe haber sido el GARAGE_PARTIALLY_OPEN_SENSOR:
garageDoor.SetPartiallyOpenState(PCintPort::pinState);
}
}

GarageDoor::GarageDoor()
{
}

void GarageDoor::Init()
{
pinMode (GARAGE_CLOSED_SENSOR, INPUT_PULLUP);
PCintPort::attachInterrupt (GARAGE_CLOSED_SENSOR y StateChangedISR, cambio);
pinMode (GARAGE_PARTIALLY_OPEN_SENSOR, INPUT_PULLUP);
PCintPort::attachInterrupt (GARAGE_PARTIALLY_OPEN_SENSOR y StateChangedISR, cambio);
closedState = digitalRead(GARAGE_CLOSED_SENSOR);
partiallyOpenState = digitalRead(GARAGE_PARTIALLY_OPEN_SENSOR);
}

void GarageDoor::PushButton()
{
digitalWrite (GARAGE_RELAY, bajo);
Delay(400);  Demora segundos.4
digitalWrite (GARAGE_RELAY, alto);
}

char GarageDoor::State() const
{
Si (closedState) return 'c';
¿volver partiallyOpenState? 'p' : 'o';
}

void setup() {}
#ifdef LOG_SERIAL
Serial.Begin(56700);
#endif
inicializar el dispositivo ethernet
Ethernet.Begin (mac, ip, puerta de enlace, subred);
empezar a escuchar para clientes
Server.Begin();
garageDoor.Init();
para (int i = 0; i < NBR_OF_RELAYS; i ++) {}
pinMode (RELAY0 +, salida);  Zona 1
digitalWrite (RELAY0 +, HIGH); Relés de lógica de uso invertido, alta = Off
relayState [i] = '0';  Usar la lógica normal
}
Si (client.connected()) {}
Client.Flush();
}
#ifdef LOG_SERIAL
Serial.println("\r\nOK");
#endif
}

char ReadNext()
{
char ch = client.read();
#ifdef LOG_SERIAL
Serial.Print(CH);
#endif
volver ch;
}

//
Comandos:
//  g? -devolver el estado actual de la puerta del garaje
c - la puerta está cerrada
o - la puerta está completamente abierta
p - puerta está parcialmente abierta
GB - botón "push" de la puerta del garaje
¿RX? -relé de retorno x estado
rXY - relé set x a y (0 ó 1)
//
void loop() {}
Static char lastGarageDoorState = 'c';
char ch, rAsc;
Si (! client.connected()) {}
Si el cliente no está conectado, esperar para un nuevo cliente:
cliente = server.available();
}
Si (client.available() > 0) {}
int rNdx;
bool err = false;
mientras (client.available() > 0) {}
interruptor (ReadNext()) {}
caso 'g':
interruptor (ReadNext()) {}
caso '?':
CH = garageDoor.State();
Client.Print('g');
Client.println(CH);
#ifdef LOG_SERIAL
Serial.Print ("> g");
Serial.println(CH);
#endif
rotura;
caso 'b':
garageDoor.PushButton();
rotura;
por defecto:
ERR = true;
}
rotura;
caso 'r':
CH = ReadNext();
interruptor (ch) {}
caso '1':
caso '2':
Case '3':
rAsc = ch;
rNdx = ch - '1';
CH = ReadNext();
interruptor (ch) {}
caso '?':
CH = relayState [rNdx];
rotura;
caso '0':
digitalWrite (relé 1 + rNdx, HIGH);  Lógica invertida
relayState [rNdx] = ch;
rotura;
caso '1':
digitalWrite (relé 1 + rNdx, LOW);  Lógica invertida
relayState [rNdx] = ch;
rotura;
por defecto:
ERR = true;
}
Si (! err) {}
Client.Print('r');
Client.Print(rAsc);
Client.println(CH);
#ifdef LOG_SERIAL
Serial.Print('>');
Serial.println(CH);
#endif
}
rotura;
por defecto:
ERR = true;
}
rotura;
caso de CR:
caso LF:
rotura;    Ignorar el CR y LF
por defecto:
ERR = true;
}
}
Si (err) {}
Client.println('?');
#ifdef LOG_SERIAL
Serial.println ("> ¿Qué decir?");
#endif
}
}
CH = garageDoor.State();
Si (ch! = lastGarageDoorState) {}
lastGarageDoorState = ch;
Client.Print('g');
Client.println(CH);
#ifdef LOG_SERIAL
Serial.Print ("> g");
Serial.println(CH);
#endif
}
}

Artículos Relacionados

3 canal arduino Powered controlador de luces de Navidad!

3 canal arduino Powered controlador de luces de Navidad!

Para Navidad este año, quise hacer un proyecto genial pero bastante no sabía qué hacer. Como me estaba poniendo la salida de luces de Navidad para decorar, había un viejo temporizador de luz de Navidad roto. Tomé distancia y miró a su alrededor en el
Enchufe y juego Arduino temperatura controlador

Enchufe y juego Arduino temperatura controlador

He visto algunos proyectos de los controlador de temperatura diferentes aquí. Yo quería crear uno, con las siguientes restricciones:Aparato "tonto" controlado puede conectarse directamente a la unidad. No quiero hackear en el dispositivo, pero l
Arduino escritorio controlador de ventilador

Arduino escritorio controlador de ventilador

Cuando cambié recientemente papeles dentro de la empresa, me trasladé a sitios, pasando de Bradford a nuestra sede en Wakefield. Le dije adiós a mi fiel escritorio antiguo con deben tener ventilador de escritorio para mantenerme fresco mientras todo
Python/Arduino Serial controlador: Horno casero

Python/Arduino Serial controlador: Horno casero

Lo que empezó como un simple proyecto para hacer un envase de leña pequeñas para los experimentos de cerámica espiral fuera de control en una chatarra-construido, CPU controlada, horno de oxígeno inyectado miniatura.El proyecto acabado combina un GUI
Arduino con controlador de pantalla LED MM5451

Arduino con controlador de pantalla LED MM5451

El tema aquí es conectar el Arduino a la pantalla de MM5451 LEDcontrolador. Esto está escrito en C para demostrar el funcionamiento del registro de cambio y programación bit a bit.Utilizando solamente dos pines de entrada (reloj y datos) para la entr
Arduino Aquaponics: Controlador de bomba de JSON

Arduino Aquaponics: Controlador de bomba de JSON

cuando empezamos a desarrollar el Controlador acuaponia nos dimos cuenta de que queríamos una sola unidad que puede manejar múltiples situaciones.  Algunos sistemas de acuaponia de inundación y desagüe cambiar la bomba enciende y apaga en intervalos
Xbox de mod controlador del 360 Arduino usando (MW3)

Xbox de mod controlador del 360 Arduino usando (MW3)

no quiero comprar un chip de controlador de modded por dos razones uno sólo hacen una cosa y dos que se convierten hacia fuera rápidamente, haciéndolos inútiles para nuevos juegos de la fecha. Así que el arduino que solo recogí parecía perfecto, es p
Guía paso a paso al controlador de robot mago Micro (Arduino compatible)

Guía paso a paso al controlador de robot mago Micro (Arduino compatible)

el Micro mago de DAGU es un bajo costo Arduino compatible controlador diseñado especialmente para principiantes que quieren construir un pequeño robot. El Consejo tiene una serie de accesorios útiles construido en forma que en la mayoría de los casos
II GOduino = Arduino + controlador de Motor L293D Velocidad Variable

II GOduino = Arduino + controlador de Motor L293D Velocidad Variable

versionesGOduino II fue presentado en dangerousprototypes.com07/04/2012 he añadido una diapositiva del presupuesto para aquellos lectores que preguntaban donde obtuve mi presupuesto < $20 para el II de GOduino.INTRODUCCIÓNEl GOduino II es un controla
Robot, conducido por el controlador de PS3 a través de Wifi y Arduino shield

Robot, conducido por el controlador de PS3 a través de Wifi y Arduino shield

esto es un robot que utiliza los dos joysticks izquierdos y derecho en el controlador de PS3 al disco "tanque-estilo." El chasis, ruedas y motores se compran en un kit. Un Arduino Uno se monta en el chasis y un escudo de Wifi se apila encima de
Velocidad coche RC controlado con (controlador de controlador de Motor de CH 4 + Arduino + Bluetooth)

Velocidad coche RC controlado con (controlador de controlador de Motor de CH 4 + Arduino + Bluetooth)

Hola, ya que este es mi primer instructivo aquí, espero que te guste y no dude en preguntar sobre cualquier cosa no clara en él.En primer lugar, empecé este proyecto después de que quería controlar 4 motores que requiere de relativamente alta potenci
Arduino Windows y el controlador de PS3

Arduino Windows y el controlador de PS3

esta guía le mostrará cómo convertir su Arduino Uno en un controlador de Windows/PS3. Es totalmente configurable y puede cambiar la entrada y salida a cualquier botón que desee. Esto significa que puede un nunchuck de wii hasta el gancho y jugar con
Arduino termopar Sous Vide controlador

Arduino termopar Sous Vide controlador

este proyecto hace uso de y estructuras en los proyectos anteriores.  Después de completar este proyecto, puede utilizar un Crock-Pot de bajo costo como una olla de Sous Vide de precisión de temperatura controlada.En la mejora de este proyecto, he añ
Controlador de velocidad de ventilador PWM de Arduino

Controlador de velocidad de ventilador PWM de Arduino

Simple dos canales PWM de Arduino velocidad controlador Escudo VentilosoPuede descargar el pcb un sch (hecho con el expresspcb) de mi sitio web (sección download): http://www.apcc.tkPaso 1: Lista de piezas Lista de piezas:-cara sola 3,5 cm x 6 cm-tra