Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    11

    utilizzare gli input letti da usb

    Salve,sono un tesista disperato alla ricerca di una soluzione al mio problema. Premetto che non sono un esperto java ma ho solo affrontato un corso base per programmatori java. il problema è il seguente: dovrei utilizzare gli input letti da java. in pratica ho trovato una parte di codice che mi stampa in console gli input provenienti da usb (fotoresistenze arduino pr la precisione). Il problema è che dovrei utilizzare questi dati stampati in console ed utilizzarli per fare altro utilizzando sempre java. Come faccio?help me!!!

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linowp Visualizza il messaggio
    in pratica ho trovato una parte di codice che mi stampa in console gli input provenienti da usb (fotoresistenze arduino pr la precisione). Il problema è che dovrei utilizzare questi dati stampati in console ed utilizzarli per fare altro utilizzando sempre java.
    Troppe poche informazioni.
    1) Se hai "trovato" del codice, a) mostralo/linkalo o b) al limite spiega quale API per le porte USB utilizza (serve una API apposita! Java e il framework standard non hanno nulla "di serie" per le porte di comunicazione seriali, USB, ecc...). Potrebbe anche essere un dispositivo che "vedi" nel sistema come porta seriale attraverso un apposito driver, in tal caso la API Java è per le porte seriali, non direttamente per USB.
    2) I dati arriveranno secondo un certo formato testuale o binario, non lo so. Se hai le specifiche del formato, descrivile o linkale (se sono reperibili online).
    3) Mostra un esempio di dati che arrivano (perlomeno che stampi).
    4) Spiega cosa vuoi farci con questi dati. A seconda di quanti/cosa sono quei dati, potrebbe essere utile definire delle classi che "modellano" quei dati.
    Ultima modifica di andbin; 17-08-2016 a 16:02
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    11
    certo, chiedo scusa. Allora il codice trovato è il seguente:

    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStream;


    import java.util.Enumeration;
    import java.util.Scanner;


    import gnu.io.*;


    public class Prova implements SerialPortEventListener {
    SerialPort serialPort;
    /** The port we're normally going to use. */
    private static final String PORT_NAMES[] = {
    // "/dev/tty.usbserial-A9007UX1", // Mac OS X
    // "/dev/ttyUSB0", // Linux
    "COM3", // Windows
    };
    private BufferedReader input;
    private OutputStream output;
    private static final int TIME_OUT = 2000;
    private static final int DATA_RATE = 9600;


    public void initialize() {
    CommPortIdentifier portId = null;
    Enumeration portEnum = CommPortIdentifier.getPortIdentifiers();


    // First, Find an instance of serial port as set in PORT_NAMES.
    while (portEnum.hasMoreElements()) {
    CommPortIdentifier currPortId = (CommPortIdentifier) portEnum.nextElement();
    for (String portName : PORT_NAMES) {
    if (currPortId.getName().equals(portName)) {
    portId = currPortId;
    break;
    }
    }
    }
    if (portId == null) {
    System.out.println("Could not find COM port.");
    return;
    }


    try {
    serialPort = (SerialPort) portId.open(this.getClass().getName(), TIME_OUT);
    serialPort.setSerialPortParams(DATA_RATE, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,
    SerialPort.PARITY_NONE);


    // open the streams
    input = new BufferedReader(new InputStreamReader(serialPort.getInputStream()));
    output = serialPort.getOutputStream();


    serialPort.addEventListener(this);
    serialPort.notifyOnDataAvailable(true);
    } catch (Exception e) {
    System.err.println(e.toString());
    }
    }


    public synchronized void close() {
    if (serialPort != null) {
    serialPort.removeEventListener();
    serialPort.close();
    }
    }


    public synchronized void serialEvent(SerialPortEvent oEvent) {
    if (oEvent.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
    try {
    String inputLine = null;
    if (input.ready()) {
    inputLine = input.readLine();
    System.out.println(inputLine);
    }


    } catch (Exception e) {
    System.err.println(e.toString());
    }
    }
    // Ignore all the other eventTypes, but you should consider the other
    // ones.
    }


    public static void main(String[] args) throws Exception {
    Prova main = new Prova();
    main.initialize();
    Thread t = new Thread() {
    public void run() {
    // the following line will keep this app alive for 1000 seconds,
    // waiting for events to occur and responding to them (printing
    // incoming messages to console).
    try {
    Thread.sleep(1000000);
    } catch (InterruptedException ie) {
    }
    }
    };
    t.start();
    System.out.println("Started");
    }


    }


    a console viene stampato questo (variabili configurate in arduino per la scrittura del codice di funzionamento delle fotoresistenze):


    Started


    Raw Sensor Values Red: 919 Green: 913 Blue: 881
    Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 919 Green: 914 Blue: 882
    Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 919 Green: 913 Blue: 882
    Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 920 Green: 914 Blue: 882
    Mapped Sensor Values Red: 230/t Green: 228 Blue: 220Raw Sensor Values Red: 920 Green: 913 Blue: 881
    Mapped Sensor Values Red: 230/t Green: 228 Blue: 220Raw Sensor Values Red: 919 Green: 914 Blue: 881
    Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 921 Green: 914 Blue: 882
    Mapped Sensor Values Red: 230/t Green: 228 Blue: 220Raw Sensor Values Red: 918 Green: 913 Blue: 880
    Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 920 Green: 914 Blue: 881
    Mapped Sensor Values Red: 230/t Green: 228 Blue: 220Raw Sensor Values Red: 922 Green: 914 Blue: 883
    .................................................. .................................................. .................................................. ................
    continua a stampare valori di luci delle fotoresistenze fin quando non stoppo l'esecuzione. Io vorrei rendere questi valori (ad esempio mapped sensor values) come variabili da poter utilizzare stesso in java, ad esempio "if (mapped sensor value red) {...}

    puoi aiutarmi?non so se sono stato chiaro

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linowp Visualizza il messaggio
    Io vorrei rendere questi valori (ad esempio mapped sensor values) come variabili da poter utilizzare stesso in java, ad esempio "if (mapped sensor value red) {...}

    puoi aiutarmi?non so se sono stato chiaro
    Sì, ora è più chiaro. Ci sono diverse cose dubbie/inutili nel codice ma non sono importanti ora, tralasciamole.

    Non conosco personalmente la API gnu.io ma è ben comprensibile il suo uso, in quanto risulta chiaro che viene registrato un EventListener e quindi dopo un setup iniziale, la applicazione va avanti per "eventi" in base a quello che il device invia.

    Il punto non è tanto questo. Avendo usato InputStreamReader/BufferedReader è chiaro che il "protocollo" dei dati è testuale, fatto "a righe".
    Quindi in sostanza il tuo problema principale diventa: data una stringa es. "Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 919 Green: 913 Blue: 882" andare ad estrarre le informazioni di interesse.
    E questo si può fare in svariati modi, usando tutti i metodi e le funzionalità del framework per la gestione delle stringhe.
    Da dei banali indexOf() per trovare i punti chiave e poi con dei substring() ... fino ad arrivare all'uso delle regular expression.

    Dipende quanto/cosa sai a riguardo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    11
    purtroppo poco. Sono un ingegnere gestionale (a breve laurea magistrale...se tutto va bene).Durante il progetto del lavoro di tesi è nata questa problematica e per ovviare a tutto ciò ho provato a seguire un corso base di java,ma mi sto rendendo conto che forse era troppo base.Chiederti la scrittura del codice che fa questo sarebbe perfetto ma se non puoi farlo, puoi consigliarmi qualche testo che tratta questo specifico argomento?te ne sarei grato

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linowp Visualizza il messaggio
    puoi consigliarmi qualche testo che tratta questo specifico argomento?te ne sarei grato
    Qualunque testo che parla delle stringhe in Java (ed eventualmente delle regular expression) sarebbe applicabile. Ma il punto non è tanto questo. Ma sulla comprensione del formato e dei dati che spetta innanzitutto a te.

    Io vedo righe fatte così

    Mapped Sensor Values Red: 229/t Green: 228 Blue: 220Raw Sensor Values Red: 919 Green: 914 Blue: 882

    Sono tutte così o ci sono altre casistiche di formato? (credo siano tutte così, a naso)
    Una riga è quindi un singolo "record" di informazione? E cosa rappresenta concettualmente?
    Quali dati vuoi estrarre? Ci sono cose che io ovviamente da qui non posso comprendere: cosa indica il /t es. 229/t ? Perché "Raw" è attaccato direttamente dopo il valore del Blue? E' un errore di formato dal device o è proprio voluto così?
    Ad occhio vedo due sezioni: Red/Green/Blue "mapped" e poi Red/Green/Blue "raw", giusto?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    11
    In pratica ciò che mi viene stampato in console (valori "mapped" e "raw") non è altro ciò che viene stampato nella console di arduino (l'input da USB è Arduino). Il codice scritto su arduino è il seguente:

    const int greenLEDPin = 9;
    const int redLEDPin = 11;
    const int blueLEDPin = 10;


    const int redSensorPIN = A0;
    const int greenSensorPIN = A1;
    const int blueSensorPIN = A2;


    int redValue = 0;
    int greenValue = 0;
    int blueValue = 0;


    int redSensorValue = 0;
    int greenSensorValue = 0;
    int blueSensorValue = 0;


    void setup() {
    // put your setup code here, to run once:
    Serial.begin(9600);


    pinMode(greenLEDPin,OUTPUT);
    pinMode(redLEDPin,OUTPUT);
    pinMode(blueLEDPin,OUTPUT);
    }


    void loop() {
    // put your main code here, to run repeatedly:
    redSensorValue = analogRead(redSensorPIN);
    delay(5);
    greenSensorValue = analogRead(greenSensorPIN);
    delay(5);
    blueSensorValue = analogRead(blueSensorPIN);
    Serial.print("Raw Sensor Values \t Red: ");
    Serial.print(redSensorValue);
    Serial.print("\t Green: ");
    Serial.print(greenSensorValue);
    Serial.print("\t Blue: ");
    Serial.println(blueSensorValue);


    redValue = redSensorValue/4;
    greenValue = greenSensorValue/4;
    blueValue = blueSensorValue/4;


    Serial.print("Mapped Sensor Values \t Red: ");
    Serial.print(redValue);
    Serial.print("/t Green: ");
    Serial.print(greenValue);
    Serial.print("\t Blue: ");
    Serial.print(blueValue);


    analogWrite(redLEDPin, redValue);
    analogWrite(greenLEDPin, greenValue);
    analogWrite(blueLEDPin, blueValue);
    }


    Il formato delle righe postato dipende dal codice scritto in arduino. Da quanto capito,il primo codice scritto in java postato passa dalla console di arduino a quella di java i risultati.
    Il mio problema è raccogliere gli input provenienti da una scheda arduino ed utilizzarli in java,a prescindere dal primo codice da me postato...è fattibile una cosa del genere?PS non posso intervenire su arduino!

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    11
    ovviamente il caso che a me serve non è esattamente questo. Ho comprato un kit Arduino per capire come muovermi. Il tutto poi lo dovrei applicare ad un caso di una scheda arduino già programmata e funzionante

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da linowp Visualizza il messaggio
    Il mio problema è raccogliere gli input provenienti da una scheda arduino ed utilizzarli in java,a prescindere dal primo codice da me postato...è fattibile una cosa del genere?
    Sì, sicuramente.

    Quote Originariamente inviata da linowp Visualizza il messaggio
    PS non posso intervenire su arduino!
    Peccato ... anche perché il codice forse è pure sbagliato. Dove hanno emesso "/t Green: " probabilmente volevano emettere un tab che si scrive \t (non /t). Vabbè ....

    E comunque dal codice Arduino si notano 2 cose:

    a) Per un ciclo di lettura, il primo output su seriale è quello dei valori "raw", poi di quelli "mapped".
    b) Vedo la emissione del newline (quel println) appena dopo il blue del raw ma NON c'è un newline dopo il blue del mapped. Questo è anche il motivo per cui "Raw" appare attaccato al valore blue mapped.

    Questo, il punto b) in particolare, rende il formato abbastanza "rozzo" e poco chiaro. Perché il protocollo è sì "a righe" testuali ma nella riga c'è un pezzo di una lettura analogica precedente e un pezzo della lettura analogica successiva.

    Non vorrei essere nei panni di chi ha scritto quel codice .....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2016
    Messaggi
    11
    aldilà di quanto stampato (ipotizzo che nel codice arduino non abbia previsto una stampa dei valori delle variabili),posso trasportami in java da usb (collegata ad ardunio) le variabili e gli annessi valori per poterli gestire in modo indipendente?Invece di un input da tastiera voglio un input dato dal valore di luminosità della variabile derivante da arduino,è possibile?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.