Example controlling galvanomirrors (X and Y) using the spi DAC MCP4922 and the new platform FRDM_K64F

Dependencies:   mbed

Revision:
3:89f592efbe84
Parent:
2:383b2acec6e4
Child:
4:1428775752f7
--- a/laserProjectorHardware/laserProjectorHardware.cpp	Mon May 26 08:37:38 2014 +0000
+++ b/laserProjectorHardware/laserProjectorHardware.cpp	Wed Jun 04 09:47:04 2014 +0000
@@ -8,15 +8,20 @@
 
  SPI spiDAC(MOSI_PIN, MISO_PIN, SCK_PIN); // mosi, miso, sclk
  DigitalOut csDAC(CS_DAC_MIRRORS);
-       
- DigitalOut Laser_Red(LASER_RED_PIN); // NOTE: this is NOT the lock in sensing laser (actually, not used yet)
+ 
+ PwmOut Laser_Lockin(LASER_LOCKIN_PIN); 
+ DigitalOut Laser_Red(LASER_RED_PIN);
  DigitalOut Laser_Green(LASER_GREEN_PIN);
  DigitalOut Laser_Blue(LASER_BLUE_PIN);
 
 void HardwareIO::init(void) {
-    Laser_Red = 1; // note: this is not the lockin-laser! it is also negated
-    Laser_Green = 0;
-    Laser_Blue = 0;
+    
+    setLockinFreq(LOCKIN_FREQUENCY);
+    setLockinPower(1);
+    
+    setRedPower(0);
+    setGreenPower(0);
+    setBluePower(0);
     
     //Serial Communication setup:
     pc.baud(115200);//
@@ -60,12 +65,21 @@
  csDAC = 1;
 }
 
+void HardwareIO::setLockinFreq(int valueHz) {  
+Laser_Lockin.period_ms(int(1000.0/valueHz)); 
+}
+
+void HardwareIO::setLockinPower(int value) { //note: 0 means off, and 1 or >0 means 50%
+  if (value>0) Laser_Lockin.write(0.5); 
+  else Laser_Lockin.write(0); 
+}
+
 void HardwareIO::setRedPower(int powerValue){
     if(powerValue > 0){
-        Laser_Red = 0; // att! it's negated for the laser diode module "vector"
+        Laser_Red = 1; 
     }
     else{
-        Laser_Red = 1;
+        Laser_Red = 0;
     }
 }
 void HardwareIO::setGreenPower(int powerValue){
@@ -86,7 +100,7 @@
 }
 void HardwareIO::setRGBPower(unsigned char color) {
     //lockin.setLaserPower(color&0x04>0? false : true);
-    Laser_Red=color&0x04>>2;
+    Laser_Red=(color&0x04)>>2;
     Laser_Green=(color&0x02)>>1;
     Laser_Blue =color&0x01;
 }