IoT rörelse kontrollerad servon (4 / 10 steg)
Steg 4: Java Källkod
Om du inte är intresserad av java-kod, kan du hoppa över detta steg; dock måste minst du sätta din personliga PubNub nycklar i koden att fungera! Källkoden kan vara tittade på GitHub.
Import av följande produkter krävs. Om dessa leda till eventuella fel, har du förmodligen inte SDK biblioteken installerats korrekt.
import java.io.IOException;
import java.lang.Math;
import com.leapmotion.leap.*;
import com.pubnub.api.*;
import org.json.*;
Det är viktigt att du gör projektet genomföra Runnable så att vi kan ha alla språng verksamhet verka i sin egen tråd. Vi börjar med inställning av projektets huvudsakliga, en implementering av gränssnittet Runnable och initieringen av globala variabler som vi kommer att använda senare. De viktigaste sakerna att ta märka av den globala variabeln "kanalen" samt ett par nycklar deklareras i main.
allmän klass LeapToServo implementerar Runnable {
offentliga statisk sista sträng kanal = "leap2pi";
// ... Ett gäng av koden.. .public statisk void main (String [] args) {
Sträng pubKey = "Your_Publish_Key";
Sträng undernyckel = "Your_Subscribe_Key";
// ... Lite mer kod...
}
}
Dessa strängar är de enda värden som du kommer att behöva ändra. Kanalnamn kan förbli standard "leap2pi" eller kan vara något annat alfa-numeriska värde. Allt med PubNub för meddelande samtal via en kanal, så du vill använda ett unikt namn för att förhindra replikväxlning mellan olika projekt! Publicera och prenumerera på nycklar är unika personliga identifierare ges till dig av PubNub när du registrerar ett konto. Hålla dem säkra. Hålla dem privat. Dessa nycklar förhindra att andra personer talar på din kanal. Notera, det kan finnas några ställen i koden som uttryckligen använder strängen "leap2pi" i stället för konstanten "Kanal" och för dessa instanser bör ändras.
Hoppa rörelse fångar omkring 300 bildrutor per sekund. Inom varje bildruta har vi tillgång till massor av information om våra händer, som antalet fingrar utsträckt, pitch, yaw och hand gester. Värdena som returneras av språnget för pitch och yaw (handled pan och tilt) är i radianer, vilket inte hjälper oss för mycket. Vi vill att konvertera dessa värden till ett format som accepteras av PWM föraren i rutan. Vi först konverterar radianer till grader och sedan grader för ett acceptabelt servo PWM-värde mellan 150 och 600. Detta intervall motsvarar det typiska arbetsområdet för en servo (500-2000 US) som representeras av 12 bitar servo föraren.
Den grundläggande ekvationen är 2500us / (2 ^ 13 -1) * (Servo Min/Max puls bredd), så [500, 2000] oss kartor till [150, 600]... ungefär... I koden hanteras dessa omvandlingar av följande metoder.
public static int radiansToAdjustedDegrees (int radianer) {}
offentliga statisk dubbel pitchDegreeToPWM (dubbel examen) {}
offentliga statisk dubbel yawDegreeToPWM (dubbel examen) {}
public static int normalizeDegree (int value) {}
Också, ni får ursäkta den felaktiga servo och PWM terminologi i koden... inte alla som arbetat med detta projekt var en expert i dessa ämnen!
Det bästa sättet att säkerställa din kod fungerar är att läsa in PubNub Felsökningskonsolen. Härifrån kan du ange namnet på din kanal samt din publicera och prenumerera på nycklar. Hit "Prenumerera" och publicerade data ska visas i rutan meddelanden när du flyttar händerna över den språng rörelsekänsliga handkontrollen med Javakod körs.