S11059-02DT

Dependencies:   HMC6352 mbed

Committer:
lilac0112_1
Date:
Tue Apr 14 07:28:02 2015 +0000
Revision:
1:eabfa27c9374
Parent:
0:e2155c63b32b
Child:
2:059b9459d344
false

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lilac0112_1 0:e2155c63b32b 1 #include "mbed.h"
lilac0112_1 0:e2155c63b32b 2
lilac0112_1 0:e2155c63b32b 3 DigitalOut Led(LED1);
lilac0112_1 0:e2155c63b32b 4 DigitalOut Val(LED2);
lilac0112_1 0:e2155c63b32b 5 Serial pc(USBTX,USBRX);
lilac0112_1 1:eabfa27c9374 6 I2C Sensor(p28,p27);
lilac0112_1 0:e2155c63b32b 7
lilac0112_1 0:e2155c63b32b 8 #define DEVICE_ADDRESS 0x2A
lilac0112_1 0:e2155c63b32b 9 #define CONTROL_REG 0x00
lilac0112_1 0:e2155c63b32b 10 #define TIMING_REG_H 0x01
lilac0112_1 0:e2155c63b32b 11 #define TIMING_REG_L 0x02
lilac0112_1 0:e2155c63b32b 12
lilac0112_1 0:e2155c63b32b 13 uint16_t red = 0;
lilac0112_1 0:e2155c63b32b 14 uint16_t green = 0;
lilac0112_1 0:e2155c63b32b 15 uint16_t blue = 0;
lilac0112_1 0:e2155c63b32b 16 uint16_t IR = 0;
lilac0112_1 0:e2155c63b32b 17
lilac0112_1 0:e2155c63b32b 18 char address=DEVICE_ADDRESS;
lilac0112_1 0:e2155c63b32b 19 char cmd[3]={
lilac0112_1 0:e2155c63b32b 20 CONTROL_REG
lilac0112_1 0:e2155c63b32b 21 ,TIMING_REG_H
lilac0112_1 0:e2155c63b32b 22 ,TIMING_REG_L
lilac0112_1 0:e2155c63b32b 23 };
lilac0112_1 0:e2155c63b32b 24 char ord[2]={};
lilac0112_1 0:e2155c63b32b 25 char data[2]={};
lilac0112_1 0:e2155c63b32b 26 char data_h[1]={};
lilac0112_1 0:e2155c63b32b 27 char data_l[1]={};
lilac0112_1 0:e2155c63b32b 28
lilac0112_1 0:e2155c63b32b 29 void led_blink(){
lilac0112_1 0:e2155c63b32b 30 Led=1;
lilac0112_1 0:e2155c63b32b 31 wait_ms(10);
lilac0112_1 0:e2155c63b32b 32 Led=0;
lilac0112_1 0:e2155c63b32b 33 }
lilac0112_1 0:e2155c63b32b 34
lilac0112_1 0:e2155c63b32b 35 void setManualtGain(uint16_t ex_time)
lilac0112_1 0:e2155c63b32b 36 {
lilac0112_1 0:e2155c63b32b 37 char reg[1]={0};
lilac0112_1 0:e2155c63b32b 38
lilac0112_1 0:e2155c63b32b 39 reg[0] =(ex_time >>= 8);
lilac0112_1 0:e2155c63b32b 40 Sensor.write(address, reg, 1);
lilac0112_1 0:e2155c63b32b 41 reg[0] |= ex_time;
lilac0112_1 0:e2155c63b32b 42 Sensor.write(address, reg, 1);
lilac0112_1 0:e2155c63b32b 43 }
lilac0112_1 0:e2155c63b32b 44
lilac0112_1 0:e2155c63b32b 45 void getRGB()
lilac0112_1 0:e2155c63b32b 46 {
lilac0112_1 0:e2155c63b32b 47
lilac0112_1 0:e2155c63b32b 48 /* //manual exposure mode
lilac0112_1 0:e2155c63b32b 49
lilac0112_1 0:e2155c63b32b 50 setManualtGain(100);
lilac0112_1 0:e2155c63b32b 51
lilac0112_1 0:e2155c63b32b 52 ord[0]=cmd[0];
lilac0112_1 0:e2155c63b32b 53 Sensor.write(address, ord, 1);
lilac0112_1 0:e2155c63b32b 54
lilac0112_1 0:e2155c63b32b 55 ord[0]=0x84;// ADC reset LowGain wakeup
lilac0112_1 0:e2155c63b32b 56 Sensor.write(address, ord, 1);
lilac0112_1 0:e2155c63b32b 57
lilac0112_1 0:e2155c63b32b 58 ord[0]=cmd[0];
lilac0112_1 0:e2155c63b32b 59 Sensor.write(address, ord, 1);
lilac0112_1 0:e2155c63b32b 60
lilac0112_1 0:e2155c63b32b 61 ord[0]=0x04;//start
lilac0112_1 0:e2155c63b32b 62 Sensor.write(address, ord, 1);
lilac0112_1 0:e2155c63b32b 63
lilac0112_1 0:e2155c63b32b 64 */
lilac0112_1 0:e2155c63b32b 65
lilac0112_1 0:e2155c63b32b 66 //preset gain mode exposure time (each color ch)
lilac0112_1 0:e2155c63b32b 67 // 00 = 87.5us
lilac0112_1 0:e2155c63b32b 68 // 01= 1.4ms
lilac0112_1 0:e2155c63b32b 69 // 10= 22.4ms
lilac0112_1 0:e2155c63b32b 70 // 11= 179.2ms
lilac0112_1 0:e2155c63b32b 71
lilac0112_1 1:eabfa27c9374 72 /*
lilac0112_1 1:eabfa27c9374 73 Sensor.start();
lilac0112_1 1:eabfa27c9374 74
lilac0112_1 1:eabfa27c9374 75 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 76 Val = Sensor.write(0x00);
lilac0112_1 1:eabfa27c9374 77 Val = Sensor.write(0x84);
lilac0112_1 1:eabfa27c9374 78
lilac0112_1 1:eabfa27c9374 79 Sensor.stop();
lilac0112_1 1:eabfa27c9374 80
lilac0112_1 1:eabfa27c9374 81 Sensor.start();
lilac0112_1 1:eabfa27c9374 82
lilac0112_1 1:eabfa27c9374 83 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 84 Val = Sensor.write(0x00);
lilac0112_1 1:eabfa27c9374 85 Val = Sensor.write(0x04);
lilac0112_1 1:eabfa27c9374 86
lilac0112_1 1:eabfa27c9374 87 Sensor.stop();
lilac0112_1 1:eabfa27c9374 88
lilac0112_1 1:eabfa27c9374 89
lilac0112_1 1:eabfa27c9374 90 wait_ms(180*4); //total exposure time
lilac0112_1 1:eabfa27c9374 91 */
lilac0112_1 0:e2155c63b32b 92
lilac0112_1 0:e2155c63b32b 93 Sensor.start();
lilac0112_1 0:e2155c63b32b 94
lilac0112_1 1:eabfa27c9374 95 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 96 Val = Sensor.write(0x00);
lilac0112_1 1:eabfa27c9374 97 Val = Sensor.write(0x89);
lilac0112_1 1:eabfa27c9374 98
lilac0112_1 1:eabfa27c9374 99 //Sensor.stop();
lilac0112_1 1:eabfa27c9374 100
lilac0112_1 1:eabfa27c9374 101 Sensor.start();
lilac0112_1 1:eabfa27c9374 102
lilac0112_1 1:eabfa27c9374 103 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 104 Val = Sensor.write(0x00);
lilac0112_1 1:eabfa27c9374 105 Val = Sensor.write(0x09);
lilac0112_1 1:eabfa27c9374 106
lilac0112_1 1:eabfa27c9374 107 Sensor.stop();
lilac0112_1 1:eabfa27c9374 108
lilac0112_1 1:eabfa27c9374 109
lilac0112_1 1:eabfa27c9374 110
lilac0112_1 0:e2155c63b32b 111
lilac0112_1 0:e2155c63b32b 112
lilac0112_1 1:eabfa27c9374 113 Sensor.start();
lilac0112_1 1:eabfa27c9374 114
lilac0112_1 1:eabfa27c9374 115 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 116 Val = Sensor.write(0x03);
lilac0112_1 1:eabfa27c9374 117 Val = Sensor.write(0x00);
lilac0112_1 1:eabfa27c9374 118
lilac0112_1 1:eabfa27c9374 119 //Sensor.stop();
lilac0112_1 1:eabfa27c9374 120
lilac0112_1 1:eabfa27c9374 121 Sensor.start();
lilac0112_1 1:eabfa27c9374 122
lilac0112_1 1:eabfa27c9374 123 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 124 Val = Sensor.write(0x04);
lilac0112_1 1:eabfa27c9374 125 Val = Sensor.write(0x00);
lilac0112_1 1:eabfa27c9374 126
lilac0112_1 1:eabfa27c9374 127 Sensor.stop();
lilac0112_1 1:eabfa27c9374 128
lilac0112_1 1:eabfa27c9374 129 //wait_ms(5.6*4); //total exposure time
lilac0112_1 0:e2155c63b32b 130
lilac0112_1 0:e2155c63b32b 131 led_blink();
lilac0112_1 0:e2155c63b32b 132
lilac0112_1 0:e2155c63b32b 133
lilac0112_1 0:e2155c63b32b 134 Sensor.start();
lilac0112_1 0:e2155c63b32b 135
lilac0112_1 1:eabfa27c9374 136 Val = Sensor.write(address&0xFE);
lilac0112_1 1:eabfa27c9374 137 Val = Sensor.write(0x03);
lilac0112_1 0:e2155c63b32b 138
lilac0112_1 1:eabfa27c9374 139 //Sensor.stop();
lilac0112_1 1:eabfa27c9374 140
lilac0112_1 1:eabfa27c9374 141 Sensor.start();
lilac0112_1 1:eabfa27c9374 142
lilac0112_1 1:eabfa27c9374 143 Val = Sensor.write(address|0x01);
lilac0112_1 0:e2155c63b32b 144
lilac0112_1 0:e2155c63b32b 145 //read data
lilac0112_1 0:e2155c63b32b 146
lilac0112_1 0:e2155c63b32b 147 data_h[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 148 data_l[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 149
lilac0112_1 0:e2155c63b32b 150 red = (uint8_t)(data_h[0])<<8 | (uint8_t)(data_l[0]);
lilac0112_1 0:e2155c63b32b 151
lilac0112_1 0:e2155c63b32b 152 data_h[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 153 data_l[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 154
lilac0112_1 0:e2155c63b32b 155 green = (uint8_t)(data_h[0])<<8 | (uint8_t)(data_l[0]);
lilac0112_1 0:e2155c63b32b 156
lilac0112_1 0:e2155c63b32b 157 data_h[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 158 data_l[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 159
lilac0112_1 0:e2155c63b32b 160 blue = (uint8_t)(data_h[0])<<8 | (uint8_t)(data_l[0]);
lilac0112_1 0:e2155c63b32b 161
lilac0112_1 0:e2155c63b32b 162 data_h[0] = Sensor.read(false);
lilac0112_1 0:e2155c63b32b 163 data_l[0] = Sensor.read(true);
lilac0112_1 0:e2155c63b32b 164
lilac0112_1 0:e2155c63b32b 165 IR = (uint8_t)(data_h[0])<<8 | (uint8_t)(data_l[0]);
lilac0112_1 0:e2155c63b32b 166
lilac0112_1 0:e2155c63b32b 167 Sensor.stop();
lilac0112_1 0:e2155c63b32b 168
lilac0112_1 0:e2155c63b32b 169 return;
lilac0112_1 0:e2155c63b32b 170 }
lilac0112_1 0:e2155c63b32b 171
lilac0112_1 0:e2155c63b32b 172 int main()
lilac0112_1 0:e2155c63b32b 173 {
lilac0112_1 1:eabfa27c9374 174 //Sensor.frequency(10000);
lilac0112_1 0:e2155c63b32b 175 Led=0;
lilac0112_1 0:e2155c63b32b 176 led_blink();
lilac0112_1 0:e2155c63b32b 177
lilac0112_1 0:e2155c63b32b 178 while(1)
lilac0112_1 0:e2155c63b32b 179 {
lilac0112_1 0:e2155c63b32b 180 getRGB();
lilac0112_1 0:e2155c63b32b 181
lilac0112_1 0:e2155c63b32b 182 pc.printf("Red = %4d, Green = %4d, Blue = %4d\n"
lilac0112_1 0:e2155c63b32b 183 ,red
lilac0112_1 0:e2155c63b32b 184 ,green
lilac0112_1 0:e2155c63b32b 185 ,blue
lilac0112_1 0:e2155c63b32b 186 );
lilac0112_1 0:e2155c63b32b 187 wait_ms(500);
lilac0112_1 0:e2155c63b32b 188 }
lilac0112_1 0:e2155c63b32b 189 }