Re-commitiing with pins for F401RE setup.
Dependencies: SDFileSystem mbed
main.cpp@0:c88af26224b8, 2015-03-03 (annotated)
- 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?
User | Revision | Line number | New 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 | } |