Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Come posso far funzionare insieme due o più method?

    Salve,sono nel pieno di un progettino basato su Arduino e Java che richiede una comunicazione seriale costantemente attiva e che deve disattivarsi solo quando lo decido io.
    Il problema sta nel fatto che non riesco a tirare fuori l'oggetto "serialPort" dal method dove viene creato,quindi avevo pensato di utilizzare un ciclo while per leggere continuamente una variabile e tenere il programma in "sospensione",il punto è che con il codice che ho scritto io va in sospensione tutto il programma nonostante la connessione seriale si trovi su un'altra classe rispetto a quella principale.
    La mia richiesta è semplice,mi piacerebbe sapere se è possibile avviare più method insieme e farli lavorare insieme in maniera sincrona.
    PEr sicurezza vi posto anche il codice che ho scritto per la comunicazione seriale,uso le librerie jssc.
    codice:
    package Pack;
    
    import jssc.SerialPort;
    import jssc.SerialPortException;
    
    
    public class Connessioneseriale {
        
    
    
        public static void Seriale(String mex) throws InterruptedException {
            boolean controller = true;
            java.lang.String memoria = null;
            
            if (variabili.stat == 0){
             SerialPort serialPort = new SerialPort("COM3");
           
            try {
                serialPort.openPort();
                serialPort.setParams(SerialPort.BAUDRATE_9600, 
                                     SerialPort.DATABITS_8,
                                     SerialPort.STOPBITS_1,
                                     SerialPort.PARITY_NONE);//parametri seriale
                System.err.println("Connesione Seriale stabilita.");
            while(controller == true){
                if(memoria != mex){
                serialPort.writeBytes(mex.getBytes());
                memoria = mex;}
            }
                
                
                
                serialPort.closePort();
            }
            catch (SerialPortException ex) {
                System.out.println(ex);
            }
            }
            
        }
        
    }
    Spero abbiate capito,ho provato anche su Stack Overflow ma con il mio inglese scolastico mi sa che hanno capito una cosa per un altra...
    Ultima modifica di XSparter; 13-02-2015 a 02:13

  2. #2
    Ciao XSparter il ciclo while andrebbe eseguito su un'altro thread diverso da quello principale, ti rimando alla documentazione ufficiale oracle

  3. #3
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Ciao XSparter il ciclo while andrebbe eseguito su un'altro thread diverso da quello principale, ti rimando alla documentazione ufficiale oracle
    Si lo so,avevo letto qualcosa in merito iersi sera,ma causa l'ora tarda ci avevo capito poco e niente.
    Però dico,come soluzione ti sembra buona? Sul mio computer quando avvio tutto il programma si frega il 10% delle prestazioni della mia CPU...

  4. #4
    Non vedo alternativa se devi soddisfare il requisito che appena viene passato qualcosa sul buffer della seriale lo devi leggere, per forza di cosa devi fare un while. Se il requisito non ci fosse e che ne so è accettabile che che tra una scrittura è la lettura ci possa essere che ne per esempio mezzo secondo allora metti uno sleep(500) nel while e cosi risparmi risorse....

  5. #5
    Quote Originariamente inviata da francesco.muia Visualizza il messaggio
    Non vedo alternativa se devi soddisfare il requisito che appena viene passato qualcosa sul buffer della seriale lo devi leggere, per forza di cosa devi fare un while. Se il requisito non ci fosse e che ne so è accettabile che che tra una scrittura è la lettura ci possa essere che ne per esempio mezzo secondo allora metti uno sleep(500) nel while e cosi risparmi risorse....
    Ciao,ho aggiustato il mio codice,però non riesco a far partire entrambe le classi insieme su eclipse...
    EDIT: Ho notato una cosa,se avvio i due file separatamente e provo a leggere una delle variabili pubbliche (Che ho messo in un file creato apposta) per ognuno dei programmi ha un valore diverso..
    Ultima modifica di XSparter; 13-02-2015 a 16:16

  6. #6
    1) Quanto ne sai di multithreading ?
    2) Senza vedere il codice come facciamo ad aiutarti ?

  7. #7
    So cos'è,ma normalmente evito di utilizzarlo. Comunque sono riuscito a risolvere,ho creato il thread nel file principale ed ora funziona tutto perfettamente.Grazie per l'aiuto

Tag per questa discussione

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.