Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    16

    [C++] serial programming

    Salve a tutti.

    Devo mandare un comando ad un controller collegato via seriale al computer (tramite adattatore usb). So che il controller è collegato e reagisce al comando perché usando una serial port terminal application funziona.

    Sto programmando in Xcode su OS.

    Il codice è il seguente
    codice:
    #include <stdio.h>  
    #include <iostream>
    #include <string.h>   
    #include <unistd.h>  
    #include <fcntl.h>   
    #include <errno.h>    
    #include <termios.h> 
    using namespace std; 
     int main () { 	
    int fd;  	
    fd = open("/dev/tty.usbserial-00001004", O_RDWR | O_NOCTTY | O_NDELAY); 	
    if (fd == -1) 	
    {perror("open_port: Unable to open /dev/tty.usbserial-00001004 - ");} 	
    
    else
    { 		
    fcntl(fd, F_SETFL, 0); 		
    char data[]="comando da inserire"; 		
    write(fd, data, strlen(data)); 		
    perror( "--"); 
    } 	
    close(fd); 	
    return (fd); 
    }
    Non ho mai fatto prgrammazione seriale, quindi scusatemi se il codice fa schifo.
    Grazie a tutti per le risposte!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Ma non hai detto qual è il problema che riscontri...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    16
    Scusa! Ero abbastanza stanco quando ho scritto il post!

    Il problema è che il segnale non arriva all'apparecchio. Non mi da problemi di compilazione, semplicemente avvio il programma e non succede nulla.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Prova a cortocircuitare le linee TX e RX e leggere tramite una read. Se ottieni lo stesso che invii in uscita, probabilmente basta settare il baud rate della seriale allo stesso valore previsto dal controller.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    16
    Ti ringrazio shodan! Il problema era nel baud rate. Le specifiche le ho trovate nel manuale del controller, quindi mi sono evitato il calcolo manuale.

    Grazie ancora!

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2012
    Messaggi
    16
    Scusate se continuo a rompere, ho modificato il codice nel seguente modo:

    codice:
    #include <stdio.h>   
    #include <iostream> 
    #include <string.h>   
    #include <unistd.h>   
    #include <fcntl.h>   
    #include <errno.h>    
    #include <termios.h>  
    using namespace std; 
    int main ()
    { 	
    
    int fd;  
    		
    fd = open("/dev/tty.usbserial-00001004", O_RDWR | O_NOCTTY | O_NDELAY); 	
    struct termios options; 
    	     
    tcgetattr(fd, &options); 
    	 	     
    cfsetispeed(&options, B9600);    
    cfsetospeed(&options, B9600);
     	 	     
    options.c_cflag |= (CLOCAL | CREAD);
     	     
    tcsetattr(fd, TCSANOW, &options); 	
    
    if (fd == -1) 	
    {perror("open_port: Unable to open /dev/tty.usbserial-00001004 - "); 	} 	
    
    else{ 		
    char data[]="comando da inserire"; 		
    write(fd, data, strlen(data)); 		
    perror( "--"); } 	
    	
    close(fd); 	
    return (fd); }
    Il codice funziona correttamente e il controller esterno reagisce bene. Il problema è perror che mi restituisce il seguente errore nella funzione write()

    codice:
    --: Undefined error: 0
    è ancora qualcosa legato al baud rate?

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.