2

Dependencies:   mbed DevInterfaces MCP4728 MCP4728setaddr I2Cinterfaces

Revision:
8:abdd660056fb
Parent:
7:e649bb2b6187
Child:
9:2d70aa45f16e
diff -r e649bb2b6187 -r abdd660056fb main.cpp
--- a/main.cpp	Mon Feb 04 14:24:10 2019 +0000
+++ b/main.cpp	Wed Feb 20 14:53:58 2019 +0000
@@ -81,6 +81,71 @@
 
 DigitalOut m4x5CLK(p20);
 
+DigitalOut mRefShutters(p30);
+
+bool Shut1 = 0;
+bool Shut2 = 0;
+bool Shut3 = 0;
+bool Shut4 = 0;
+
+
+
+
+int DACSetChannel( int chan, MCP4728* dac)
+{
+    int ret = 0;
+    char z;
+    float voltage = 0;
+    string instr;
+
+    printf("\n\rEnter Voltage \n\r");
+    while (ret == 0)
+    {
+        
+        z = pc.getc();
+        
+        
+        if( z == 13 )
+            {
+                voltage = atof( instr.c_str() );
+                
+                if(  voltage > Vdd  || voltage < 0)
+                {
+                    pc.printf("\n\r Voltage Entered Higher than Vdd Setting Voltage to Maximum\n\r");
+                }
+                else
+                {
+                        if ( dac->setVoltage(voltage,chan) )
+                        { 
+                            printf("failed to set dac value %f for channel %d\n\r",voltage,chan);
+                        }
+                        //pc.printf("Voltage set to %3fV\n\r", voltage);
+                        if( dac->update() )
+                        {
+                            printf("\n\rfailed to readback channel info \n\r");
+                        }
+                        else 
+                        {
+                                (void)dac->getVoltage(voltage,chan);//no need to test done with updat 
+                                printf(" CH%d %f[V]",chan,voltage);
+                                printf("\n\r");
+                    
+                        }
+                            
+                }
+                
+                instr.clear();
+                ret = 1;
+            }
+        else
+            {
+                pc.printf("%c",z);
+                instr.push_back(z);
+            }
+    }
+    return 1;
+}
+    
 
 
 
@@ -99,15 +164,18 @@
 
    int cnt=0;
 
+   mRefShutters = 1;
 
 
 
-pc.printf("\n\rEnter Voltage and Press Enter\n\r");
 pc.printf("Agiltron Serial Control Program\n\r");
-pc.printf("Left Square Bracket to control 4x4 Swtiching [\n\r");
-pc.printf("Right Square Bracket to control 4x5 Swtiching ]\n\r");
-pc.printf("1, 2, 3, 4 Control Shutters on 4x5 Module\n\r");
-pc.printf("DAC control press Comma\n\r");
+pc.printf("'[' 4x4 Swtiching \n\r");
+pc.printf("']' 4x5 Swtiching\n\r");
+pc.printf("1, 2, 3, 4 Toggle Single Shutters\n\r");
+pc.printf("'o' Opens all Shutters\n\r");
+pc.printf("'r' Closes all Shutters \n\r");
+pc.printf("',' 4 Channel DAC Control \n\r");
+pc.printf("'.' Single Channel DAC Control \n\r");
 
 //Set up dac for external voltage
 dac.setRefExtern();
@@ -116,10 +184,7 @@
 //Intialize shutters
     Shutter SH;
     SH.init( &SH1_1, &SH1_2, &SH2_1, &SH2_2, &SH3_1, &SH3_2, &SH4_1, &SH4_2 );
-    bool Shut1 = 0;
-    bool Shut2 = 0;
-    bool Shut3 = 0;
-    bool Shut4 = 0;
+
     SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
     
     
@@ -128,7 +193,7 @@
     DigitalOut* Arr_4x5[5] = {&m4x5TTL1, &m4x5TTL2, &m4x5TTL3, &m4x5TTL4, &m4x5TTL5 };
     
     
-    //Set straight pipes intial state
+    //Set straight pipes initial state
     m4x5TTL1 = 1;
     
     m4x4TTL1 = 1;
@@ -163,8 +228,35 @@
             SH.writeShutters(Shut1,Shut2,Shut3,Shut4);
         }
         
+        else if( c == 'u')
+        {
+            mRefShutters = 0;
+        }
         
-        else if( c == 91 ) //Left square bracket [
+        else if( c == 'y')
+        {
+            mRefShutters = 1;
+        }
+        
+        else if(c == 'o')  //Open All Shutters
+        {
+            Shut1 = 1;
+            Shut2 = 1;
+            Shut3 = 1;
+            Shut4 = 1;
+            SH.writeShutters(1,1,1,1);
+        }
+        
+        else if(c == 'r')  //Close All Shutters
+        {
+            Shut1 = 0;
+            Shut2 = 0;
+            Shut3 = 0;
+            Shut4 = 0;
+            SH.writeShutters(0,0,0,0);
+        }
+        
+        else if( c == 91 ) //Left square bracket [ 4x4 Control
         {
             //Get 5 1's or 0's for binary number
             int count = 0;
@@ -192,7 +284,7 @@
         
         
         
-        else if( c == 93 ) //Right square bracket ]
+        else if( c == 93 ) //Right square bracket ] 4x5 Control
         {
             //Get 5 1's or 0's for binary number
             int count = 0;
@@ -218,66 +310,91 @@
             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
         }
         
-else if( c == ',' )        
-{
-        pc.printf("4 Channel DAC Control Enter voltage and Press Enter\n\r");
-        int ret = 0;
-    while( ret == 0 )
-    {
-        char z = pc.getc();
-        
-        if( z == 13 )
+        else if( c == ',' ) //4 Channel DAC Control
         {
-            voltage = atof( instr.c_str() );
-            
-            if( voltage == 0 || voltage > 5.0 )
+            pc.printf("4 Channel DAC Control Enter voltage and Press Enter\n\r");
+            int ret = 0;
+            int chan = 0;
+            while( ret ==0 && chan < 4)
             {
-                pc.printf("ERROR\n\r");
-            }
+                char z = pc.getc();
+                if( z == 13 )
+                {
+                    voltage = atof( instr.c_str() );
+                    
+                    if( voltage == 0 || voltage > 5.0 )
+                    {
+                        pc.printf("ERROR\n\r");
+                    }
+                    else
+                    {
+                            if ( dac.setVoltage(voltage,chan) )
+                            { 
+                                printf("failed to set dac value %d for channel %d\n\r",cnt,chan);
+                            }
+                            //pc.printf("Voltage set to %3fV\n\r", voltage);
+                            if( dac.update() )
+                            {
+                                printf("\n\rfailed to readback channel info \n\r");
+                            }
+                            else 
+                            {
+                                    (void)dac.getVoltage(voltage,chan);//no need to test done with updat 
+                                    printf(" CH%d %f[V]",chan,voltage);
+                                    printf("\n\r");
+                                    chan++;
+                            }
+                                
+                    }
+                    if( chan == 4)
+                            {
+                                ret = 1;
+                                wait_ms(100);
+                            } 
+                    instr.clear();
+    
+                }
+                
+                else if( z == ']')
+                {
+                    for ( int cc =0 ; cc <4 ; cc++) 
+                    { 
+                        if ( dac.setDACvalue(4095,cc) )
+                        {
+                            printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
+                        }
+                    }
+                        printf("All Channels Set to 5V /n/r");
+                        ret = 1;
+                }
+                
+                else
+                {
+                    pc.printf("%c",z);
+                    instr.push_back(z);
+                }
+    }
+}
+
+
+        else if( c == '.' ) //Single Channel DAC Control
+        {
+            pc.printf("Single Channel DAC Control Press Channel Number\n\r");
+            char z = pc.getc();
+    
+            if( z == '1' || z== '2' || z == '3' || z == '4' )
+            {
+                pc.printf("Channel %c Selected",z);
+                DACSetChannel( atoi(&z) , &dac);
+            }   
             else
             {
-                for ( int cc =0 ; cc <4 ; cc++) { 
-                    if ( dac.setVoltage(voltage,cc) )
-                        printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
-                    }
-                //pc.printf("Voltage set to %3fV\n\r", voltage);
-                 if(dac.update()) printf("\n\rfailed to readback channel info \n\r");
-            else {
-                for ( int cc =0 ; cc <4 ; cc++) { 
-                 (void)dac.getVoltage(voltage,cc);//no need to test done with updat 
-                  printf(" CH%d %f[V]",cc,voltage);
-                }
-                printf("\n\r");
-                
+                pc.printf("ERROR");
             }
-            }
-            
-            instr.clear();
-            wait_ms(1200);
-            ret = 1;
-            
         }
-        
-        else if( z == ']')
-        {
-             for ( int cc =0 ; cc <4 ; cc++) { 
-               if ( dac.setDACvalue(4095,cc) )
-                   printf("failed to set dac value %d for channel %d\n\r",cnt,cc);
-                }
-                ret = 1;
-        }
-        
-        else
-        {
-            pc.printf("%c",z);
-            instr.push_back(z);
-        }
-    }
-    }
 
-    
-    // never reach this   
 }
-
- return 1;
-}
\ No newline at end of file
+    //Never Reach This
+    return 1;
+}
+    
\ No newline at end of file