float64 readAnalog(char eingangNr = '0'){ //Default Eingang = 0 // Task parameters TaskHandle taskHandle = 0; // Channel parameters char chan[8] = "Dev1/ai"; float64 min = 0.0; float64 max = 5.0; // Timing parameters uInt64 samplesPerChan = 1; // Data read parameters float64 data; int32 pointsToRead = 1; int32 pointsRead; float64 timeout = 10.0; chan[7] = eingangNr; DAQmxErrChk (DAQmxBaseCreateTask("",&taskHandle)); DAQmxErrChk (DAQmxBaseCreateAIVoltageChan(taskHandle,chan,"",DAQmx_Val_RSE,min,max,DAQmx_Val_Volts,NULL)); DAQmxErrChk (DAQmxBaseStartTask(taskHandle)); DAQmxErrChk (DAQmxBaseReadAnalogF64(taskHandle,pointsToRead,timeout,DAQmx_Val_GroupByChannel,&data,samplesPerChan,&pointsRead,NULL)); // printf ("Acquired reading: %f\n", data); //Debug DAQmxErrChk (DAQmxBaseStopTask (taskHandle)); return data; }
int main (int argc, char *argv[]) { // Task parameters int32 error = 0; TaskHandle taskHandle = 0; char errBuff[2048]= {'\0'}; int32 i; // Channel parameters char chan[] = "Dev1/ai0"; float64 min = -10.0; float64 max = 10.0; // Timing parameters char source[] = "OnboardClock"; uInt64 samplesPerChan = 100; float64 sampleRate = 1200.0; // Data read parameters #define bufferSize (uInt32)1000 float64 data[bufferSize]; int32 pointsToRead = -1; int32 pointsRead; float64 timeout = 10.0; while(1) { printf("new task\n\n"); DAQmxErrChk (DAQmxBaseCreateTask ("", &taskHandle)); DAQmxErrChk (DAQmxBaseCreateAIVoltageChan (taskHandle, chan, "", DAQmx_Val_NRSE, min, max, DAQmx_Val_Volts, NULL)); DAQmxErrChk (DAQmxBaseCfgSampClkTiming (taskHandle, source, sampleRate, DAQmx_Val_Rising, DAQmx_Val_FiniteSamps, samplesPerChan)); DAQmxErrChk (DAQmxBaseStartTask (taskHandle)); DAQmxErrChk (DAQmxBaseReadAnalogF64 (taskHandle, pointsToRead, timeout, 0, data, bufferSize, &pointsRead, NULL)); printf("pointsRead: %d\n",pointsRead); // Just print out the first 10 points for (i = 0; i < 8; ++i) { printf ("%f\n", data[i]); } DAQmxBaseStopTask (taskHandle); DAQmxBaseClearTask (taskHandle); } Error: if (DAQmxFailed (error)) DAQmxBaseGetExtendedErrorInfo (errBuff, 2048); if (taskHandle != 0) { DAQmxBaseStopTask (taskHandle); DAQmxBaseClearTask (taskHandle); } if (error) printf ("DAQmxBase Error %d: %s\n", error, errBuff); return 0; }
double DAQManager::getVoltage(){ float64 sum; int32 read; #ifdef _WIN32 DAQmxStartTask(adcTaskHandle); trigger(); while(!dataAcquired); dataAcquired=0; DAQmxStopTask(adcTaskHandle); #elif __APPLE__ /*bool32 isDone; DAQmxBaseIsTaskDone(adcTaskHandle,&isDone);*/ DAQmxBaseReadAnalogF64(adcTaskHandle, SAMPLE_COUNT, 10.0, DAQmx_Val_GroupByScanNumber, data, SAMPLE_COUNT, &read, NULL); /*while(!isDone); DAQmxBaseStopTask(adcTaskHandle); DAQmxBaseClearTask(adcTaskHandle);*/ #endif sum = 0; for (int i = 0; i < SAMPLE_COUNT; ++i){ sum += voltageData[i]; } return sum / SAMPLE_COUNT; }