Halloween pumpa betala - NFC aktiverat pumpor (2 / 3 steg)
Steg 2: Koden
Denna gång använde jag Java. Jag har plats hela NetBeans projektet här https://github.com/noelportugal/NFCHalloween
Här är klassen Main:
paketet com.noelportugal.halloween.nfc;
import com.noelportugal.halloween.hue.HueBridgeLink;
import com.noelportugal.halloween.hue.HueBridgeLinkCallback;
import com.philips.lighting.hue.sdk.PHHueSDK;
import com.philips.lighting.hue.sdk.utilities.PHUtilities;
import com.philips.lighting.model.PHBridge;
import com.philips.lighting.model.PHLight;
import com.philips.lighting.model.PHLightState;
import java.util.List;
import java.util.Random;
allmän klass Main implementerar HueBridgeLinkCallback {
statiska sista byte PN532_MIFARE_ISO14443A = 0x00;
statiska sista sträng defaultColor = "0 0 0";
Private Random rand = nya Random();
privata statisk PHHueSDK phHueSDK;
privata statisk PHBridge bron;
privata statisk PHLightState lightState;
privata statisk sista int maxBrightness = 254;
privata statisk sista int minBrightness = 15.
Förändras för att matcha din NFC-Taggar
privata statisk slutlig String [] UID: er = {
"36076607291754756",
"36358082404879876",
"36358082404944388"
};
privata statisk slutlig String [] grupper = {
"AL", / / 1
"BM", / / 2
"CD", / / 3
"E", / / 4
"FGHIJK", / / 5
};
privata statisk sista int [] [] GROUP_COLORS = {
{0,255,0}, / / 1 grön
{255,0,0}, / / 2 röd
{50,0,255}, / / 3 blå
{200,255,0}, / / 4 gul
{255,0,255}, / / 5 Purlple
};
privata statisk sista int MAX_HUE = 65535;
privata int randomColor;
offentliga main () {
Förbereda länken nyans Bridge
HueBridgeLink bridgeLink = ny HueBridgeLink();
bridgeLink.connect(this);
phHueSDK = PHHueSDK.getInstance();
}
public void onBridgeReady() {
bro = phHueSDK.getSelectedBridge();
allOff();
}
privata statisk float [] rgbGroupColor (int [] groupColors, PHLight ljus) {
återgå PHUtilities.calculateXYFromRGB (groupColors [0], groupColors [1], groupColors [2], light.getModelNumber());
}
privata statisk lång getDec (byte [] byte) {
långa leda = 0;
långa faktor = 1;
för (int jag = 0; jag < bytes.length; ++ jag) {
långa värde = byte [i] & 0xffl;
resultera += värde * faktor;
faktorn * = 256l;
}
returnera resultat;
}
privata void start() kastar InterruptedException {
IPN532Interface pn532Interface = ny PN532Spi();
PN532 nfc = nya PN532(pn532Interface);
System.out.println ("startar...");
NFC.BEGIN();
Thread.Sleep(1000);
lång versiondata = nfc.getFirmwareVersion();
om (versiondata == 0) {
System.out.println hitta ("inte PN53x board");
hemkomst.
}
System.out.Print ("Funna chip PN5:");
System.out.println (Long.toHexString ((versiondata >> 24) & 0xFF));
System.out.Print ("Firmware versioin:");
System.out.Print (Long.toHexString ((versiondata >> 16) & 0xFF));
System.out.Print('.');
System.out.println (Long.toHexString ((versiondata >> 8) & 0xFF));
Konfigurera styrelsen för att läsa RFID-taggar
NFC. SAMConfig();
System.out.println ("Station redo att Scan");
byte [] buffert = nya byte [8].
Sträng vinnare = UIDS[rand.nextInt(2)];
medan (sant) {
int readLength = nfc.readPassiveTargetID (PN532_MIFARE_ISO14443A, buffert);
om (readLength > 0) {
Sträng uid = "";
System.out.Print ("UID:");
UID = String.valueOf(getDec(buffer));
System.out.println(UID);
försök {
om (uid.equals(winner)) {
Runtime.getRuntime () .exec (nya String [] {"/ usr/bin/mpg321", "-q","/home/pi/Sounds/win1.mp3"});
Win();
vinnare = UIDS[rand.nextInt(2)];
} annat {
Runtime.getRuntime () .exec (nya String [] {"/ usr/bin/mpg321", "-q","/home/pi/Sounds/fail.mp3"});
Fail();
}
vänta 1 sekunder innan nästa scan
Thread.Sleep(1000);
System.out.println ("Station redo att Scan");
}
fånga (undantaget ex) {
System.ERR.println(ex.GetMessage());
}
}
sova för 200 ms innan vi går tillbaka till avsöka för NFC tag
Thread.Sleep(200);
}
}
privata void allOff() {
lightState = ny PHLightState();
lightState.setOn(false);
bridge.setLightStateForDefaultGroup(lightState);
}
privata void fail() kastar InterruptedException {
lightState = ny PHLightState();
lightState.setOn(true);
lightState.setHue(65280);
bridge.setLightStateForDefaultGroup(lightState);
Thread.Sleep(2000);
allOff();
}
privata void win() {
System.out.println ("Start Random Light tråden");
PHBridge bron = phHueSDK.getSelectedBridge();
Lista < PHLight > allLights = bridge.getResourceCache().getAllLights();
Random rand = nya Random();
int jag = 0;
samtidigt (i ++ < 6) {
System.out.println ("medan loop:" + i);
försök {
PHLightState lightState = ny PHLightState();
lightState.setOn(true);
randomColor = rand.nextInt(MAX_HUE);
lightState.setBrightness(maxBrightness);
lightState.setHue(randomColor);
bridge.setLightStateForDefaultGroup(lightState);
Thread.Sleep(1000);
} fånga (undantaget ex) {
System.ERR.println ("fel:" + ex.getMessage());
}
}
allOff();
}
offentliga statisk void main (String [] args) kastar InterruptedException {
System.out.println ("Start Exchange nyans lampor Server");
Huvudsakliga halloween = nya main ();
Halloween.start();
}
}