Styra en kamera med en Arduino och RS232 sköld (5 / 6 steg)
Steg 5: programmering
Många kameror som drivs av RS232 signalering användning hexadecimala kommandon. Dessa kommandon skickas till kameran som en serie av hex byten. En ögonblicksbild av den handbok som listar några av kommandona som visas ovan.
En hex bytematris skapas för varje kommando som du vill använda. När kommandot är det viktigt att matcha baudhastighet för enheten och skicka varje byte i matrisen sekventiellt. Från manuellt ses det att överföringshastigheten är 9600 bps så det är vad var anges i koden. Det är också viktigt att specificera vilka portar du vill använda för TX och RX. Detta görs när du ställer in en SoftwareSerial.
Detta exempelkod nedan har kameran växlar mellan 2 fördefinierade positioner var femte sekund.
Seriell kommunikation
Den 29 oktober, 2015
Syfte: Styra kameraposition med RS232 kommunikation genom en DB9-kontakten
med en bifogad RS232 sköld.
Status: arbetar
#include < SoftwareSerial.h >
Använd inte 0 och 1 om du vill kunna ladda upp koden medan sköld är kopplad till Arduino
SoftwareSerial mySerial (2, 3); 2 är TX, 3 är RX
Kamera-kommandon
Standardmeddelandet 8 x 01 04 3F 02 0p FF där x är kamera nummer och p är förinställda numret
byte preset1 [7] = {0x81, 0x01, 0x04, 0x3F, 0x02, 0x01, 0xFF}; Förval i kameran 1
byte preset2 [7] = {0x81, 0x01, 0x04, 0x3F, 0x02, 0x02, 0xFF}; Förval i kameran 2
byte address_command [4] = {0x88, 0x30, 0x01, 0xFF}; Ställer in kameran adress (behövs för kedjekoppling)
byte if_clear [5] = {0x88, 0x01, 0x00, 0x01, 0xFF}; Kontrollerar om kommunikationslinje är klar
int fördröjningstid = 500. Tiden mellan kommandon
void setup()
{
Serial.BEGIN(9600); Seriell kommunikation med dator för felsökning
mySerial.begin(9600); Seriell kommunikation med kameran
Skicka adressen kommando
för (int jag = 0; jag < 4; i ++)
{
mySerial.write(address_command[i]);
Serial.println ("adress Byte skickas");
}
Delay(delayTime); dröjsmål att ge kameran tid för nästa kommando
Skicka IF_clear kommando
för (int jag = 0; jag < 5; i ++)
{
mySerial.write(if_clear[i]);
Serial.println ("om tydliga Byte skickats");
}
}
void loop()
{
för (int jag = 0; jag < (sizeof(preset1)); i ++) / / sizeof returnerar antalet byte, inte tal om int, float eller långa
{
mySerial.write(preset1[i]); sänder varje byte sekventiellt
Serial.println ("kameran placerar 1 Byte skickas");
}
Delay(5000); Väntar på 5 sekunder
för (int jag = 0; jag < (sizeof(preset2)); i ++) / / sizeof returnerar antalet byte, inte tal om int, float eller långa
{
mySerial.write(preset2[i]); sänder varje byte sekventiellt
Serial.println ("Set kameran placerar 2 Byte skickas");
}
Delay(5000);
}
Andra exempelkoden kan du styra riktningen där kameran panorerar genom att skicka kommandon via terminal-fönstret på din dator.
Seriell kommunikation
30 oktober 2015
Syfte: Styra kameraposition med hjälp av tangentbordet ingångar
Status: arbetar
#include < SoftwareSerial.h >
Använd inte 0 och 1 om du vill kunna ladda upp koden medan sköld är kopplad till Arduino
SoftwareSerial mySerial (2, 3); 2 är TX, 3 är RX
Kamera-kommandon
Standardmeddelandet 8 x 01 04 3F 02 0p FF där x är kamera nummer och p är förinställda numret
byte preset1 [7] = {0x81, 0x01, 0x04, 0x3F, 0x02, 0x01, 0xFF}; Förval i kameran 1
byte preset2 [7] = {0x81, 0x01, 0x04, 0x3F, 0x02, 0x02, 0xFF}; Förval i kameran 2
Kamerakontroller
byte panLeft [9] = {0x81, 0x01, 0x06, 0x01, 0x09, 0x09, 0x01, 0x03, 0xFF}; Panorera kameran kvar
byte panRight [9] = {0x81, 0x01, 0x06, 0x01, 0x09, 0x09, 0x02, 0x03, 0xFF}; Panorera kameran rätt
byte panUp [9] = {0x81, 0x01, 0x06, 0x01, 0x09, 0x09, 0x03, 0x01, 0xFF}; Panorera kameran upp
byte panDown [9] = {0x81, 0x01, 0x06, 0x01, 0x09, 0x09, 0x03, 0x02, 0xFF}; Kamera Pan ner
byte panStop [9] = {0x81, 0x01, 0x06, 0x01, 0x09, 0x09, 0x03, 0x03, 0xFF}; Kamera Pan ner
byte address_command [4] = {0x88, 0x30, 0x01, 0xFF}; Ställer in kameran adress (behövs för kedjekoppling)
byte if_clear [5] = {0x88, 0x01, 0x00, 0x01, 0xFF}; Kontrollerar om kommunikationslinje är klar
int fördröjningstid = 500. Tiden mellan kommandon
void setup()
{
Serial.BEGIN(9600); Seriell kommunikation med dator för felsökning
mySerial.begin(9600); Seriell kommunikation med kameran
Skicka adressen kommando
för (int jag = 0; jag < 4; i ++)
{
mySerial.write(address_command[i]);
}
Delay(delayTime); dröjsmål att ge kameran tid för nästa kommando
Skicka IF_clear kommando
för (int jag = 0; jag < 5; i ++)
{
mySerial.write(if_clear[i]);
}
Serial.Print in ("Skriv kommandon");
}
void loop()
{
Kontroller för seriell in från terminal
om (Serial.available() > 0)
{
char inChar = Serial.read(); Läs inkommande seriella data:
om (inChar == '1') / / kamera Preset 1
{
för (int jag = 0; jag < (sizeof(preset1)); i ++)
{
mySerial.write(preset1[i]); sänder varje byte sekventiellt
}
}
annars om (inChar == "2") / / kamera Preset 1
{
för (int jag = 0; jag < (sizeof(preset2)); i ++)
{
mySerial.write(preset2[i]);
}
}
annars om (inChar == "w") / / panorera kameran upp
{
för (int jag = 0; jag < (sizeof(panUp)); i ++)
{
mySerial.write(panUp[i]);
}
}
annars om (inChar == "a") / / Pan kamera vänster
{
för (int jag = 0; jag < (sizeof(panLeft)); i ++)
{
mySerial.write(panLeft[i]);
}
}
annars om (inChar == 's ") / / panorera kameran ner
{
för (int jag = 0; jag < (sizeof(panDown)); i ++)
{
mySerial.write(panDown[i]);
}
}
annars om (inChar == hade ") / / panorera kameran rätt
{
för (int jag = 0; jag < (sizeof(panRight)); i ++)
{
mySerial.write(panRight[i]);
}
}
annars om (inChar == "q") / / stoppa kameran Pan
{
för (int jag = 0; jag < (sizeof(panStop)); i ++)
{
mySerial.write(panStop[i]);
}
}
}
}