J'essaye d'envoyer des images via deux ports à savoir COM5 et COM7. Le code suivant en fait le plus. La partie la plus significative du code est la méthode captureAndsaveImage
.Utilisation de plusieurs ports pour envoyer des images via deux paires distinctes d'Arducam et arduino Uno
Le problème est lorsque j'utilise les deux ports série; les images sont déformées, elles ont l'impression d'être mélangées.
Ma question: est-il possible d'utiliser simultanément les deux ports? Que dois-je faire de telle sorte qu'il n'y a pas de mélange?
Ne pas l'esprit deuxième cercle noir de l'image, il aurait pu se produire en raison de certaines pertes de signal dans la deuxième caméra.
public class ReadPort {
private static final char[]COMMAND = {'*', 'R', 'D', 'Y', '*'};
private static final int WIDTH = 320; //640;
private static final int HEIGHT = 240; //480;
SerialPort serialPort,serialPort2;
public int[][] rgb2 = new int[WIDTH][HEIGHT];
public static void main(String[] args) {
ReadPort reader= new ReadPort();
}
public ReadPort() {
int[][]rgb = new int[HEIGHT][WIDTH];
try {
serialPort = SerialPort.getCommPort("COM7");
serialPort.openPort();
inputStream = serialPort.getInputStream();
serialPort.setComPortParameters(1000000,
8,
SerialPort.ONE_STOP_BIT,
SerialPort.NO_PARITY);
if(serialPort.isOpen()){
System.out.println("COM5 opened");
}
serialPort2 = SerialPort.getCommPort("COM5");
serialPort2.openPort();
inputStream2 = serialPort2.getInputStream();
serialPort2.setComPortParameters(1000000,
8,
SerialPort.ONE_STOP_BIT,
SerialPort.NO_PARITY);
if(serialPort2.isOpen()){
System.out.println("COM7 opened");
}
int counter = 0;
while(true) {
captureAndsaveImage(inputStream2,counter, rgb, "COM5");
captureAndsaveImage(inputStream, counter, rgb, "COM7");
counter++;
}
} catch (Exception e) {
e.printStackTrace();
}
}
public static void captureAndsaveImage(InputStream inputStream, int counter,int[][] rgb,String name) throws IOException{
while(!isImageStart(inputStream, 0)){};
System.out.print("Found image: " + counter);
for (int y = 0; y < HEIGHT; y++) {
for (int x = 0; x < WIDTH; x++) {
int temp =read(inputStream);
rgb[y][x] = ((temp&0xFF) << 16) | ((temp&0xFF) << 8) | (temp&0xFF);
}
}
BMP bmp = new BMP();
bmp.saveBMP("c:/out/" +name+"images/"+ counter + ".bmp", rgb);
System.out.println(", Saved image:"+name+"images/"+counter+".bmp");
}
private static int read(InputStream inputStream) throws IOException {
int temp = (char) inputStream.read();
//System.out.print(temp);
if (temp == -1) {
throw new IllegalStateException("Exit");
}
return temp;
}
private static boolean isImageStart(InputStream inputStream, int index) throws IOException {
if (index < COMMAND.length) {
if (COMMAND[index] == read(inputStream)) {
return isImageStart(inputStream, ++index);
} else {
return false;
}
}
return true;
}
}
Modifier: J'utilisé une instruction de débogage comme
if(inputStream.available()>0){
System.out.println(inputStream.toString());}
dans la méthode captureAndsaveImage
et je me suis sortie comme
COM5 opened
COM7 opened
Found image:
[email protected]45a
, Saved image:COM5images/0.bmp
Found image:
[email protected]e28
, Saved image:COM7images/0.bmp
Found image:
[email protected]45a
, Saved image:COM5images/1.bmp
Found image:
[email protected]e28
, Saved image:COM7images/1.bmp
Found image: 2, Saved image:COM5images/2.bmp
Found image:
[email protected]e28
, Saved image:COM7images/2.bmp
Found image:
[email protected]45a
, Saved image:COM5images/3.bmp
Found image:
[email protected]e28
, Saved image:COM7images/3.bmp
Found image: 4, Saved image:COM5images/4.bmp
Found image:
[email protected]e28
, Saved image:COM7images/4.bmp
Found image:
[email protected]45a
, Saved image:COM5images/5.bmp
Found image:
[email protected]e28
, Saved image:COM7images/5.bmp
Found image: 6, Saved image:COM5images/6.bmp
Found image: 6, Saved image:COM7images/6.bmp
Found image:
[email protected]45a
, Saved image:COM5images/7.bmp
Found image:
[email protected]e28
, Saved image:COM7images/7.bmp
Found image: 8, Saved image:COM5images/8.bmp
Found image:
[email protected]e28
, Saved image:COM7images/8.bmp
Found image:
[email protected]45a
, Saved image:COM5images/9.bmp
Ce que je constate, c'est que certaines lignes sont comme
Found image: 6, Saved image:COM5images/6.bmp
et la plupart d'entre eux sont
Found image:
5com.fazecast.jSerialComm.SerialPort$SerialPortInpu[email protected]
, Saved image:COM7images/5.bmp
Quelle est la raison? Pour autant que je sache [email protected]28
c'est supposé être l'adresse de l'inputStream. Mais pourquoi cela ne se passe-t-il pas dans certains cas? (Je suis débutant en communication série.)
merci @Michael –