Originariamente inviato da Michele Facchin
Non ho capito se il quesito è troppo facile o è troppo difficile..ci fai un esempio?
Diciamo che non è troppo difficile.. forse l'introduzione lo faceva sembrare chissà cosa..
Questo è il ciclo.. diciamo che il quesito è se a un certo numero di volte che eseguo questo ciclo mi fermo ad esempio al secondo step io devo memorizzarmi ad esempio in una variabile dove sono arrivato.. e la volta prossima che entro nel ciclo ripartire dallo stesso punto da dove mi sono fermato.. questo perchè altrimenti se parto dall'inizio il motore nelle prime sequenze rimmarrebbe fermo e introdurrebbe degli errori di gradi nella var current_degrees.. e questo non è bene! Avete qualche brillante idea? Io pensavo di introdurre dei goto.. ma ripeto che forse non è affatto la soluzione migliore!
codice:
do{
w_data[0] = 0xC; //1100 primo step
// DAQmxBaseWriteDigitalU8(taskHandle, numSampsPerChan, autoStart, timeout, dataLayout, writeArray, sampsPerChanWritten, Nothing)
DAQmxErrChk (DAQmxBaseWriteDigitalU8(taskHandle,1,1,10.0,DAQmx_Val_GroupByChannel,w_data,&written,NULL));
current_degrees += step_value;
//la funzione qui sopra fa uscire 1100 sui canali della scheda
if (current_degrees >= degrees) break; //se siamo a posto usciamo
Sleep(SLEEP_TIME); //mezzo sec di attesa
w_data[0] = 0x6; //0110 secondo step
DAQmxErrChk (DAQmxBaseWriteDigitalU8(taskHandle,1,1,10.0,DAQmx_Val_GroupByChannel,w_data,&written,NULL));
//la funzione qui sopra fa uscire 0110 sui canali della scheda
current_degrees += step_value;
if (current_degrees >= degrees) break; //se siamo a posto usciamo
Sleep(SLEEP_TIME); //mezzo sec di attesa
w_data[0] = 0x3; //0011 terzo step
DAQmxErrChk (DAQmxBaseWriteDigitalU8(taskHandle,1,1,10.0,DAQmx_Val_GroupByChannel,w_data,&written,NULL));
//la funzione qui sopra fa uscire 0011 sui canali della scheda
current_degrees += step_value;
if (current_degrees >= degrees) break; //se siamo a posto usciamo
Sleep(SLEEP_TIME); //mezzo sec di attesa
w_data[0] = 0x9; //1001 quarto step
DAQmxErrChk (DAQmxBaseWriteDigitalU8(taskHandle,1,1,10.0,DAQmx_Val_GroupByChannel,w_data,&written,NULL));
//la funzione qui sopra fa uscire 1001 sui canali della scheda
current_degrees += step_value;
if (current_degrees >= degrees) break; //se siamo a posto usciamo
Sleep(SLEEP_TIME);
}while(1);