Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed DevInterfaces MCP4728 MCP4728setaddr I2Cinterfaces
Revision 11:4367b8eefa6c, committed 2021-08-17
- Comitter:
- kstokely
- Date:
- Tue Aug 17 19:29:28 2021 +0000
- Parent:
- 10:bf195171d850
- Commit message:
- Test for Mike;
Changed in this revision
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/main.cpp Mon May 20 17:05:29 2019 +0000
+++ b/main.cpp Tue Aug 17 19:29:28 2021 +0000
@@ -1,9 +1,17 @@
+/*
+Known issues with mbed program for future reference
+1.
+2.
+3.
+
+*/
+
/** example program for the use of the MCP4728 class and DACInterface.h classes
*
* V 1.0 : tested on the KL05z but without the MCP4728 connected \
- * (C) Wim Beaumont Universiteit Antwerpen 2016
- */
+ * (C) Wim Beaumont Universiteit Antwerpen 2016
+ */
#define MCP4728EXAMPLEVER "2.04"
#define TARGET_MBED 1
@@ -13,33 +21,32 @@
#include <cstring>
#if defined (TARGET_KL25Z) || defined (TARGET_KL46Z)
- PinName const SDA = PTE25;
- PinName const SCL = PTE24;
+PinName const SDA = PTE25;
+PinName const SCL = PTE24;
#elif defined (TARGET_KL05Z)
- PinName const SDA = PTB4;
- PinName const SCL = PTB3;
+PinName const SDA = PTB4;
+PinName const SCL = PTB3;
#elif defined (TARGET_K20D50M)
- PinName const SDA = PTB1;
- PinName const SCL = PTB0;
+PinName const SDA = PTB1;
+PinName const SCL = PTB0;
#elif defined (TARGET_MBED)
- PinName const SDA = p28;
- PinName const SCL = p27;
+PinName const SDA = p28;
+PinName const SCL = p27;
#else
- #error TARGET NOT DEFINED
+#error TARGET NOT DEFINED
#endif
#include "I2C.h"
-#include "I2CInterface.h"
-#include "MBEDI2CInterface.h"
-#include "DACInterface.h"
+#include "I2CInterface.h"
+#include "MBEDI2CInterface.h"
+#include "DACInterface.h"
#include "dev_interface_def.h"
#include "MCP4728setaddr.h"
#include "mcp4728.h"
-
#include "shutter.h"
-MBEDI2CInterface mbedi2c( SDA, SCL);
+MBEDI2CInterface mbedi2c( SDA, SCL);
MBEDI2CInterface* mbedi2cp= &mbedi2c ;
I2CInterface* i2cdev= mbedi2cp;
const float Vdd = 4.97;
@@ -47,10 +54,14 @@
Serial pc(USBTX, USBRX);
+
DigitalOut CameraTrig(p29);
+InterruptIn TrigInt(p30);
+InterruptIn TrigHW(p30);
+int TrigMode = 0;
+
//Pins for 4x4 Module
-
DigitalOut m4x4TTL1(p21);
DigitalOut m4x4TTL2(p22);
DigitalOut m4x4TTL3(p23);
@@ -60,6 +71,7 @@
DigitalOut m4x4CLK(p26); //CLk for triggering after new input
+
//Pins for 4x5 Module
DigitalOut m4x5TTL1(p7);
@@ -87,62 +99,74 @@
bool Shut3 = 0;
bool Shut4 = 0;
+
+int DVOA1 = 0;
+int DVOA2 = 0;
+int DVOA3 = 0;
+int DVOA4 = 0;
+
+bool trigSet = 0;
+
string pcstr;
string seqstr;
Timer t;
+MCP4728* gbldac;
+Shutter* gblSH;
+
+
void trigSH( Shutter SH, int nimg )
{
- for(int i = 0; i<nimg; i++)
- {
+ for(int i = 0; i<nimg; i++) {
SH.writeShutters(1,1,1,1);//Turn on Shutters
-
+
wait_us(92);//Wait for shutter to go high
wait_us(120);//Wait to trigger until middle of Shutter Opening
-
+
CameraTrig = 1;//Trigger Camera to turn on
wait_us(38);//Wait for rest of 250 us
-
+
//wait_us(16417); //DEBUG: Added extra delay to slow down trigger
-
+
//Turn off shutters and Camera Trigger
SH.writeShutters(0,0,0,0);
-
+
CameraTrig = 0;
-
- wait_us(16417); //Wait to run at 60 Hz
-
+
+ wait_us(8183); //Wait to run at 120 Hz
+
//wait_us(16417); //DEBUG: Added extra delay to slow down trigger
}
+ //pc.printf("Triggered Shutters (trigSH) \n\r");
}
-
+
void trigNotEyeSafe( Shutter SH, int nimg )
{
- for(int i = 0; i<nimg; i++)
- {
+ for(int i = 0; i<nimg; i++) {
//SH.writeShutters(1,1,1,1);//Turn on Shutters
-
+
wait_us(92);//Wait for shutter to go high
wait_us(120);//Wait to trigger until middle of Shutter Opening
-
+
CameraTrig = 1;//Trigger Camera to turn on
wait_us(38);//Wait for rest of 250 us
-
+
//wait_us(16417);//DEBUG: Added extra delay to slow down trigger
-
+
//Turn off shutters and Camera Trigger
//SH.writeShutters(0,0,0,0);
CameraTrig = 0;
-
- wait_us(16417); //Wait to run at 60 Hz
-
- // wait_us(16417);//DEBUG: Added extra delay to slow down trigger
+
+ wait_us(8183); //Wait to run at 120 Hz
+
+ // wait_us(16417);//DEBUG: Added extra delay to slow down trigger
}
+ //pc.printf("Triggered Shutters (trigNotEyeSafe) \n\r");
}
-
-
+
+
int DACSetChannel( int chan, MCP4728* dac, int counts)
{
@@ -152,134 +176,71 @@
int voltCount = counts;
string instr;
- if( voltCount > 4095 || voltCount < 0)
- {
+ if( voltCount > 4095 || voltCount < 0) {
voltCount = 4095;
}
-
- while(ret == 0 && z < 10)
- {
+
+ while(ret == 0 && z < 10) {
//t.start();
dac->update();
//t.stop();
//t.reset();
//pc.printf("DAC update took %f seconds \n\r",t.read());
(void)dac->getDACvalue(CHcnt,chan);
-
- if(CHcnt == counts)
- {
+
+ if(CHcnt == counts) {
ret = 1;
- }
- else
- {
+ } else {
//t.start();
dac->setDACvalue(voltCount,chan);
//t.stop();
//pc.printf("DAC setting took %f seconds \n\r",t.read());
z++;
- }
-
-
- }
-
- /*
- if( z == 13 )
- {
- voltCount = counts;
-
- if( voltCount > 4095 || voltCount < 0)
- {
- //////pc.printf("\n\r Voltage Entered Higher than Vdd Setting Voltage to Maximum\n\r");
- dac->setDACvalue(4095,chan);
- }
- else
- {
- if ( dac->setDACvalue(voltCount,chan) )
- {
- //printf("failed to set dac value %f for channel %d\n\r",voltCount,chan);
- }
- ////////pc.printf("Voltage set to %3fV\n\r", voltage);
- if( dac->update() )
- {
- //printf("\n\rfailed to readback channel info \n\r");
- }
-
- }
-
- }
- */
-
+ }
+
+
+ }
+
+
return 1;
}
-
+
void set4x4Piping(DigitalOut** Arr_4x4, char z1, char z2, char z3, char z4, char z5)
{
- /*
- //Get 5 1's or 0's for binary number
- int count = 0;
- char c;
- ////pc.printf("4x4 Control: Enter 5 digit binary number\n\r");
- while ( count < 5 )
- {
- c = pc.getc();
-
- if( c == '1' || c=='0' )
- {
- *Arr_4x4[count] = atoi(&c);
- count++;
- }
- }
- */
-
- *Arr_4x4[0] = atoi(&z1);
- *Arr_4x4[1] = atoi(&z2);
- *Arr_4x4[2] = atoi(&z3);
- *Arr_4x4[3] = atoi(&z4);
- *Arr_4x4[4] = atoi(&z5);
-
- for( int k = 0; k<2; k++) //Trigger clocking to change values
- {
- m4x4CLK = 1;
- wait_us(200);
- m4x4CLK = 0;
- }
-
- //pc.printf("Optical Path set to : %d%d%d%d%d\n\r", m4x4TTL1.read(), m4x4TTL2.read(), m4x4TTL3.read(), m4x4TTL4.read(), m4x4TTL5.read() ); //Confirm the correct output is set
+
+
+ *Arr_4x4[0] = atoi(&z1);
+ *Arr_4x4[1] = atoi(&z2);
+ *Arr_4x4[2] = atoi(&z3);
+ *Arr_4x4[3] = atoi(&z4);
+ *Arr_4x4[4] = atoi(&z5);
+
+ for( int k = 0; k<2; k++) { //Trigger clocking to change values
+ m4x4CLK = 1;
+ wait_us(200);
+ m4x4CLK = 0;
+ }
+
+ //pc.printf("Optical Path set to : %d%d%d%d%d\n\r", m4x4TTL1.read(), m4x4TTL2.read(), m4x4TTL3.read(), m4x4TTL4.read(), m4x4TTL5.read() ); //Confirm the correct output is set
}
void set4x5Piping(DigitalOut** Arr_4x5, char z1, char z2, char z3, char z4, char z5)
{
- /*
- //Get 5 1's or 0's for binary number
- int count = 0;
- char c;
- ////pc.printf("4x5 Control: Enter 5 digit binary number\n\r");
- while ( count < 5 )
- {
- c = pc.getc();
-
- if( c == '1' || c=='0' )
- {
- *Arr_4x5[count] = atoi(&c);
- count++;
- }
- }
- */
-
- *Arr_4x5[0] = atoi(&z1);
- *Arr_4x5[1] = atoi(&z2);
- *Arr_4x5[2] = atoi(&z3);
- *Arr_4x5[3] = atoi(&z4);
- *Arr_4x5[4] = atoi(&z5);
-
- for( int k = 0; k<2; k++) //Trigger clocking to change values
- {
- m4x5CLK = 1;
- wait_us(200);
- m4x5CLK = 0;
- }
-
- //pc.printf("Optical Path set to : %d%d%d%d%d\n\r", m4x5TTL1.read(), m4x5TTL2.read(), m4x5TTL3.read(), m4x5TTL4.read(), m4x5TTL5.read() ); //Confirm the correct output is set
+
+
+ *Arr_4x5[0] = atoi(&z1);
+ *Arr_4x5[1] = atoi(&z2);
+ *Arr_4x5[2] = atoi(&z3);
+ *Arr_4x5[3] = atoi(&z4);
+ *Arr_4x5[4] = atoi(&z5);
+
+ for( int k = 0; k<2; k++) { //Trigger clocking to change values
+ m4x5CLK = 1;
+ wait_us(200);
+ m4x5CLK = 0;
+ }
+
+ //pc.printf("Optical Path set to : %d%d%d%d%d\n\r", m4x5TTL1.read(), m4x5TTL2.read(), m4x5TTL3.read(), m4x5TTL4.read(), m4x5TTL5.read() ); //Confirm the correct output is set
}
@@ -341,31 +302,12 @@
void setAllShutters(Shutter SH,char z1, char z2, char z3, char z4)
{
- /*
- //Writes to all 4x5 shutters a specific state
- int inarr[4];
- for(int i=0; i<4; i++)
- {
- char z = pc.getc();
- if( z == '1')
- {
- inarr[i] = 1;
- }
- else if( z == '0')
- {
- inarr[i] = 0;
- }
- else
- {
- inarr[i] = 0;
- }
- }
- */
- Shut1 = atoi(&z1);
- Shut2 = atoi(&z2);
- Shut3 = atoi(&z3);
- Shut4 = atoi(&z4);
- SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+
+ Shut1 = atoi(&z1);
+ Shut2 = atoi(&z2);
+ Shut3 = atoi(&z3);
+ Shut4 = atoi(&z4);
+ SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
}
void queryDAC(MCP4728* dac)
@@ -375,17 +317,15 @@
int CH3cnt;
int CH4cnt;
//Print State of DAC
- if( dac->update() == 0)
- {
+ if( dac->update() == 0) {
(void)dac->getDACvalue(CH1cnt,0);
(void)dac->getDACvalue(CH2cnt,1);
(void)dac->getDACvalue(CH3cnt,2);
(void)dac->getDACvalue(CH4cnt,3);
pc.printf("CH1:%4d CH2:%4d CH3:%4d CH4:%4d\n\r",CH1cnt,CH2cnt,CH3cnt,CH4cnt);
}
-
- else
- {
+
+ else {
pc.printf("Error: No readback from DAC\n\r");
}
}
@@ -396,78 +336,142 @@
pc.printf("SH1:%d SH2:%d SH3:%d SH4:%d SHRef:%d\n\r",Shut1,Shut2,Shut3,Shut4,mRefShutters.read());
}
-int main(void) {
-
- //get the version of getVersion
+void HWTrigHandler()
+{
+ //pc.printf("Hardware Interrupt Triggered \n\r");
+
+ if (TrigMode == 0)
+ {
+ trigSet = 1;
+ }
+
+ else
+ {
+ int i;
+ int nimgs = 0;
+ //pc.printf("Interrupt Triggered \n\r");
+ for(i = 0; i<seqstr.size(); i++) {
+ //Find characters and then grab next three digits as the number of times to trigger
+
+ if( seqstr[i] == 'i') {
+ nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
+ DACSetChannel( 0, gbldac, 4095);
+ DACSetChannel( 1, gbldac, 4095);
+ DACSetChannel( 2, gbldac, 4095);
+ DACSetChannel( 3, gbldac, 4095);
+ trigSH( *gblSH, nimgs );
+ //pc.printf("Num Illums: %d\n",nimgs);
+ } else if( seqstr[i] == 'd') {
+ nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
+ gblSH->writeShutters(0,0,0,0);
+ DACSetChannel( 0, gbldac, 4095);
+ DACSetChannel( 1, gbldac, 4095);
+ DACSetChannel( 2, gbldac, 4095);
+ DACSetChannel( 3, gbldac, 4095);
+ trigNotEyeSafe( *gblSH, nimgs );
+ //pc.printf("Num Darks: %d\n",nimgs);
+ } else if( seqstr[i] == 'c') {
+ nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
+ DACSetChannel( 0, gbldac, DVOA1);
+ DACSetChannel( 1, gbldac, DVOA2);
+ DACSetChannel( 2, gbldac, DVOA3);
+ DACSetChannel( 3, gbldac, DVOA4);
+ trigSH( *gblSH, nimgs );
+
+ //pc.printf("Num Contours: %d\n",nimgs);
+ }
+
+
+
+ else if( seqstr[i] == 'r') {
+ nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
+ DACSetChannel( 0, gbldac, DVOA1);
+ DACSetChannel( 1, gbldac, DVOA2);
+ DACSetChannel( 2, gbldac, DVOA3);
+ DACSetChannel( 3, gbldac, DVOA4);
+ gblSH->writeShutters(0,0,0,0);
+ trigNotEyeSafe( *gblSH, nimgs );
+ //pc.printf("Num Refs: %d\n",nimgs);
+ }
+
+ }
+ }
+}
+
+void extTrigHandler()
+{
+ //In this mode trigger button sets the query Trig to high
+ //Matlab query the trigger to see if it needs to stop
+
+ //trigSet = 1;
+
+
+ /*
+
+ */
+}
+
+
+int main(void)
+{
+
+ //get the version of getVersion
getVersion gv;
int addr;
//Timer m;
addr = 0;
- MCP4728 dac( i2cdev ,addr, Vdd); // assuming the address of the MCP4728 is set to 0 factory default
-
+ MCP4728 dac( i2cdev ,addr, Vdd); // assuming the address of the MCP4728 is set to 0 factory default
+ gbldac = &dac;
wait(1);
- int cnt=0;
pc.baud(921600);
mRefShutters = 1;
-//Set up dac for external voltage
+ //Set up dac for external voltage
dac.setRefExtern();
dac.update();
-//Intialize shutters
+ //Intialize shutters
Shutter SH;
SH.init( &SH1_1, &SH1_2, &SH2_1, &SH2_2, &SH3_1, &SH3_2, &SH4_1, &SH4_2 );
SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
+ gblSH = &SH;
+
+ //Set up ext trig interrupt
+ TrigInt.rise(&extTrigHandler);
+ TrigInt.mode(PullUp);
-
+ TrigHW.rise(&HWTrigHandler);
+ TrigHW.mode(PullUp);
+ TrigHW.enable_irq();
+
+
//TTL pin arrays
DigitalOut* Arr_4x4[5] = {&m4x4TTL1, &m4x4TTL2, &m4x4TTL3, &m4x4TTL4, &m4x4TTL5 };
DigitalOut* Arr_4x5[5] = {&m4x5TTL1, &m4x5TTL2, &m4x5TTL3, &m4x5TTL4, &m4x5TTL5 };
-
-
+
+
//Set straight pipes initial state
m4x5TTL1 = 1;
m4x4TTL1 = 1;
-
- float voltage = 0;
- int voltCount = 0;
+
string instr;
-
- seqstr = "d010c010r010i010";
-
+
+ seqstr = "d010r010i010c010";
+
pcstr.resize(200);
-
-while(1)
-{
- //m.stop();
- //pc.printf("Main loop took %f seconds \n\r",m.read());
+
+ while(1)
+ {
+ //pc.printf("looping");
pc.scanf("%s", pcstr.c_str() );
- //m.reset();
- //m.start();
- //DEBUG
- //pc.printf( "String Entered: %s String Size:%d\n\r",pcstr.c_str(),pcstr.size() );
-
-
-
+
+
int indexArr[100];
int indexSize = 0;
-
-
- //Find all commas in string
- /*
- for(int i = 0; i < pcstr.size(); i++)
- {
- if( pcstr[i] == ',')
- {
- indexArr[indexSize] = i;
- indexSize++;
- }
-
- }
- */
-
+
+
//had to change as string does not resize
int i =0;
while( pcstr.c_str()[i] != 0 && pcstr.c_str()[i] != ' ' && pcstr.c_str()[i] != '\0')
@@ -479,50 +483,47 @@
}
i++;
}
-
+
//DEBUG
//pc.printf( "Commas Found %d\n\r",indexSize );
-
-
-
+
+
+
//Interpret commands
for(int i =0; i<indexSize; i++)
{
//DEBUG
//pc.printf( "Loop #%d of %d\n\r",i,indexSize-1 );
-
+
char c;
//command must begin with a comma
c = pcstr.c_str()[ indexArr[i] +1 ];
-
-
-
-
+
//DEBUG
//pc.printf( "Cmd is %c\n\r",c );
-
-
+
+
if( c == '1') //Toggle Shutter 1
{
char z1 = pcstr[ indexArr[i] +2 ];
Shut1 = atoi(&z1);
SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
}
-
+
else if( c == '2') //Toggle Shutter 2
{
char z1 = pcstr[ indexArr[i] +2 ];
Shut2 = atoi(&z1);
SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
}
-
+
else if( c == '3') //Toggle Shutter 3
{
char z1 = pcstr[ indexArr[i] +2 ];
Shut3 = atoi(&z1);
SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
}
-
+
else if( c == '4') //Toggle Shutter 4
{
char z1 = pcstr[ indexArr[i] +2 ];
@@ -530,36 +531,46 @@
SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
}
+ else if (c == '5')
+ {
+ TrigMode = 0;
+ }
+
+ else if (c == '6')
+ {
+ TrigMode = 1;
+ }
+
else if( c == 'u')
{
closeRef();
}
-
+
else if( c == 'y')
{
openRef();
}
-
+
else if(c == 'o') //Open All Shutters
{
openAllHP(SH);
}
-
+
else if(c == 'r') //Close All Shutters
{
closeAllHP(SH);
}
-
+
else if( c == 'm')
{
//string sub = pcstr.substr( indexArr[i]+2 , 4 );//Used for DAC
char z1 = pcstr[ indexArr[i] +2 ];
char z2 = pcstr[ indexArr[i] +3 ];
char z3 = pcstr[ indexArr[i] +4 ];
- char z4 = pcstr[ indexArr[i] +5 ];
+ char z4 = pcstr[ indexArr[i] +5 ];
setAllShutters(SH,z1,z2,z3,z4);
}
-
+
else if( c == 91 ) //Left square bracket [ 4x4 Control
{
//get inputs for 4x4
@@ -570,8 +581,8 @@
char z5 = pcstr[ indexArr[i] +6 ];
set4x4Piping(Arr_4x4,z1,z2,z3,z4,z5);
}
-
-
+
+
else if( c == 93 ) //Right square bracket ] 4x5 Control
{
char z1 = pcstr[ indexArr[i] +2 ];
@@ -581,26 +592,28 @@
char z5 = pcstr[ indexArr[i] +6 ];
set4x5Piping(Arr_4x5,z1,z2,z3,z4,z5);
}
-
-
+
+
else if( c == 'd')
{
queryDAC(&dac);
}
-
+
else if( c == 'a')
{
queryShutters();
- }
+ }
+
+
else if( c == '.' ) //Single Channel DAC Control
{
////pc.printf("Single Channel DAC Control Press Channel Number\n\r");
-
-
+
+
char achan = pcstr[ indexArr[i] + 2 ];
int ichan = atoi(&achan);
-
+
char acount[5];
acount[0] = pcstr[ indexArr[i] + 3 ];
acount[1] = pcstr[ indexArr[i] + 4 ];
@@ -610,156 +623,104 @@
int icount = atoi(acount);//Get 4 digit Count
//icount = icount / 10;
//DEBUG
- //pc.printf("DAC Channel: %d DAC Counts: %d Acount:\n\r",ichan,icount);
-
-
+ //pc.printf("DAC Channel: %d DAC Counts: %d Acount:\n\r",ichan,icount);
+
+
if( achan == '1' || achan== '2' || achan == '3' || achan == '0' )
{
//////////pc.printf("Channel %c Selected",z);
DACSetChannel( ichan , &dac, icount);
- }
+ }
else
{
////pc.printf("ERROR");
}
}
+
+ else if( c == '<' )
+ {
+ //pc.printf("Interrupts Disabled \n\r");
+ TrigInt.disable_irq();
+ }
+
+ else if( c == '>' )
+ {
+ //pc.printf("Interrupts Enabled \n\r");
+ TrigInt.enable_irq();
+
+ }
+ else if( c == 'q')
+ {
+ //Query trigger
+ if( trigSet == 1)
+ {
+ trigSet = 0;
+ pc.printf("Yy\n\r");
+ }
+ else
+ {
+ trigSet = 0;
+ pc.printf("Nn\n\r");
+ }
+ }
+
+
else if( c == 't')
{
- /*
- //Contours Hologran
- DACSetChannel( 0 , &dac, 0);
- DACSetChannel( 1 , &dac, 0);
- DACSetChannel( 2 , &dac, 0);
- DACSetChannel( 3 , &dac, 0);
- wait_ms(100);
- trigSH( SH, 1 );
- wait_ms(100);
-
-
- //Illums
- DACSetChannel( 0 , &dac, 4095);
- DACSetChannel( 1 , &dac, 4095);
- DACSetChannel( 2 , &dac, 4095);
- DACSetChannel( 3 , &dac, 4095);
- SH.writeShutters(1,1,1,1);
- wait_ms(100);
- trigSH( SH, 10 );
- wait_ms(100);
-
-
- //Reference
- DACSetChannel( 0 , &dac, 0);
- DACSetChannel( 1 , &dac, 0);
- DACSetChannel( 2 , &dac, 0);
- DACSetChannel( 3 , &dac, 0);
- SH.writeShutters(0,0,0,0);
- wait_ms(100);
- trigNotEyeSafe( SH, 10 );
- wait_ms(100);
-
- //Darks
- SH.writeShutters(0,0,0,0);
- DACSetChannel( 0 , &dac, 4095);
- DACSetChannel( 1 , &dac, 4095);
- DACSetChannel( 2 , &dac, 4095);
- DACSetChannel( 3 , &dac, 4095);
-
- wait_ms(100);
- trigNotEyeSafe( SH, 10 );
- wait_ms(100);
- */
-
- int i;
- int nimgs = 0;
- for(i = 0; i<seqstr.size(); i++)
- {
- //Find characters and then grab next three digits as the number of times to trigger
-
- if( seqstr[i] == 'i')
- {
- nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
- DACSetChannel( 0 , &dac, 4095);
- DACSetChannel( 1 , &dac, 4095);
- DACSetChannel( 2 , &dac, 4095);
- DACSetChannel( 3 , &dac, 4095);
- trigSH( SH, nimgs );
- //pc.printf("Num Illums: %d\n",nimgs);
- }
- else if( seqstr[i] == 'd')
- {
- nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
- SH.writeShutters(0,0,0,0);
- DACSetChannel( 0 , &dac, 4095);
- DACSetChannel( 1 , &dac, 4095);
- DACSetChannel( 2 , &dac, 4095);
- DACSetChannel( 3 , &dac, 4095);
- trigNotEyeSafe( SH, nimgs );
- //pc.printf("Num Darks: %d\n",nimgs);
- }
- else if( seqstr[i] == 'c')
- {
- nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
- DACSetChannel( 0 , &dac, 0);
- DACSetChannel( 1 , &dac, 0);
- DACSetChannel( 2 , &dac, 0);
- DACSetChannel( 3 , &dac, 0);
- trigSH( SH, nimgs );
-
- //pc.printf("Num Contours: %d\n",nimgs);
- }
- else if( seqstr[i] == 'r')
- {
- nimgs = atoi( seqstr.substr(i+1, i+3).c_str() );
- DACSetChannel( 0 , &dac, 0);
- DACSetChannel( 1 , &dac, 0);
- DACSetChannel( 2 , &dac, 0);
- DACSetChannel( 3 , &dac, 0);
- SH.writeShutters(0,0,0,0);
- trigNotEyeSafe( SH, nimgs );
- //pc.printf("Num Refs: %d\n",nimgs);
- }
+
+ extTrigHandler();
+
+ }
+
- }
-
+ else if( c == 'S')
+ {
+ DVOA1 = atoi( pcstr.substr( indexArr[i] +2, indexArr[i] + 5).c_str() );
+ DVOA2 = atoi( pcstr.substr( indexArr[i] +6, indexArr[i] + 9).c_str() );
+ DVOA3 = atoi( pcstr.substr( indexArr[i] +10, indexArr[i] + 13).c_str() );
+ DVOA4 = atoi( pcstr.substr( indexArr[i] +14, indexArr[i] + 17).c_str() );
+
}
-
+
+
+
else if( c == 's' )
{
seqstr = pcstr.substr( indexArr[i] +2, indexArr[i+1] -1 );
- pc.printf("String is %s \n",seqstr.c_str());
+ //pc.printf("String is %s \n",seqstr.c_str());
}
-
-
+
+
else if( c == ';')
{
//Dumb states of everything out
//All on one line
-
+
//Shutters
pc.printf("SH1:%d SH2:%d SH3:%d SH4:%d SHRef:%d",Shut1,Shut2,Shut3,Shut4,mRefShutters.read());
-
+
//DAC
int CH1cnt;
int CH2cnt;
int CH3cnt;
int CH4cnt;
-
+
//Print State of DAC
int sts = dac.update();
int updatecnt = 0;
-
-
+
+
while( sts != 0 && updatecnt < 5)
- {
+ {
if(sts != 0)
{
sts = dac.update();
updatecnt++;
-
+
}
}
-
+
if( updatecnt >= 5)
{
pc.printf("CH1:xxxx CH2:xxxx CH3:xxxx CH4:xxxx");
@@ -772,12 +733,12 @@
(void)dac.getDACvalue(CH4cnt,3);
pc.printf("CH1:%4d CH2:%4d CH3:%4d CH4:%4d",CH1cnt,CH2cnt,CH3cnt,CH4cnt);
}
-
+
//Piping
pc.printf("4x4:%d%d%d%d%d", m4x4TTL1.read(), m4x4TTL2.read(), m4x4TTL3.read(), m4x4TTL4.read(), m4x4TTL5.read() );
pc.printf("4x5:%d%d%d%d%d\n", m4x5TTL1.read(), m4x5TTL2.read(), m4x5TTL3.read(), m4x5TTL4.read(), m4x5TTL5.read() );
}
-
+
else if( c == '+' )
{
pc.printf(",[%d%d%d%d%d,]%d%d%d%d%d", m4x4TTL1.read(), m4x4TTL2.read(), m4x4TTL3.read(), m4x4TTL4.read(), m4x4TTL5.read(), m4x5TTL1.read(), m4x5TTL2.read(), m4x5TTL3.read(), m4x5TTL4.read(), m4x5TTL5.read() );
@@ -786,21 +747,21 @@
int CH2cnt;
int CH3cnt;
int CH4cnt;
-
+
int sts = dac.update();
int updatecnt = 0;
-
-
+
+
while( sts != 0 && updatecnt < 5)
{
-
+
if(sts != 0)
{
sts = dac.update();
updatecnt++;
-
+
}
-
+
}
if( updatecnt >= 5 && sts != 0)
{
@@ -814,14 +775,12 @@
(void)dac.getDACvalue(CH4cnt,3);
pc.printf(",.0%04d,.1%04d,.2%04d,.3%04d\n",CH1cnt,CH2cnt,CH3cnt,CH4cnt);
}
-
+
}
-
-
+
}
-
-}
+
+ }
//Never Reach This
return 1;
-}
-
\ No newline at end of file
+ }