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

Dependencies:   mbed

Committer:
mbedalvaro
Date:
Mon May 26 08:37:38 2014 +0000
Revision:
2:383b2acec6e4
Parent:
1:4be6abc4ed43
Child:
3:89f592efbe84
added scan function;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mbedalvaro 0:26b228dde70c 1 #include "mbed.h"
mbedalvaro 0:26b228dde70c 2 #include "laserProjectorHardware.h"
mbedalvaro 0:26b228dde70c 3
mbedalvaro 0:26b228dde70c 4 DigitalOut myled(LED3);
mbedalvaro 0:26b228dde70c 5
mbedalvaro 0:26b228dde70c 6 void processSerial();
mbedalvaro 0:26b228dde70c 7
mbedalvaro 0:26b228dde70c 8 unsigned int X, Y; // position of the mirrors (note: in fact, azimuth and elevation)
mbedalvaro 0:26b228dde70c 9 bool newPositionReady=false;
mbedalvaro 0:26b228dde70c 10
mbedalvaro 2:383b2acec6e4 11 unsigned long counter=0;
mbedalvaro 2:383b2acec6e4 12
mbedalvaro 0:26b228dde70c 13 int main() {
mbedalvaro 0:26b228dde70c 14
mbedalvaro 0:26b228dde70c 15 // SETUP: --------------------------------------------------------------------------------------------
mbedalvaro 0:26b228dde70c 16 IO.init(); // note: serial speed can be changed by checking in the hardwareIO.cpp initialization
mbedalvaro 0:26b228dde70c 17
mbedalvaro 0:26b228dde70c 18 // Set displaying laser powers:
mbedalvaro 0:26b228dde70c 19 IO.setRedPower(1);//turn on the red (displaying) laser
mbedalvaro 0:26b228dde70c 20 IO.setGreenPower(0);
mbedalvaro 0:26b228dde70c 21 IO.setBluePower(0);
mbedalvaro 0:26b228dde70c 22
mbedalvaro 0:26b228dde70c 23 wait_ms(100);
mbedalvaro 0:26b228dde70c 24
mbedalvaro 0:26b228dde70c 25 Y = CENTER_AD_MIRROR_X;
mbedalvaro 0:26b228dde70c 26 X = CENTER_AD_MIRROR_Y;
mbedalvaro 0:26b228dde70c 27 IO.writeOutXY(X,Y);
mbedalvaro 0:26b228dde70c 28
mbedalvaro 0:26b228dde70c 29 // MAIN LOOP: --------------------------------------------------------------------------------------------
mbedalvaro 1:4be6abc4ed43 30 while(1) {
mbedalvaro 1:4be6abc4ed43 31
mbedalvaro 1:4be6abc4ed43 32 // myled=0;IO.setRedPower(1);
mbedalvaro 1:4be6abc4ed43 33 // wait_ms(1000);
mbedalvaro 1:4be6abc4ed43 34 // myled=1;IO.setRedPower(0);
mbedalvaro 1:4be6abc4ed43 35 // wait_ms(1000);
mbedalvaro 1:4be6abc4ed43 36
mbedalvaro 2:383b2acec6e4 37 // Y = CENTER_AD_MIRROR_X+1000*cos(1.0*counter/10);
mbedalvaro 2:383b2acec6e4 38 // X = CENTER_AD_MIRROR_Y+800*sin(1.0*counter/15);
mbedalvaro 2:383b2acec6e4 39 // IO.writeOutXY(X,Y);
mbedalvaro 2:383b2acec6e4 40 // counter++;
mbedalvaro 2:383b2acec6e4 41
mbedalvaro 2:383b2acec6e4 42
mbedalvaro 2:383b2acec6e4 43 //IO.drawCircle(X, Y, 1000, 200);
mbedalvaro 2:383b2acec6e4 44
mbedalvaro 0:26b228dde70c 45 processSerial();
mbedalvaro 0:26b228dde70c 46 if (newPositionReady) {
mbedalvaro 2:383b2acec6e4 47 IO.writeOutXY(X,Y);
mbedalvaro 2:383b2acec6e4 48 //IO.drawCircle(X, Y, 1000, 20);
mbedalvaro 0:26b228dde70c 49 newPositionReady=false;
mbedalvaro 0:26b228dde70c 50 }
mbedalvaro 0:26b228dde70c 51 }
mbedalvaro 0:26b228dde70c 52 }
mbedalvaro 0:26b228dde70c 53
mbedalvaro 0:26b228dde70c 54 // --------------------------------------------------------------------------------------------
mbedalvaro 0:26b228dde70c 55 // String to store ALPHANUMERIC DATA (i.e., integers, floating point numbers, unsigned ints, etc represented as DEC) sent wirelessly:
mbedalvaro 0:26b228dde70c 56 char stringData[24]; // note: an integer is two bytes long, represented with a maximum of 5 digits, but we may send floats or unsigned int...
mbedalvaro 0:26b228dde70c 57 int indexStringData=0;//position of the byte in the string
mbedalvaro 0:26b228dde70c 58
mbedalvaro 0:26b228dde70c 59 void processSerial() {
mbedalvaro 1:4be6abc4ed43 60
mbedalvaro 1:4be6abc4ed43 61 while(pc.readable()>0) {
mbedalvaro 1:4be6abc4ed43 62
mbedalvaro 0:26b228dde70c 63
mbedalvaro 0:26b228dde70c 64 char val =pc.getc();
mbedalvaro 0:26b228dde70c 65
mbedalvaro 0:26b228dde70c 66 // Save ASCII numeric characters (ASCII 0 - 9) on stringData:
mbedalvaro 0:26b228dde70c 67 if ((val >= '0') && (val <= '9')){ // this is 45 to 57 (included)
mbedalvaro 0:26b228dde70c 68 stringData[indexStringData] = val;
mbedalvaro 0:26b228dde70c 69 indexStringData++;
mbedalvaro 1:4be6abc4ed43 70
mbedalvaro 0:26b228dde70c 71 }
mbedalvaro 0:26b228dde70c 72
mbedalvaro 0:26b228dde70c 73 // X value?
mbedalvaro 0:26b228dde70c 74 else if (val=='X') {
mbedalvaro 0:26b228dde70c 75 stringData[indexStringData] = 0 ;
mbedalvaro 0:26b228dde70c 76 X=atoi(stringData);
mbedalvaro 0:26b228dde70c 77 indexStringData=0;
mbedalvaro 0:26b228dde70c 78 }
mbedalvaro 0:26b228dde70c 79
mbedalvaro 0:26b228dde70c 80 // Y value?
mbedalvaro 0:26b228dde70c 81 else if (val=='Y') {
mbedalvaro 0:26b228dde70c 82 stringData[indexStringData] = 0 ;
mbedalvaro 1:4be6abc4ed43 83 Y=atoi(stringData);
mbedalvaro 0:26b228dde70c 84 indexStringData=0;
mbedalvaro 0:26b228dde70c 85 newPositionReady=true;
mbedalvaro 0:26b228dde70c 86 }
mbedalvaro 1:4be6abc4ed43 87
mbedalvaro 1:4be6abc4ed43 88 else if (val=='L') {
mbedalvaro 1:4be6abc4ed43 89 stringData[indexStringData] = 0 ;
mbedalvaro 1:4be6abc4ed43 90 if(atoi(stringData)>0) IO.setRedPower(1); else IO.setRedPower(0);
mbedalvaro 1:4be6abc4ed43 91 indexStringData=0;
mbedalvaro 1:4be6abc4ed43 92 }
mbedalvaro 0:26b228dde70c 93
mbedalvaro 2:383b2acec6e4 94 else if (val=='S') {
mbedalvaro 2:383b2acec6e4 95 stringData[indexStringData] = 0 ;
mbedalvaro 2:383b2acec6e4 96 IO.showLimitsMirrors(int(atoi(stringData)));
mbedalvaro 2:383b2acec6e4 97 indexStringData=0;
mbedalvaro 2:383b2acec6e4 98 }
mbedalvaro 2:383b2acec6e4 99
mbedalvaro 0:26b228dde70c 100 }
mbedalvaro 0:26b228dde70c 101 }