Re-commitiing with pins for F401RE setup.

Dependencies:   SDFileSystem mbed

Committer:
mcgoverna
Date:
Tue Mar 03 22:24:57 2015 +0000
Revision:
0:c88af26224b8
Child:
1:43abfc6827c6
camera sd code;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
mcgoverna 0:c88af26224b8 1 /*
mcgoverna 0:c88af26224b8 2 Porting example Arduino code for camera module.
mcgoverna 0:c88af26224b8 3 http://learn.linksprite.com/jpeg-camera/tutorial-of-using-linksprite-2mp-uart-jpeg-camera-with-arduino/
mcgoverna 0:c88af26224b8 4
mcgoverna 0:c88af26224b8 5 */
mcgoverna 0:c88af26224b8 6
mcgoverna 0:c88af26224b8 7 #include "mbed.h"
mcgoverna 0:c88af26224b8 8 #include "SDFileSystem.h"
mcgoverna 0:c88af26224b8 9
mcgoverna 0:c88af26224b8 10 //int csPin = 4;
mcgoverna 0:c88af26224b8 11
mcgoverna 0:c88af26224b8 12 Serial mySerial(D0, D1); // Nucleo D0 is rx and D1 is tx for camera
mcgoverna 0:c88af26224b8 13
mcgoverna 0:c88af26224b8 14 byte ZERO = 0x00;
mcgoverna 0:c88af26224b8 15 byte incomingbyte;
mcgoverna 0:c88af26224b8 16 long int j=0,k=0,count=0,i=0x0000;
mcgoverna 0:c88af26224b8 17 uint8_t MH,ML;
mcgoverna 0:c88af26224b8 18 boolean EndFlag=0;
mcgoverna 0:c88af26224b8 19 File myFile;
mcgoverna 0:c88af26224b8 20
mcgoverna 0:c88af26224b8 21 void SendResetCmd()
mcgoverna 0:c88af26224b8 22 {
mcgoverna 0:c88af26224b8 23 mySerial.printf(0x56);
mcgoverna 0:c88af26224b8 24 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 25 mySerial.printf(0x26);
mcgoverna 0:c88af26224b8 26 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 27 }
mcgoverna 0:c88af26224b8 28
mcgoverna 0:c88af26224b8 29 /*************************************/
mcgoverna 0:c88af26224b8 30 /* Set ImageSize :
mcgoverna 0:c88af26224b8 31 /* <1> 0x22 : 160*120
mcgoverna 0:c88af26224b8 32 /* <2> 0x11 : 320*240
mcgoverna 0:c88af26224b8 33 /* <3> 0x00 : 640*480
mcgoverna 0:c88af26224b8 34 /* <4> 0x1D : 800*600
mcgoverna 0:c88af26224b8 35 /* <5> 0x1C : 1024*768
mcgoverna 0:c88af26224b8 36 /* <6> 0x1B : 1280*960
mcgoverna 0:c88af26224b8 37 /* <7> 0x21 : 1600*1200
mcgoverna 0:c88af26224b8 38 /************************************/
mcgoverna 0:c88af26224b8 39 void SetImageSizeCmd(byte Size)
mcgoverna 0:c88af26224b8 40 {
mcgoverna 0:c88af26224b8 41 mySerial.printf(0x56);
mcgoverna 0:c88af26224b8 42 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 43 mySerial.printf(0x54);
mcgoverna 0:c88af26224b8 44 mySerial.printf(0x01);
mcgoverna 0:c88af26224b8 45 mySerial.printf(Size);
mcgoverna 0:c88af26224b8 46 }
mcgoverna 0:c88af26224b8 47
mcgoverna 0:c88af26224b8 48 /*************************************/
mcgoverna 0:c88af26224b8 49 /* Set BaudRate :
mcgoverna 0:c88af26224b8 50 /* <1> 0xAE : 9600
mcgoverna 0:c88af26224b8 51 /* <2> 0x2A : 38400
mcgoverna 0:c88af26224b8 52 /* <3> 0x1C : 57600
mcgoverna 0:c88af26224b8 53 /* <4> 0x0D : 115200
mcgoverna 0:c88af26224b8 54 /* <5> 0xAE : 128000
mcgoverna 0:c88af26224b8 55 /* <6> 0x56 : 256000
mcgoverna 0:c88af26224b8 56 /*************************************/
mcgoverna 0:c88af26224b8 57 void SetBaudRateCmd(byte baudrate)
mcgoverna 0:c88af26224b8 58 {
mcgoverna 0:c88af26224b8 59 mySerial.printf(0x56);
mcgoverna 0:c88af26224b8 60 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 61 mySerial.printf(0x24);
mcgoverna 0:c88af26224b8 62 mySerial.printf(0x03);
mcgoverna 0:c88af26224b8 63 mySerial.printf(0x01);
mcgoverna 0:c88af26224b8 64 mySerial.printf(baudrate);
mcgoverna 0:c88af26224b8 65 }
mcgoverna 0:c88af26224b8 66
mcgoverna 0:c88af26224b8 67 void SendTakePhotoCmd()
mcgoverna 0:c88af26224b8 68 {
mcgoverna 0:c88af26224b8 69 mySerial.printf(0x56);
mcgoverna 0:c88af26224b8 70 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 71 mySerial.printf(0x36);
mcgoverna 0:c88af26224b8 72 mySerial.printf(0x01);
mcgoverna 0:c88af26224b8 73 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 74 }
mcgoverna 0:c88af26224b8 75
mcgoverna 0:c88af26224b8 76 void SendReadDataCmd()
mcgoverna 0:c88af26224b8 77 {
mcgoverna 0:c88af26224b8 78 MH=i/0x100;
mcgoverna 0:c88af26224b8 79 ML=i%0x100;
mcgoverna 0:c88af26224b8 80 mySerial.printf(0x56);
mcgoverna 0:c88af26224b8 81 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 82 mySerial.printf(0x32);
mcgoverna 0:c88af26224b8 83 mySerial.printf(0x0c);
mcgoverna 0:c88af26224b8 84 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 85 mySerial.printf(0x0a);
mcgoverna 0:c88af26224b8 86 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 87 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 88 mySerial.printf(MH);
mcgoverna 0:c88af26224b8 89 mySerial.printf(ML);
mcgoverna 0:c88af26224b8 90 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 91 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 92 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 93 mySerial.printf(0x20);
mcgoverna 0:c88af26224b8 94 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 95 mySerial.printf(0x0a);
mcgoverna 0:c88af26224b8 96 i+=0x20;
mcgoverna 0:c88af26224b8 97 }
mcgoverna 0:c88af26224b8 98
mcgoverna 0:c88af26224b8 99 void StopTakePhotoCmd()
mcgoverna 0:c88af26224b8 100 {
mcgoverna 0:c88af26224b8 101 mySerial.printf(0x56);
mcgoverna 0:c88af26224b8 102 mySerial.printf(ZERO);
mcgoverna 0:c88af26224b8 103 mySerial.printf(0x36);
mcgoverna 0:c88af26224b8 104 mySerial.printf(0x01);
mcgoverna 0:c88af26224b8 105 mySerial.printf(0x03);
mcgoverna 0:c88af26224b8 106 }
mcgoverna 0:c88af26224b8 107
mcgoverna 0:c88af26224b8 108 void setup()
mcgoverna 0:c88af26224b8 109 {
mcgoverna 0:c88af26224b8 110 //pinMode(csPin, OUTPUT);
mcgoverna 0:c88af26224b8 111 //Serial.begin(115200);
mcgoverna 0:c88af26224b8 112 //while (!Serial) {
mcgoverna 0:c88af26224b8 113 //; // wait for serial port to connect. Needed for Leonardo only
mcgoverna 0:c88af26224b8 114 //}
mcgoverna 0:c88af26224b8 115
mcgoverna 0:c88af26224b8 116 //Serial.print("Initializing SD card...");
mcgoverna 0:c88af26224b8 117 // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
mcgoverna 0:c88af26224b8 118 // Note that even if it's not used as the CS pin, the hardware SS pin
mcgoverna 0:c88af26224b8 119 // (10 on most Arduino boards, 53 on the Mega) must be left as an output
mcgoverna 0:c88af26224b8 120 // or the SD library functions will not work.
mcgoverna 0:c88af26224b8 121 //if (!SD.begin(4)) {
mcgoverna 0:c88af26224b8 122 //Serial.println("initialization failed!");
mcgoverna 0:c88af26224b8 123 //return;
mcgoverna 0:c88af26224b8 124 }
mcgoverna 0:c88af26224b8 125 //Serial.println("initialization done.");
mcgoverna 0:c88af26224b8 126 //Serial.println("please waiting ....");
mcgoverna 0:c88af26224b8 127 //}
mcgoverna 0:c88af26224b8 128
mcgoverna 0:c88af26224b8 129 void loop()
mcgoverna 0:c88af26224b8 130 {
mcgoverna 0:c88af26224b8 131 byte a[32];
mcgoverna 0:c88af26224b8 132 int ii;
mcgoverna 0:c88af26224b8 133 mySerial.begin(115200);
mcgoverna 0:c88af26224b8 134 delay(200);
mcgoverna 0:c88af26224b8 135 SendResetCmd();//Wait 2-3 second to send take picture command
mcgoverna 0:c88af26224b8 136 delay(2000);
mcgoverna 0:c88af26224b8 137 SetBaudRateCmd(0x2A);
mcgoverna 0:c88af26224b8 138 delay(100);
mcgoverna 0:c88af26224b8 139 mySerial.begin(38400);
mcgoverna 0:c88af26224b8 140 delay(100);
mcgoverna 0:c88af26224b8 141 SetImageSizeCmd(0x21);
mcgoverna 0:c88af26224b8 142 delay(100);
mcgoverna 0:c88af26224b8 143 SendTakePhotoCmd();
mcgoverna 0:c88af26224b8 144 delay(3000);
mcgoverna 0:c88af26224b8 145 while(mySerial.available()>0)
mcgoverna 0:c88af26224b8 146 {
mcgoverna 0:c88af26224b8 147 incomingbyte=mySerial.read();
mcgoverna 0:c88af26224b8 148 }
mcgoverna 0:c88af26224b8 149 myFile = SD.open("pic.jpg", FILE_WRITE); //<strong><span style="color: #ff0000;">The file name should not be too long</span></strong>
mcgoverna 0:c88af26224b8 150 while(!EndFlag)
mcgoverna 0:c88af26224b8 151 {
mcgoverna 0:c88af26224b8 152 j=0;
mcgoverna 0:c88af26224b8 153 k=0;
mcgoverna 0:c88af26224b8 154 count=0;
mcgoverna 0:c88af26224b8 155 SendReadDataCmd();
mcgoverna 0:c88af26224b8 156 delay(5);
mcgoverna 0:c88af26224b8 157 while(mySerial.available()>0)
mcgoverna 0:c88af26224b8 158 {
mcgoverna 0:c88af26224b8 159 incomingbyte=mySerial.read();
mcgoverna 0:c88af26224b8 160 k++;
mcgoverna 0:c88af26224b8 161 delayMicroseconds(100);
mcgoverna 0:c88af26224b8 162 if((k>5)&&(j<32)&&(!EndFlag))
mcgoverna 0:c88af26224b8 163 {
mcgoverna 0:c88af26224b8 164 a[j]=incomingbyte;
mcgoverna 0:c88af26224b8 165 if((a[j-1]==0xFF)&&(a[j]==0xD9)) //tell if the picture is finished
mcgoverna 0:c88af26224b8 166 EndFlag=1;
mcgoverna 0:c88af26224b8 167 j++;
mcgoverna 0:c88af26224b8 168 count++;
mcgoverna 0:c88af26224b8 169 }
mcgoverna 0:c88af26224b8 170 }
mcgoverna 0:c88af26224b8 171 /*
mcgoverna 0:c88af26224b8 172 for(j=0;j<count;j++)
mcgoverna 0:c88af26224b8 173 {
mcgoverna 0:c88af26224b8 174 if(a[j]<0x10) Serial.print("0");
mcgoverna 0:c88af26224b8 175 Serial.print(a[j],HEX); // observe the image through serial port
mcgoverna 0:c88af26224b8 176 Serial.print(" ");
mcgoverna 0:c88af26224b8 177 }
mcgoverna 0:c88af26224b8 178 */
mcgoverna 0:c88af26224b8 179 for(ii=0; ii<count; ii++)
mcgoverna 0:c88af26224b8 180 myFile.write(a[ii]);
mcgoverna 0:c88af26224b8 181 //Serial.println();
mcgoverna 0:c88af26224b8 182 }
mcgoverna 0:c88af26224b8 183 myFile.close();
mcgoverna 0:c88af26224b8 184 //Serial.print("Finished writing data to file");
mcgoverna 0:c88af26224b8 185 while(1);
mcgoverna 0:c88af26224b8 186 }