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

    Creazione programma o funzione c++ per controllo servocomando

    Ciao a tutti.
    Per una piccola applicazione sto cercando di interfacciare qualche sample di OpenCV a dei servocomandi. Devo creare al momento uno script che mi invii sulla porta seriale del pc una sequenza di tre bytes secondo le specifiche dei controllori dei servocomandi. secondo il manuale (utilizzo un controller pololu) deco inviare dicevo 3 bytes di cui il primo deve essere sempre 255, il secondo indicante il numero del servocomando 0-3 , il terzo byte rappresenta la posizione da 0 a 255. la porta deve essere impostata a 2400 o 9600 bauds 8n1.
    Ho trovato e cercato di adattare il seguente codice:
    #include <windows.h>
    int main(int argc, char* argv[])
    {
    // open port for I/O
    HANDLE h = CreateFile("com5",
    GENERIC_READ|GENERIC_WRITE,
    0,NULL,
    OPEN_EXISTING,0,NULL);

    if(h == INVALID_HANDLE_VALUE) {

    } else {
    // set timeouts
    COMMTIMEOUTS cto = {20000, 20000, 20000, 0, 0 };
    DCB dcb;
    if(!SetCommTimeouts(h,&cto))

    // set DCB
    memset(&dcb,0,sizeof(dcb));
    dcb.DCBlength = sizeof(dcb);
    dcb.BaudRate = 9600;
    dcb.fBinary = 1;
    dcb.fDtrControl = DTR_CONTROL_DISABLE;
    dcb.fRtsControl = RTS_CONTROL_DISABLE;
    // dcb.fOutxCtsFlow = 1;
    // dcb.fRtsControl = DTR_CONTROL_HANDSHAKE;

    dcb.Parity = NOPARITY;
    dcb.StopBits = ONESTOPBIT;
    dcb.ByteSize = 8;

    if(!SetCommState(h,&dcb))


    DWORD read = 1;
    DWORD write= 1; // Number of bytes to write to serial port
    char buf[3];
    buf[0] = 255; // Decmial value to write to serial port
    buf[1] = 0 ;
    buf[2] = 0 ;
    //char Stringa[3] = {'0xff','0x00','0x00'};
    WriteFile(h,buf,write,&write,NULL); // write is updated with the number of bytes written
    //CloseHandle(h);
    }

    return 0;
    }
    purtroppo ho dei malfunzionamenti del genere:
    dovendo mandare 3 bytes dovrei scrivere DWORD write= 3; ma se lo faccio il controller mi segnala un errore irreversibile e devo resettarlo
    settato ad 1 il controller non rileva malfunzioamenti ma secondo me rileva solo il primo byte e i 3 servocomandi che utulizzo si posizionano al centro....
    qualcuno puo darmi una mano ad inviare quasta benedetta sequenza?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Meglio se non usi la stessa variabile.
    codice:
    DWORD res=0;
    WriteFile(h,buf,write,&res,NULL)
    Il perché è scritto qui:
    http://msdn.microsoft.com/en-us/libr...8VS.85%29.aspx
    lpNumberOfBytesWritten [out, optional]

    A pointer to the variable that receives the number of bytes written when using a synchronous hFile parameter. WriteFile sets this value to zero before doing any work or error checking. Use NULL for this parameter if this is an asynchronous operation to avoid potentially erroneous results.
    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.

  3. #3
    fatto ma nessuna novità...mi segnala sempre errore...

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

    Moderazione

    Ed è bene che quando posti del codice tu utilizzi gli appositi tag CODE, come evidenziato nel regolamento al punto 6: ciò consente a chi vede le tue discussioni di poter leggere il codice più agevolmente, mantenendo indentazione e formattazione.

    Se il tuo codice è indentato, aggiungo io questi tag nel tuo post.


    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

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

    Re: Moderazione

    Originariamente inviato da LeleFT
    Se il tuo codice è indentato, aggiungo io questi tag nel tuo post.
    Manco a dirlo non è indentato...


    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

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    E' disponibile una guida online per la programmazione del modulo che usi?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2024 vBulletin Solutions, Inc. All rights reserved.