Reverse Engineering = Uzzors2k = blåttBilen Android App. Amarino grejer också. (2 / 3 steg)
Steg 2: BluCar
Jag tyckte också att arduino som standard, med Serial.read() endast läsa ASCII-tecken. (Jag var fel naturligtvis)
Men det är därför Uzzor är cool: Amarino med en 3 karaktär matris för att skicka accelerometer data, som är 3 byte. De tre byte motsvarar bara en variabel. En byte för framåt, andra för styrning, tredje för vad du vill.
Uzzor skickar en byte, som innehåller alla instruktioner för framåt, bakåt, vänster, höger, strålkastare, blinkrar. ganska coolt.
Detta är de arrangemang som jag hittade:
| 7: strålkastare | 6: blinkrar | 5: omvänd | 4: fram | 3:Right | 2: vänster | 1: oanvända | 0: oanvända |
Du lagrar Serial.read() som en int och skapa bitmasker för att läsa de bitar som du behöver kontroll.
Här är ett exempel:
Jag får denna binärt tal från Serial.read()
10010100 / = 148
Strålkastarna är på, bilen går framåt och roterande kvar.
Om jag vill läsa status för framåt/bakåt:
skapa en bitmask: 00110000 & 10010100
vilket resulterar i 00010000
Och jag kan skriva kod för att förstå som nummer och utför en uppgift.
Jag kan göra en fel metod eller något, men det sätt jag gjorde det fungerade för mig, om du har några andra metoder, lägga upp dem!
==============================================================
Typ av off topic
men hur Uzzor använder hans seriella data är ganska fricken classy. Som när jag äntligen förstått vad som var på jag var som woah!, det är ganska smidigt!
Allt han gör är rakt upp skriva sin 8-bitars nummer till DDRB (ATTINY, som har 8 portar, så varje port motsvarar direkt till varje funktion, strålkastare LED är ansluten till sjunde (åttonde pin) mest betydande hamn). Så när han skriver en hög i bromsljus position, motsvarar det direkt till hamnen som ansluter till den bromsljus led.
8 bit serienummer -> DDRB -> maskinvara
Han skapar också en bitmask för att ignorera de sista fyra bitarna (0 och 1 är oanvända 2 och 3 styrning) och han gör detta eftersom styrningen är kontrolleras av ett servo och gjorde en annan funktion för att konvertera data till en servo PPM signal.
Cool va? Jag tänker så.
--------------------------------------------------------------------------------------------------------------------------------
När jag först började försöka test/läsa datan från Uzzor's android app, var jag med eget kapital operatören, vilket inte fungerade. Men jag antar att det är dålig planering... Jag har inte raffinerade min kod, men vad jag gör söker ball park spänner. Jag rensa bitarna runt de data jag vill läsa. Om jag ville läsa motor staten, läste jag påstår framåt och bakåt
0001 0000 //serial verkliga tidsdata
0011 0000 & //mask så att jag bara läst data som framåt/bakåt
--------------------
0001 0000 //forward
0010 0000 //same men för omvänd
0011 0000 &
-------------------
0010 0000
Så jag kan få antingen värden 32 eller 16. (0010 0000 eller 0001 0000)
och jag & med nummer 48 eftersom 48 i binär är 0011 0000.
Så hur jag skrev min kod var
int x;
x = Serial.read(); Att vara säker kan prova int x = Serial.read();
omvänd:
x & = 48. x = följetong & 0011 0000
om (x > 24) servo.write(30); Ball park rad mål omvänd kommandot som ska vara 32
annars om (x < 24 & & x > 15) servo.write(180); Ball park rad mål framåt kommandot som bör vara 16
annat servo.write(90);
--------------------------------------------------------------------------------------------------------------
Så det är det, är här några kod att använda Uzzor's app med arduino:
#include < Servo.h >
Servo servo;
Servomotor;
void setup()
{
servo.attach(9);
motor.attach(8);
Serial.BEGIN(9600);
pinMode (13, OUTPUT); Detta är min "strålkastare"
}
void loop()
{//start viktigaste
int x;
int y;
int z;
om (Serial.available() > 0)
{//start om 1
x = Serial.read(); x har deklarerade en Serial.read() här av någon anledning
y = x;
z = x;
y & = 48. bitars masker y söker framåt/revers
x & = 12. ser för vänster/höger
z & = 128; ser för strålkastare inget bromsljus ännu
om (x < 6 & & x > 3)
{
servo.write(80); vänster unika till mitt projekt
}
annars om (x > 6)
{
servo.write(120); rätt unik för mitt projekt
}
annat servo.write(105); Center unikt för mitt projekt
om (y > 24)
{
motor.write(30); omvänd
}
annars om (y < 24 & & y > 15)
{
motor.write(150); framåt
}
annat motor.write(90); Flytta inte
om (z > 0) digitalWrite (13, hög). strålkastare
annat digitalWrite (13, låg).
} //end om 1
} //end viktigaste
------------------------------------------------------------------------------------------------------
Låt mig veta om du har några råd eller förbättringar.