Stap 8: Stap 8: Arduino Code uploaden
• upload Arduino programmaIk heb de code als een .zip-bestand bijgevoegd. Hier is de tekst:
/*
Vanaf 3:00 AM op 20 oktober 2012 is dit de meest werkversie met alles erin!
Deze versie kan worden geüpload naar 2 apparaten die zijn geconfigureerd met een draadloze ontvanger op pin 4
en een Analoger Funksender op pin 3 (en vanaf dit moment is momenteel op beide mijn test apparaten)
Bochten aan en uit een aangedreven lichtopbrengst systeem verbonden met digitale
pin 9 wanneer op pin 2 indrukken van een drukknop aangesloten.
Stuurt een RF signaal (een bericht van de letter "A" via VirtualWire) naar andere apparaten die met hetzelfde programma,
waardoor ze zich gedragen alsof hun drukknop werd ingedrukt.
Polls voor RF-berichten (met behulp van de VirtualWire-bibliotheek); ontvangst van een bericht op het kanaal zorgt ervoor dat eenheid
om zich te gedragen alsof drukknop werd ingedrukt.
TO: Poll voor een specifiek bericht
Het circuit:
* LED van pin 13 gekoppeld aan grond (voor foutopsporing)
* Externe licht circuit aangesloten op pin 9
* drukknop verbonden met pin 2 van + 5V
* De 10K weerstand zijn verbonden met pin 2 vanaf de grond
Zie JT de schetsmatige OmniGraffle diagram voor een mashup van de bovenstaande met de verlichting circuit (sans RF de apparaten)
http://bildr.org/2011/03/High-Power-Control-with-Arduino-and-tip120/
gemaakte 2005
door DojoDave < http://www.0j0.org>
gemodificeerde 30 Aug 2011
door Tom Igoe
gemodificeerde 20 okt 2012
door Jason Taylor
gemodificeerde 08 Nov 2012
door Thomas Deckert
Originele voorbeeldcode is in het publieke domein, inclusief knop voorbeeldcode uit
http://www.Arduino.CC/en/tutorial/button
en verzenden/ontvangen voorbeelden uit de projectsite VirtualWire
*/
#include < VirtualWire.h >
constanten niet gewijzigd. Ze gewend bent hier
pin-codes instellen
Const int buttonPin = 2; het nummer van de drukknop pin
Const int ledPin = 9; het nummer van de lichtopbrengst pin - Vergeet niet "ledPin" hier betekent "externe lights"
Const int RF_TX_PIN = 3; het nummer van de pin voor de zender
Const int RF_RX_PIN = 4; het nummer van de pin voor de ontvanger
Const int debugLED = 13; het nummer van de pin voor het debuggen van de (standaard) leidde op het schild
variabelen zal veranderen:
Boole buttonState = false; variabele voor het lezen van de drukknop status
Boole oldButtonState = buttonState;
Boole ledState = false;
Boolean begon = false; begint een reeks
lange waitUntil = 0;
lange startTime = 0;
lange flashStartTime = 0;
int holdTime = 12000; duur van hold sequentie
int flashTime = 15000; duur van de volledige flash reeks
int strobe = 500; duur van één flits
int runtime = 0;
VOID Setup {}
Serial.begin(9600);
Initialiseer de LED-pin als uitgang:
pinMode (ledPin, OUTPUT);
Initialiseer de drukknop pin als input:
pinMode (buttonPin, INPUT);
vw_setup(2000); Bits per seconde
vw_set_tx_pin(RF_TX_PIN); Setup pin verzenden
vw_set_rx_pin(RF_RX_PIN); Setup ontvangen pin.
vw_rx_start(); Start de werking van de PLL ontvanger
}
void loop {}
Telkens via loop, Pin 9 ingesteld op dezelfde waarde als de toestandsvariabele
digitalWrite (ledPin, ledState);
Lees de waarde van de knop aan begin van de lus, voordat u iets doet
buttonState = digitalRead(buttonPin);
Triggers meer licht tijd telkens knop is ingedrukt--toevoegen ontdendering als de tijd het toelaat
Als (buttonState! = oldButtonState) startSeq(); tijd knop staat wijzigingen die we tijd toevoegen aan de lichten op
spullen om ontvangst van bericht van een ander apparaat
recht nu uitbreidt ook tijd zelfs als knop werd ingedrukt lokaal en overkant tegelijkertijd!
uint8_t buf [VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;
Als (vw_get_message (buf, & buflen)) {/ / Non-blocking
int i;
Serial.Print ("kreeg:");
voor (ik = 0; ik < buflen; i ++) {}
digitalWrite (debugLED, hoog); test LED
Serial.println (buf [i], HEX);
}
digitalWrite (debugLED, laag);
startSeq(); Zodra we een bericht krijgen we tijd toevoegt aan lichten op
}
Als (gestart) {/ / de knop werd geduwd, dus
vorige werkende flasher code
Als (millis() > = (flashStartTime)) {/ / als LED al op meer dan de tijd van houden...
Als (millis() < = (flashStartTime + flashTime)) {/ / flash volgorde invoeren als het nog niet is ingevoerd
Als (((millis() - flashStartTime) % strobe) == 0) {/ / elke strobe duur in-/ uitschakelen. PROBLEEM DE LIJN! (zegt Jake)
ledState =! ledState;
Serial.println(Millis() - flashStartTime, DEC);
}
}
else {(ledState = false); gestarte = false;} / / uitzetten na flash reeks
}
}
Lees de waarde van de knop aan eind van de lus te zien als het gewijzigd
oldButtonState = buttonState;
}
VOID startSeq () {/ / dus momenteel als knopstatus wordt gewijzigd in beide richtingen krijgen we een ander seq start...?
code voor het verzenden van een bericht uit een ander licht kit
const char * msg = "A";
digitalWrite (debugLED, true); inschakelen van de opdracht debug LED
Serial.println("SS");
vw_send ((uint8_t *) msg, strlen(msg));
vw_wait_tx(); Wachten totdat het gehele bericht verdwenen is
Serial.println("ES");
digitalWrite (debugLED, false); uitschakelen van de debug LED
einde code voor signaal af aan een ander licht kit
nu laten we krijgen de lampjes op deze paal knipperen!
begon = true;
startTime=millis(); records wanneer in het programma de knop werd ingedrukt
flashStartTime = startTime + holdTime; het opvlammen van de reeks zal beginnen na bedrijf reeks
waitUntil = startMillis;
ledState = true; LED aanzet en start volgorde telkens knop is ingedrukt
}