Hey landgenoten en of course België!
Ik heb deze vraag ook op het engelse gedeelte gepost maar post hem ook even hier zodat ik sneller antwoord heb
.
Laat me eerst uitleggen wat ik heb gemaakt.
Ik moest ervoor zorgen dat we de BlackMagic camera konden bedienen met een command op een Arduino Uno en een BlackMagic shield. Je kunt nu inzoomen door een z in te voeren met daarnaast een cijfer en je kunt de focus regelen door f en dan een cijfer.
Dus nu als ik z1 invoer in de Serial Monitor, werkt het perfect. Nu is mijn probleem wanneer ik in Python de code schrijf
"adruino.write (bytes (b" z1 "))" dat hij dan de zoom niet meer regelt.
Hoe los ik dit op?
Arduino code:
#include <BMDSDIControl.h>
#include <stdlib.h>
const int shieldAddress = 0x6E;
BMD_SDICameraControl_I2C sdiCameraControl(shieldAddress);
String inString = "";
boolean error = false;
void setup() {
sdiCameraControl.begin();
sdiCameraControl.setOverride(true);
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) { // is a character available?
int inChar = Serial.read();
error = false;
//loop();
if (inChar != '\n') {
// As long as the incoming byte
// is not a newline,
// convert the incoming byte to a char
// and add it to the string
inString += (char)inChar;
}
else {
if(inString.substring(0,1) != "f" && inString.substring(0,1) != "z" || inString.substring(0) == "f" || inString.substring(0) == "z") {
Serial.println("Fout! Gebruik 'f<getal>' voor focus en 'z<getal>' voor zoom");
error = true;
//return 0;
}
if (inString.substring(1) > "1"){
Serial.println("Fout! Focus en zoom kunnen niet hoger dan '1'.");
error = true;
}
if (inString.substring(1) < "0"){
Serial.println("Fout! Focus en zoom kunnen niet lager dan '0'.");
error = true;
}
if(inString.substring(0,1) == "f" && error == false){
Serial.print("Input string: ");
Serial.print(inString + ".");
Serial.print("\t Focus is nu: ");
inString.remove(0,1);
Serial.println(inString);
sdiCameraControl.writeCommandFixed16(
1, // Destination: Camera 1
0, // Category: Lens
0, // Param: Instantaneous Autofocus;
0,
inString.toFloat()
);
inString = "";
}
if(inString.substring(0,1) == "z" && error == false){
Serial.print("Input string: ");
Serial.print(inString + ".");
Serial.print("\t Zoom is nu: ");
inString.remove(0,1);
Serial.println(inString);
sdiCameraControl.writeCommandFixed16(
1, // Destination: Camera 1
0, // Category: Lens
8, // Param: Instantaneous Autofocus;
0,
inString.toFloat()
);
inString = "";
}
// clear the string for new input:
inString = "";
}
}
}
Python code:
import serial
import time
adruino = serial.Serial("COM8",9600)
#adruino.open()
print(adruino.is_open)
time.sleep(2)
def sendCommand():
adruino.write(bytes(b"z1"))
adruino.flush()
print("writen")
pass
sendCommand()
EDIT:
Na wat rondkijken op forums ben ik erachter gekomen dat \n de oplossing was. Dus hierbij de juiste code:
import serial
import time
adruino = serial.Serial("COM8",9600)
#adruino.open()
print(adruino.is_open)
time.sleep(2)
def sendCommand():
adruino.write(bytes(b"z1\n"))
adruino.flush()
print("writen")
pass
sendCommand()