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.
Revision 1:4284f27d638d, committed 2014-12-08
- Comitter:
- mbedalvaro
- Date:
- Mon Dec 08 07:03:38 2014 +0000
- Parent:
- 0:4b5874bff9bb
- Commit message:
- this is the latest code for the active markers project
Changed in this revision
| Flipper.h | Show annotated file Show diff for this revision Revisions of this file |
| main.cpp | Show annotated file Show diff for this revision Revisions of this file |
diff -r 4b5874bff9bb -r 4284f27d638d Flipper.h
--- a/Flipper.h Mon Jul 14 09:35:12 2014 +0000
+++ b/Flipper.h Mon Dec 08 07:03:38 2014 +0000
@@ -3,9 +3,9 @@
#include "mbed.h"
-#define shutterPin p21 // for tests
-#define ledPin p22 // the actual modulation of the LED source (equal to PHASE or QUAD signal every N frames)
-#define cameraTriggerPin p23
+#define ledPin p23 // the actual modulation of the LED source (equal to PHASE or QUAD signal every N frames)
+#define shutterPin p22 // for tests
+#define cameraTriggerPin p21
// A class for flip()-ing a DigitalOut using a timer
@@ -28,7 +28,7 @@
}
void start() {
- myTicker.attach_us(this, &Flipper::flip, us_interval); // the address of the object, member function, and interval
+ myTicker.attach_us(this, &Flipper::flip, (unsigned int)(0.5*us_interval)); // the address of the object, member function, and interval
}
void stop() {
@@ -58,10 +58,18 @@
NUM_STATES
};
- Trigger(PinName pin, float fps, unsigned int exposure) : _pin(pin) {
+ //Trigger(PinName pin, float fps, unsigned int exposure) : _pin(pin) {
+// _pin=1;
+// us_exposureTime=exposure;
+// us_waitingTime=(unsigned int)(1000000.0/fps-us_exposureTime);
+// framesQPToggle=2; // default number of frames before toggling between Q and P signals (delaying the Flipper signal by 90 deg).
+// QP_Mode=true;
+// }
+
+Trigger(PinName pin, unsigned int waitingtime, unsigned int exposure) : _pin(pin) {
_pin=1;
us_exposureTime=exposure;
- us_waitingTime=(unsigned int)(1000000.0/fps-us_exposureTime);
+ us_waitingTime=waitingtime;
framesQPToggle=2; // default number of frames before toggling between Q and P signals (delaying the Flipper signal by 90 deg).
QP_Mode=true;
}
@@ -70,8 +78,12 @@
framesQPToggle=numToggleQPFrames;
}
- void setFrameRate(float fps) {
- us_waitingTime=(unsigned int)(1000000.0/fps-us_exposureTime);
+ // void setFrameRate(float fps) {
+// us_waitingTime=(unsigned int)(1000000.0/fps-us_exposureTime);
+// }
+
+ void setFrameRate(unsigned int waitingtime) {
+ us_waitingTime=waitingtime;
}
void setExposure(unsigned int exposure) {
@@ -143,7 +155,7 @@
}
void start() {
- myTicker.attach_us(this, &Shutter::flip, us_interval); // the address of the object, member function, and interval
+ myTicker.attach_us(this, &Shutter::flip, (unsigned int)(0.5*us_interval)); // the address of the object, member function, and interval
}
void mixSignal(bool mode) {
diff -r 4b5874bff9bb -r 4284f27d638d main.cpp
--- a/main.cpp Mon Jul 14 09:35:12 2014 +0000
+++ b/main.cpp Mon Dec 08 07:03:38 2014 +0000
@@ -4,22 +4,27 @@
// The following parameters can be changed by serial commands:
// NOTE: program 9 on the LCC-230 gives a freq of 150Hz. If frame rate for the camera is 30fps, then the nb of cycles per frame is 150/30=5
// for 28.09, then the of cycles per frame is 150/28.09=5.339
-float CAMERA_FPS=15;//28.0915;//28.09;
-unsigned long CAMERA_TRIGGER_PERIOD=1000000.0/CAMERA_FPS;
-float EXPOSURE_TIME_FACTOR=1.0/4;
+float CAMERA_FPS=58.75;//28.0915;//28.09;
+unsigned long CAMERA_TRIGGER_PERIOD=1000000.0/CAMERA_FPS; // it is recommendable that this division gives an integer!
+float EXPOSURE_TIME_FACTOR=1.0/3;
unsigned long EXPOSURE_TIME=EXPOSURE_TIME_FACTOR*CAMERA_TRIGGER_PERIOD;
+unsigned long WAITING_TIME=CAMERA_TRIGGER_PERIOD-EXPOSURE_TIME;
-float NB_CYCLES_PER_EXPOSURE_TIME=4;//5.339;//1;//1.0*150/28; // this is the nb of cycles of the led during one camera frame
-float NB_CYCLES_PER_CAMERA_FRAME=1.0/EXPOSURE_TIME_FACTOR*NB_CYCLES_PER_EXPOSURE_TIME;
+// NOTE: since the delays (waiting time and exposure time) are in microseconds, we NEED to have an integer number of cycles per CAMERA frame...
+// (no pb if there is not an integer INSIDE the exposure time, but better to have it). Hence the "approximate" value:
+float approximate_NbCylclesExposureTime=6;
+unsigned long NB_CYCLES_PER_CAMERA_FRAME=1.0*approximate_NbCylclesExposureTime/EXPOSURE_TIME_FACTOR;
unsigned long LED_PERIOD=1000000.0/(NB_CYCLES_PER_CAMERA_FRAME*CAMERA_FPS); //in us
+// NOTE: there is no warangy this division will be integer! PLUS it must be a multiple of 2!! mmm...
unsigned int NB_FRAMES_TOGGLE_QP=1; // this is the nb of camera frames before toggling the modulation (note: there is no synchronization!)
enum SignalMode {PHASE=0, QUADRATURE, TOGGLE_PHASE_QUADRATURE};
SignalMode currentSignalMode=TOGGLE_PHASE_QUADRATURE; //NOTE: all the leds mode affected by this at the same time
-Trigger cameraTrigger(cameraTriggerPin,1.0*CAMERA_FPS,(unsigned int)EXPOSURE_TIME);
+//Trigger cameraTrigger(cameraTriggerPin,1.0*CAMERA_FPS,(unsigned int)EXPOSURE_TIME);
+Trigger cameraTrigger(cameraTriggerPin,(unsigned int)WAITING_TIME-27,(unsigned int)EXPOSURE_TIME);
Flipper ledSource(ledPin, LED_PERIOD);
Shutter lcdShutter(shutterPin, LED_PERIOD);
@@ -36,9 +41,9 @@
ledSource.start();
- // add some delay:
- wait_us(5000);
- lcdShutter.mixSignal(false);
+ // add some delay?
+ // wait_us(100);
+ lcdShutter.mixSignal(true);
lcdShutter.start();
// spin in a main loop. flipper will interrupt it to call flip
@@ -87,6 +92,15 @@
incomingValue[indexString]=0; // termination for the string
indexString=0;
cameraTrigger.setExposure(atoi(incomingValue));
+ } else if (incomingByte == 'L') { // get the LED PERIOD (to adjust the real LCD shutter)
+ // incomingValue[indexString]=0; // termination for the string
+ // indexString=0;
+ pc.printf("\n\nCAMERA FPS: %f fps\n", CAMERA_FPS);
+ pc.printf("CAMERA TRIGGER PERIOD: %i us\n", CAMERA_TRIGGER_PERIOD);
+ pc.printf("EXPOSURE TIME: %i us\n", EXPOSURE_TIME);
+ pc.printf("\nLED PERIOD: %i us\n", LED_PERIOD);
+ pc.printf("LED FREQ: %f Hz\n", 1.0/LED_PERIOD*1000000);
+ pc.printf("TOGGLE QP every: %i frames\n", NB_FRAMES_TOGGLE_QP);
}
}