Contrôleur de Garage Arduino (6 / 8 étapes)

Étape 6: Le Code de l’Arduino

Voici le code qui s’exécute sur l’Arduino :

/*
Contrôleur de garage
Rédigé par Aram Perez
Une licence sous GPLv2, disponible à 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 port
#define NBR_OF_RELAYS 4

Bouton poussoir & capteurs de porte de garage
#define GARAGE_CLOSED_SENSOR 2 //Connect à la borne NC, active haute
#define GARAGE_PARTIALLY_OPEN_SENSOR 3 //Connect à aucune borne, active haute

#define RELAY0 4
#define GARAGE_RELAY RELAY0 //Relay pour le bouton de porte de garage
#define relais 1 5
#define relais 2 6
#define RELAY3 7

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

Entrez une adresse MAC et l’adresse IP de votre contrôleur ci-dessous.
L’adresse IP sera tributaire de votre réseau local.
porte d’entrée et de sous-réseau sont facultatifs :
public static byte mac = {}
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
public static IPAddress ip (192 168 1, 170) ;
public static IPAddress passerelle (192, 168, 1, 1) ;
public static IPAddress sous-réseau (255, 255, 255, 0) ;

public static EthernetServer server(IOPORT) ;
public static EthernetClient client ;

public static char relayState [NBR_OF_RELAYS] ;

classe passerelle
{
bool closedState, partiallyOpenState ;
public :
GarageDoor() ;
void Init() ;
void SetClosedState(bool st) {}
closedState = m ;
}
void SetPartiallyOpenState(bool st) {}
partiallyOpenState = m ;
}
char State() const ;
void PushButton() ;
};

public static passerelle passerelle ;

Cela devrait être une fonction privée dans la classe passerelle
p. ex. GarageDoor::StateChangedISR(void),
mais le compilateur donne une erreur si elle est:-(
public static void StateChangedISR(void)
{
Si (PCintPort::arduinoPin == GARAGE_CLOSED_SENSOR) {}
garageDoor.SetClosedState(PCintPort::pinState) ;
}
else {}
Doit avoir été la GARAGE_PARTIALLY_OPEN_SENSOR :
garageDoor.SetPartiallyOpenState(PCintPort::pinState) ;
}
}

GarageDoor::GarageDoor()
{
}

Sub GarageDoor::Init()
{
pinMode (GARAGE_CLOSED_SENSOR, INPUT_PULLUP) ;
PCintPort::attachInterrupt (GARAGE_CLOSED_SENSOR, & StateChangedISR, changement) ;
pinMode (GARAGE_PARTIALLY_OPEN_SENSOR, INPUT_PULLUP) ;
PCintPort::attachInterrupt (GARAGE_PARTIALLY_OPEN_SENSOR, & StateChangedISR, changement) ;
closedState = digitalRead(GARAGE_CLOSED_SENSOR) ;
partiallyOpenState = digitalRead(GARAGE_PARTIALLY_OPEN_SENSOR) ;
}

Sub GarageDoor::PushButton()
{
digitalWrite (GARAGE_RELAY, basse) ;
Delay(400) ;  Retard.4 secs
digitalWrite (GARAGE_RELAY, élevé) ;
}

char GarageDoor::State() const
{
Si (closedState) retour "c" ;
retour partiallyOpenState ? 'p' : 'o';
}

void setup() {}
#ifdef LOG_SERIAL
Serial.Begin(56700) ;
#endif
initialiser le périphérique ethernet
Ethernet.Begin (mac, ip, passerelle, sous-réseau) ;
démarrer l’écoute des clients
Server.Begin() ;
garageDoor.Init() ;
pour (int i = 0; i < NBR_OF_RELAYS; i ++) {}
pinMode (RELAY0 + i, sortie) ;  Zone 1
digitalWrite (RELAY0 + i, HIGH) ; Logique d’utilisation inversée les relais, élevée = Off
relayState [i] = « 0 » ;  Utiliser la logique normale
}
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
retour de ch ;
}

//
Commandes :
//  g? -retourner l’actuel état de porte de garage
c - la porte est fermée
o - la porte est complètement ouverte
p - porte est entrouverte
GB - bouton de porte de garage « push »
RX ? -Relais retour x État
rxy - relais set x à y (0 ou 1)
//
void loop() {}
public static char lastGarageDoorState = « c » ;
char ch, SRAC ;
Si (! client.connected()) {}
Si le client n’est pas connecté, attendez un nouveau client :
client = server.available() ;
}
Si (client.available() > 0) {}
int rNdx ;
bool err = false ;
tandis que (client.available() > 0) {}
Switch (ReadNext()) {}
case « g » :
Switch (ReadNext()) {}
cas '?' :
ch = garageDoor.State() ;
client.Print('g') ;
client.println(ch) ;
#ifdef LOG_SERIAL
Serial.Print (« > g ") ;
Serial.println(ch) ;
#endif
rupture ;
case « b » :
garageDoor.PushButton() ;
rupture ;
par défaut :
ERR = true ;
}
rupture ;
case « r » :
ch = ReadNext() ;
commutateur (ch) {}
affaire « 1 » :
affaire « 2 » :
affaire « 3 » :
SRAC = ch ;
rNdx = ch - « 1 » ;
ch = ReadNext() ;
commutateur (ch) {}
cas '?' :
ch = relayState [rNdx] ;
rupture ;
affaire « 0 » :
digitalWrite (relais 1 + rNdx, HIGH) ;  Logique inversée
relayState [rNdx] = ch ;
rupture ;
affaire « 1 » :
digitalWrite (relais 1 + rNdx, faible) ;  Logique inversée
relayState [rNdx] = ch ;
rupture ;
par défaut :
ERR = true ;
}
Si (! err) {}
client.Print('r') ;
client.Print(rAsc) ;
client.println(ch) ;
#ifdef LOG_SERIAL
Serial.Print('>') ;
Serial.println(ch) ;
#endif
}
rupture ;
par défaut :
ERR = true ;
}
rupture ;
boitier CR :
cas LF :
rupture ;    Ignorer les CR et LF
par défaut :
ERR = true ;
}
}
Si {(err)
client.println('?') ;
#ifdef LOG_SERIAL
Serial.println ("> Say what?") ;
#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
}
}

Articles Liés

Contrôleur Midi de Arduino avec une Distance de ZX et geste capteur

Contrôleur Midi de Arduino avec une Distance de ZX et geste capteur

Bienvenue sur ce instructable comment construire un contrôleur Midi très basique avec le SparkFun ZX Distance et le capteur de mouvement. Cette instructable fait partie d'un travail scolaire.Remarque : Il s'agit d'aucun tutoriel codage. Le code final
1 fil contrôleur LCD pour Arduino

1 fil contrôleur LCD pour Arduino

Alors qu'il travaillait sur un projet de ATtiny que j'ai trouvé je manquait le nombre requis de pins et besoin de fixer un écran LCD avec juste 1 filJ'avais trouvé une Instructable sur comment utiliser un registre à décalage pour contrôler l'écran LC
Plus simple objet Counter & salle électricité contrôleur en utilisant Arduino et capteurs IR

Plus simple objet Counter & salle électricité contrôleur en utilisant Arduino et capteurs IR

Il est tout à fait simple et C00L... Object_Counter, qui compte des objets. qui sont venant à l'intérieur de porte dans la pièce et aller à l'extérieur de la porte. Il s'agit d'un projet polyvalent que cela fonctionne comme un compteur de l'objet com
Contrôleur de moteur Arduino Lego EV3 enregistrer 45 $

Contrôleur de moteur Arduino Lego EV3 enregistrer 45 $

En faisant un contrôleur de moteur bricolage lego ev3Étape 1: Intro J'ai un kit appelé le lego mindstorms EV3 c'est un incroyable robotique de 349 $ kit qui vraiment est simple à construire comme lego, mais dispose de fonctionnalités vraiment génial
Contrôleur de ventilateur Arduino bois poêle Insert

Contrôleur de ventilateur Arduino bois poêle Insert

Nous avons récemment installé un poêle dans notre cheminée à foyer ouverte pour aider avec la facture de chauffage à bois. Le modèle que nous avons choisi n'a pas un thermostat. L'utilisateur doit tourner manuellement le ventilateur sur quand le feu
Contrôleur de l’Arduino DIY

Contrôleur de l’Arduino DIY

mon premier Instructable est sur la façon de construire votre propre contrôleur Arduino !Vous pouvez le construire sur une maquette, mais je préfère à souder mes propres. Pour une utilisation avec des projets. Ce Conseil wil ne pas être en mesure de
Contrôleur de Flash Arduino pour la photographie

Contrôleur de Flash Arduino pour la photographie

être un photographe amateur fauché n'est pas facile.Films, les produits chimiques et les papiers ne sont pas bon marchés et un budget pour des lumières de studio est inexistant.Alors, j'ai décidé, avec l'aide de mon fidèle arduino, créer mon propre c
Contrôleur de voix (Arduino) - Smartphone Android Smart

Contrôleur de voix (Arduino) - Smartphone Android Smart

Contrôleur Smart de voix est un dispositif qui est extrêmement pratique, intéressant et facile à faire. À travers elle, vous pouvez contrôler jusqu'à 8 appareils dans votre maison, par des commandes vocales sur votre téléphone intelligent. Vous avez
Contrôleur de adil, Arduino basé manette sans fil

Contrôleur de adil, Arduino basé manette sans fil

un nouveau projet de télécommande multifonction. Il servira à contrôler les modèles de robots différents dont un quadcopter sur mesure. Il est basé sur le microcontrôleur ArduinoMega2560. Côte-à-côte avec un module de la gamme RF 1200m pour la connec
Contrôleur de Vide Arduino Thermocouple Sous

Contrôleur de Vide Arduino Thermocouple Sous

ce projet utilise et s'appuie sur des projets antérieurs.  À l'issue de ce projet, vous pouvez utiliser un bas prix Crock-Pot comme un cuiseur Sous Vide à température contrôlée précision.Dans la mise à niveau de ce projet, j'ai ajouté un 0 - 5vdc mèt
Contrôleur de gms Arduino pour webasto

Contrôleur de gms Arduino pour webasto

Il s'agit d'un projet simple où vous pouvez modifier l'état du relais en envoyant un message texte au bouclier GPRS connecté à l'arduino. Cela peut facilement être modifié pour contrôler un grand nombre de projets différents.J'ai vu beaucoup de gens
Arduino de contrôle fonctionne avec un contrôleur USB, aucune soudure requise-je l’ai fait à TechShop

Arduino de contrôle fonctionne avec un contrôleur USB, aucune soudure requise-je l’ai fait à TechShop

plus tôt cette année, j'ai décidé que ce serait amusant d'utiliser ma manette Xbox 360 filaire pour contrôler des projets Arduino - dans ce cas, une LED RGB. Toutefois, la méthode couramment utilisée pour le faire consiste à accéder à l'électronique
Contrôleur de la PlayStation 2 avec Raspberry Pi

Contrôleur de la PlayStation 2 avec Raspberry Pi

Ce tutoriel va montrer comment utiliser le contrôleur de Playstation 2 (PS2) avec le Raspberry Pi. Nous utilisons le Arduberry pour adapter le bouclier de la Raspberry Pi.Étape 1: Matériel nécessaireRaspberry PiArduberryDexter Industries Playstation
Carte de contrôleur de moteur L298N

Carte de contrôleur de moteur L298N

Un guide sur la façon d'utiliser la carte de contrôleur L298N moteur pilote, il s'agit d'une planche double contrôleur de moteur qui vous permettent de contrôler la direction et la vitesse de deux moteurs à courant continu ou un moteur pas à pas.Le L