#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include "daqx.h"
#define ChanCount 2
#define ScanCount 20
#define TotalCount (ScanCount * ChanCount)
#define FREQ 4.0f
#define STARTCHAN 1
#pragma comment(lib, "winmm.lib")
MMRESULT SineTimer;
// Buffer to hold acquired data
FLOAT buf[ChanCount * ScanCount];
DWORD PortVal;
DaqHandleT handle;
DWORD active,retCount,count,myVal;
// Error handler callback prototype
void WINAPI myHandler(DaqHandleT handle, DaqError errCode);
//timer call back used to read data
void CALLBACK SineGenProc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2)
{
//Read data up to the ScanCount or less if available. Data if analog is returned in engineering units
daqAdcTransferBufData(handle, buf , ScanCount, DabtmRetAvail, &retCount);
if(retCount) //print the one sample for each channel
printf("%+2.3f\t +%2.3f\n",buf[0],buf[1]);
}
VOID main(VOID)
{
DWORD chans[ChanCount]; //channel sequence array
DWORD flags[ChanCount]; // flags sequence array
DaqAdcGain gains[ChanCount]; // gains sequence array
FLOAT actualRate = 0; // used by daqAdcSetRate
printf("Simple Acquisition: Example\n");
handle = daqOpen("PDAQ");
if(handle < 0)
{
printf("\nError! Program aborted\nNo PersonalDaq devices installed\n");
exit(1);
}
//Check power upstate: if a zero is return for each bit of the port it means that bit is set to an output. You can
//change it by writing a '1' for example 255 configures the port as all inputs (D1 - D7) .
daqIORead(handle,DiodtPDaqDigIO, DiodpPDaqPowerUpPort1, 0, DioepP1, &myVal);
if(myVal == 0)
{
daqIOWrite(handle,DiodtPDaqDigIO, DiodpPDaqPowerUpPort1, 0, DioepP1, 255);
daqClose(handle); //reset the device by reopening
handle = daqOpen("PDAQ");
}
daqSetDefaultErrorHandler(myHandler);
daqSetErrorHandler(handle, myHandler);
// Configure acquisition
// Selecting Range: PgainX1 is 4 volt range by itself; logically OR'd with PgainDiv5 multiplies the 4 volt range by 5 resulting in a
// 20 volt range
//set channel 1 to T-type thermocouple
chans[0] = 1;
gains[0] = (DaqAdcGain)(PgainX1); //don't care for temperature
flags[0] = DafTcTypeT | DafDifferential | DafMeasDuration110;
// Port 1
chans[1] = 1;
gains[1] = PgainX1; //don't care
flags[1] = DafScanDigital; // read 8 bit input port pins 1-8
daqAdcSetScan(handle, chans, gains, flags, ChanCount);
daqAdcSetTrig(handle, DatsImmediate, 0,0,0,0);
daqAdcSetAcq(handle, DaamInfinitePost, 0, ScanCount);
daqAdcSetRate(handle, DarmFrequency, DaasPostTrig, FREQ, &actualRate);
daqAdcTransferSetBuffer(handle, (PVOID)buf, ScanCount, DatmDriverBuf );
daqAdcTransferStart(handle);
printf("Arming...Please Wait.\n");
daqAdcArm(handle);
printf("Acquisition Armed...\n");
UINT uDelay = 1;
UINT uResolution = 1;
DWORD dwUser = NULL;
UINT fuEvent = TIME_PERIODIC; //You also choose TIME_ONESHOT;
timeBeginPeriod(1);
SineTimer = timeSetEvent(uDelay, uResolution, SineGenProc, dwUser, fuEvent);
if(SineTimer==NULL)
{
printf("Multi-Media timer failed...");
exit(0);
}
//wait for data
do {
daqAdcTransferGetStat(handle, &active, &retCount);
} while (retCount > 10);
//read data while waiting for key press to end program
while( !_kbhit() )
{
Sleep(100);
}
daqClose(handle);
printf("\nFinished. Press ENTER...");
timeKillEvent(SineTimer);
timeEndPeriod(1);
} /* end main */
//error handler...
void WINAPI myHandler(DaqHandleT handle, DaqError errCode)
{
char errMsg[64];
daqFormatError(errCode, errMsg);
printf("\nError! Program aborted\nPersonalDaq Error: 0x%x\n%s\n",
errCode, errMsg);
if(handle >= 0) daqClose(handle);
printf("Press ENTER...");
(void)getchar();
exit(1);
}