Arduino Garage Controller (6 / 8 stap)

Stap 6: De Code van de Arduino

Hier is de code die wordt uitgevoerd op de Arduino:

/*
Garage Controller
Geschreven door Aram Perez
Beschikbaar onder de GPLv2, beschikbaar op 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-poort
#define NBR_OF_RELAYS 4

Garage deur sensoren & drukknop
#define GARAGE_CLOSED_SENSOR 2 //Connect naar NC terminal, actieve hoge
#define GARAGE_PARTIALLY_OPEN_SENSOR 3 //Connect op geen terminal, actieve hoog

#define RELAY0 4
#define GARAGE_RELAY RELAY0 //Relay voor garage deur knop
#define RELAY1 5
#define RELAY2 6
#define RELAY3 7

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

Voer een MAC-adres en het IP-adres voor uw controller hieronder.
Het IP-adres zullen afhankelijk van uw lokale netwerk.
gateway en subnet zijn optioneel:
statische byte mac [] {} =
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
statisch IP-adres IP-adres (192, 168, 1, 170);
statische IP-adres gateway (192, 168, 1, 1);
statische IP-adres subnet (255, 255, 255, 0);

statisch EthernetServer server(IOPORT);
statische EthernetClient cliënt;

statische char relayState [NBR_OF_RELAYS];

klasse garagedeur
{
BOOL closedState, partiallyOpenState;
publiek:
GarageDoor();
VOID Init();
VOID SetClosedState(bool st) {}
closedState = st;
}
VOID SetPartiallyOpenState(bool st) {}
partiallyOpenState = st;
}
char State() const;
nietig PushButton();
};

statische garagedeur-garagedeur;

Dit moet een prive-functie in de garagedeur-klasse
dat wil zeggen GarageDoor::StateChangedISR(void),
maar de compiler geeft een fout als er :-(
static void StateChangedISR(void)
{
Als (PCintPort::arduinoPin == GARAGE_CLOSED_SENSOR) {}
garageDoor.SetClosedState(PCintPort::pinState);
}
else {}
De GARAGE_PARTIALLY_OPEN_SENSOR moet zijn:
garageDoor.SetPartiallyOpenState(PCintPort::pinState);
}
}

GarageDoor::GarageDoor()
{
}

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

VOID GarageDoor::PushButton()
{
digitalWrite (GARAGE_RELAY, laag);
delay(400);  Vertraging.4 secs
digitalWrite (GARAGE_RELAY, hoge);
}

char GarageDoor::State() const
{
Als (closedState) terugkeer 'c';
partiallyOpenState retourneren? 'p' : 'o';
}

VOID Setup {}
#ifdef LOG_SERIAL
Serial.begin(56700);
#endif
initialiseren van het ethernet-apparaat
Ethernet.begin (mac, IP-gateway, subnet);
beginnen met luisteren voor clients
server.begin();
garageDoor.Init();
for (int i = 0; ik < NBR_OF_RELAYS; i ++) {}
pinMode (RELAY0 + i, OUTPUT);  Zone 1
digitalWrite (RELAY0 + i, hoge); Relais gebruik omgekeerde logica, hoog = Off
relayState [i] = '0';  Gebruik normaal logica
}
Als (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
retourneren van ch;
}

//
Commando's:
//  g? -huidige garage deur status opvragen
c - deur is gesloten
o - deur is volledig open
p - deur is gedeeltelijk open
GB - "push" garage deur knop
RX? -terugkeer relay x staat
rxy - set relay x naar y (0 of 1)
//
void loop {}
statische char lastGarageDoorState = 'c';
char ch, rAsc;
Als (! client.connected()) {}
Als de client niet is verbonden, wachten op een nieuwe klant:
klant = server.available();
}
Als (client.available() > 0) {}
int rNdx;
BOOL err = false;
terwijl (client.available() > 0) {}
schakelaar (ReadNext()) {}
Case 'g':
schakelaar (ReadNext()) {}
geval '?':
CH = garageDoor.State();
client.Print('g');
client.println(CH);
#ifdef LOG_SERIAL
Serial.Print ("> g");
Serial.println(CH);
#endif
breken;
Case "b":
garageDoor.PushButton();
breken;
standaard:
Err = true;
}
breken;
Case 'r':
CH = ReadNext();
schakelaar (ch) {}
Case '1':
Case '2':
Case '3':
rAsc = ch;
rNdx = ch - '1';
CH = ReadNext();
schakelaar (ch) {}
geval '?':
CH = relayState [rNdx];
breken;
Case '0':
digitalWrite (RELAY1 + rNdx, hoge);  Omgekeerde logica
relayState [rNdx] = ch;
breken;
Case '1':
digitalWrite (RELAY1 + rNdx, laag);  Omgekeerde logica
relayState [rNdx] = ch;
breken;
standaard:
Err = true;
}
Als (! err) {}
client.Print('r');
client.Print(rAsc);
client.println(CH);
#ifdef LOG_SERIAL
Serial.Print('>');
Serial.println(CH);
#endif
}
breken;
standaard:
Err = true;
}
breken;
Case CR:
Case LF:
breken;    Negeren CR & LF
standaard:
Err = true;
}
}
Als (err) {}
client.println('?');
#ifdef LOG_SERIAL
Serial.println ("> zeggen wat?");
#endif
}
}
CH = garageDoor.State();
Als (ch! = lastGarageDoorState) {}
lastGarageDoorState = ch;
client.Print('g');
client.println(CH);
#ifdef LOG_SERIAL
Serial.Print ("> g");
Serial.println(CH);
#endif
}
}

Gerelateerde Artikelen

Communiceren met arduino micro controller en computer door usb met een vb-programma

Communiceren met arduino micro controller en computer door usb met een vb-programma

Als u als me bent en wilt worden kundig voor zeggenschap uw items op uw arduino via uw computer aangesloten, dan moet je een manier om een verbinding tot stand brengen en communiceren met je arduino vanaf uw computer. Deze video en tutorial toont je
Arduino MIDI Controller

Arduino MIDI Controller

Een MIDI-controller is een stuk van apparatuur die genereert en stuurt MIDI-data naar MIDI-apparaten. Kortom, hebt u knoppen op uw MIDI-controller, kun je deze knoppen om elk geluid dat je door muzieksoftware wilt programmeren (ex.: Ableton, Garage B
Aangepaste Arduino MIDI Controller

Aangepaste Arduino MIDI Controller

Hallo, en welkom op dit instructable over het bouwen van een aangepaste, goedkoop en makkelijk USB MIDI-controller, gebaseerd op de Arduino. Het beste nieuws: geen gedoe met USB-naar-MIDI interfaces of softwaretools zoals Haarloze MIDI, gewoon plug '
Arduino verkeerslicht Controller w/Remote Control

Arduino verkeerslicht Controller w/Remote Control

ik had een verkeerslicht dat ik was voor het overspuiten van.  Het enige wat overblijft om te doen was om te bouwen van de controller voor het licht signaal patronen.  Als u wilt geven het een draai ik opgenomen een afstandsbediening.  Dit was ook de
Eenvoudige Basic Arduino Ethernet-Controller

Eenvoudige Basic Arduino Ethernet-Controller

ik onlangs ging naar buiten en kocht een Arduino Ethernet-Shield, maar kon niet echt zet het te gebruiken als ik een gemakkelijk tutorials vinden kon zodat ik begon te proberen code door mijzelf. Ik was in staat om te komen met een eenvoudige sectie
Plug en Play Arduino temperatuur controller

Plug en Play Arduino temperatuur controller

Ik heb een paar verschillende temperatuur controller projecten hier. Ik wilde te bouwen, met de volgende beperkingen:Gecontroleerde "stom" toestel kan worden aangesloten rechtstreeks op de eenheid. Ik wilde niet inbreken in het toestel, maar nog
Arduino MIDI-controller - techshop met scarff boarduino

Arduino MIDI-controller - techshop met scarff boarduino

ik heb gekeken rond een aantal verschillende arduino oplossingen voor MIDI. Mijn project concept omvat meer dan 100 analoge ingangen dat elk gevoel van snelheid en voorzien van MIDI-uitgang.   Met behulp van de achtergrondinfo die ik kreeg van techsh
Arduino Midi-controller met een ZX afstand en gebaar Sensor

Arduino Midi-controller met een ZX afstand en gebaar Sensor

Welkom bij dit instructable over het bouwen van een zeer basic Midi-Controller met de SparkFun ZX afstand en gebaar Sensor. Dit instructable is onderdeel van een schoolwerk.Opmerking: Dit is geen codering tutorial. De definitieve code zal worden opge
DIY ARDUINO FLIGHT CONTROLLER

DIY ARDUINO FLIGHT CONTROLLER

Laat bouwen een Arduino gebaseerd vlucht controller die draadloze afstemmen van PID, Afdrukstand lock en hoogte houdt en plaatst slot met behulp van een GPSkunt doen. OK dus deze controller DIY vlucht een educatieve module voor Arduino gebaseerd is.
Arduino Flash Controller voor fotografie

Arduino Flash Controller voor fotografie

een brak amateur fotograaf is niet eenvoudig.Film-, chemicaliën- en papier zijn niet goedkoop en een begroting voor enkele studio lampen is niet bestaand.Dus, heb ik besloten om, met de hulp van mijn trouwe arduino, maak mijn eigen sync-controller te
Eenvoudige Arduino Stoplight Controller

Eenvoudige Arduino Stoplight Controller

dit project als de naam hints is gewoon een zeer fundamentele controller voor een stop licht, ik gebruikte een arduino maar in werkelijkheid overkill was kan dit gemakkelijk worden gedaan met een ATtiny.Stap 1: benodigdhedenStoplicht (ik heb de mijne
Arduino Gamepad / controller

Arduino Gamepad / controller

Nou, Hallo er.Mijn naam is Rik Geersing.Ik ben een student aan de HKU in Utrecht, Nederland. Ik bestudeer Game Development.Nou, is het duidelijk dat wanneer iemand dit beroep bestudeert, hij/zij moet enige interesse in games hebben, en ik doen. Ik ho
Arduino Lens Controller - Zoom/Focus gesynchroniseerd met Wii Classic Controller

Arduino Lens Controller - Zoom/Focus gesynchroniseerd met Wii Classic Controller

mijn Lumix GH2 Micro Four Thirds camera schiet niet alleen fantastische high definition video's, maar met goedkope adapters kan ik gebruiken met oudere manuele lenzen die goedkoop en vaak erg hoge kwaliteit. Ik schiet veel prestaties video's voor mij
Arduino Rgb controller van Vb.net

Arduino Rgb controller van Vb.net

Hallo, dit is mijn eerste instractables, vandaag zal ik u tonen hoe maak je een rgb controller met een arduino UNO R3, bestuurd door een aanvraag ingediend in vb.netMet dit project kunt u gewoon uw led strip besturen en welke kleur u wilt aanbrengenE