Hack-A-lampan eller hur man kontrollerar Arduino med din smartphone (4 / 5 steg)
Steg 4: Protocoder kod
Låt oss digg i Protocoder kod.
Detta kommer att hantera användargränssnitt, bluetooth-kommunikation, tolka färgdata från reglagen till heltal och visar färg innan det skickas till Arduino.
Först ändra vi inställningar för verktygsfält och skärm med:
UI.Toolbar.title ("Hack-A-lampa");
ui.toolbar.bgColor (55, 155, 155, 255);
UI.Toolbar.show(true);
ui.screenMode("fullscreen");
ui.screenOrientation("portrait"); < /p >< p > var hastighet = 25;
var btClient;
var sendString = "10,0,0,0", string = "0,0,0", hexString = "000";
var btStatus = false;
var marginal = 10;
var w = ui.screenWidth - 2 * marginal;
var h = 150;
h ska användas som höjd för knappar. Om du inte ser texten inuti knappar, försöka fixa det ändra detta värde.
Sedan sköter vi hur du ansluter och kopplar från en bluetooth-enhet. Observera att alla bluetooth-modul måste kopplas med Android bluetooth-menyn innan du försöker ansluta här, annars du kommer inte att se den i denna app.
var btnConnect = ui.addButton ("Anslut till bluetooth", marginal, 0, w, h).onClick(function() {
Om du vill använda Bluetooth-adress, använda:
network.bluetooth.connectSerial (macAddess, function(status) {});
btClient = network.bluetooth.connectSerial(function(status) {
Console.log ("connected" + status);
om (status === sant) {
btStatus = sant;
UI.toast("Connected!");
btnConnect.setAlpha(0);
btnDisconnect.setAlpha(255);
}
});
});
var btnDisconnect = ui.addButton ("Koppla" marginal, h, w, h).onClick(function() {
om (btStatus === sant) {
btClient.disconnect();
btStatus = false;
UI.toast("Disconnected!");
btnConnect.setAlpha(255);
btnDisconnect.setAlpha(0);
} annat {
UI.toast ("inte ansluten");
}
});
Som ni kan se här, har vi skapat knappar och inne i det vi hanterar all kommunikation.
De parametrar som vi behöver för att skapa en knapp är, från vänster till höger i funktion: Text som visas, x position, y-position, bredd och höjd.
Med btnConnect vi ansluta till bluetooth och bara med den här funktionen visar vi en listvy som visar alla tidigare ihopparade enheter. Då vi skriver ut bluetooth-status på protocoder web ide och, om status är lika med sant (är ansluten) ange btStatus, som vi använder som en flagga, true, då vi visar ett Android Toast säger den är ansluten och ändra alfa öppenhet för båda knapparna, roterande anslutningsknappen full insyn, och koppla ned till full ogenomskinlig.
Sedan med btnDisconnect vi bringa ur fattningen till bluetooth, en även vi återföra alla förändringar som vi har gjort efter Klicka på btnConnect.
Efter det ska vi skapa kort och skjutreglaget för varje färg (RGB). Varje kod är mestadels identiska, så jag ska förklara det för bara en av dem.
Först skapar vi en variabel med namnet på den färg, som det kommer att lagra värdet readed från slider med:
var röda = 0;
Efter det, vi skapar kortet att, i detta fall, det är som en liten markering som visar namnet på färgen. Skapa dem vi använder:
var cardRed = ui.addCard ("Röd", marginal, 2 * h, ui.screenWidth - marginalen, 100);
Vi kommer att skapa reglaget:
var sliderRed = ui.addSlider (marginal, 3 * h, w, 20, 0, 255).onChange(function(val) {
röd = Math.floor(val); < /p >< p > sträng = röd + "," + grön + "," + blå;
colourDec.setText(string);
hexString = red.toString(16) + green.toString(16) + blue.toString(16);
hexString = hexString.toUpperCase();
colourHex.setText(hexString);
Console.log(string);
});
De parametrar som vi behöver skapa ett reglage är, från vänster till höger i funktion: x-position, y-position, bredd, höjd, start av reglaget och slutliga värdet av reglaget.
När skapat dem, vi hanterar alla behövs för att göra vårt projekt arbeta:
Först vill vi bara använda heltal, så vi tolka värdet readed från reglaget från float att int.
Efter det, vi sammanfoga alla färger för att passa det format som Arduino räknar med att ta emot, lagra alla värden readed från färger till en sträng på sätt: röd, grön, blå
Efter att sätta vi värdet på colourDec, en variabel som visar den färg som vi ska skicka i en decimal "sätt".
Sedan vi göra samma sak för hexString, en variabel som visar den färg som vi kommer att skicka ett hexadecimalt "långt", och lägga den i versaler, ett vanligt sätt att Visa hexadecimala tal.
Då vi bara skriva ut strängen, som är den variabel som vi ska skicka till Arduino.
För att göra programmet Visa info om vilken färg vi ska skicka, vi drar en duk och vi visar den färg som vi ska skicka. Att åstadkomma att vi använda denna kod:
var duk = ui.addCanvas (marginal, 8 * h, w, h);
canvas.loopDraw (35, function() {
canvas.Fill(Red,Green,Blue,10);
canvas.rect (0, 0, ui.screenWidth, 500);
});
Efter det trycker vi decimal och hexadecimal värden av färg med:
var colourDecLabel = ui.addText ("Dec =", marginal, 9 * h, 2 * w, h);
var colourDec = ui.addText (h, 9 * h, 2 * w, h);
var colorHexLabel = ui.addText ("Hex =", marginal, 9,5 * h, 2 * w, h);
var colourHex = ui.addText (h, 9,5 * h, 2 * w, h);
Denna kod är ganska självförklarande, så jag går igenom.
Åtminstone nå vi till funktionen Skicka, som hanterar kommunikation med Arduino. Här är där vi överföra data till Arduino via bluetooth.
var btnSend = ui.addButton ("Skicka", marginal, 10 * h, w, h).onClick(function() {
om (btStatus === sant) {
UI.Jump(btnSend);
Console.log ("String =" + sträng);
btClient.send (string + \n");
UI.toast("sended!");
} annat {
UI.toast ("¡Not ansluten!");
}
});
I den här koden skapar vi en knapp, precis som vi gjorde innan, och kontrollera vilket värde har lagrats btStatus (bara för att komma ihåg, om den är ansluten kommer att vara sant, annars kommer att vara falskt). Om att btStatus är lika med sant, utför vi ett litet trick för att göra knappen att vara animerade med ui.jump(); funktion.
Då visar vi sträng data i konsolen, bara för felsökning förslag, skicka strängen och en linje hoppa (\n) genom bluetooth, så sänder vi: röd, grön, blue\n som är vad Arduino förväntar sig att få.
Då visar vi en Android toast säger data är avsändare.
I de fall btStatus flagga variabel är lika med falskt (inte ansluten) vi kommer att skicka en toast varning om detta.
Det är på Protocoder sida!