TO CHECKOUT

Dependencies:   mbed

Committer:
chrish
Date:
Sat Nov 29 17:48:10 2014 +0000
Revision:
0:785c2b62c4d1
Child:
1:6a77fc8e1389
TO CHECKOUT;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
chrish 0:785c2b62c4d1 1 /***************************************************************************
chrish 0:785c2b62c4d1 2 * Titel : LAB.C
chrish 0:785c2b62c4d1 3 *
chrish 0:785c2b62c4d1 4 * Description : Labormodul "DIBI"
chrish 0:785c2b62c4d1 5 *
chrish 0:785c2b62c4d1 6 * Revision List:
chrish 0:785c2b62c4d1 7 --------------------------------------------------------------------------
chrish 0:785c2b62c4d1 8 Date | Author | Change
chrish 0:785c2b62c4d1 9 --------------------------------------------------------------------------
chrish 0:785c2b62c4d1 10 15.11.13 | J. Altenburg | Ersterstellung
chrish 0:785c2b62c4d1 11 --------------------------------------------------------------------------
chrish 0:785c2b62c4d1 12 | |
chrish 0:785c2b62c4d1 13 --------------------------------------------------------------------------
chrish 0:785c2b62c4d1 14 ****************************************************************************/
chrish 0:785c2b62c4d1 15
chrish 0:785c2b62c4d1 16 /***************************************************************************
chrish 0:785c2b62c4d1 17 * HEADER-FILES (Only those that are needed in this file)
chrish 0:785c2b62c4d1 18 ****************************************************************************/
chrish 0:785c2b62c4d1 19 /* Own header */
chrish 0:785c2b62c4d1 20 #include "lab.h"
chrish 0:785c2b62c4d1 21
chrish 0:785c2b62c4d1 22 /* Foreign headerfiles */
chrish 0:785c2b62c4d1 23 #include "lcd.h"
chrish 0:785c2b62c4d1 24 #include "picture.h"
chrish 0:785c2b62c4d1 25 #include "mbed.h"
chrish 0:785c2b62c4d1 26
chrish 0:785c2b62c4d1 27 DigitalOut bLed2(LED4);
chrish 0:785c2b62c4d1 28 DigitalIn bBtn1(p8);
chrish 0:785c2b62c4d1 29 AnalogIn fpAnalog(p15); /* Analogeingang */
chrish 0:785c2b62c4d1 30
chrish 0:785c2b62c4d1 31 #define PROF
chrish 0:785c2b62c4d1 32
chrish 0:785c2b62c4d1 33 /***************************************************************************
chrish 0:785c2b62c4d1 34 * Variablen
chrish 0:785c2b62c4d1 35 ****************************************************************************/
chrish 0:785c2b62c4d1 36 byte abPicture[160][120]; /*
chrish 0:785c2b62c4d1 37 Description: Bildspeicher fuer Grauwertbild
chrish 0:785c2b62c4d1 38 */
chrish 0:785c2b62c4d1 39
chrish 0:785c2b62c4d1 40 word awHisto[64] = {0}; /*
chrish 0:785c2b62c4d1 41 Description : Histogramm-Vektor
chrish 0:785c2b62c4d1 42 */
chrish 0:785c2b62c4d1 43
chrish 0:785c2b62c4d1 44 lcd_t myLCD; /*
chrish 0:785c2b62c4d1 45 * Description : Zugriffstruktur für LCD
chrish 0:785c2b62c4d1 46 */
chrish 0:785c2b62c4d1 47
chrish 0:785c2b62c4d1 48 spi_t mySPI; /*
chrish 0:785c2b62c4d1 49 * Description : dito. fuer SPI
chrish 0:785c2b62c4d1 50 */
chrish 0:785c2b62c4d1 51
chrish 0:785c2b62c4d1 52 float fpAdcValue; /*
chrish 0:785c2b62c4d1 53 * Description : analoger Messwert
chrish 0:785c2b62c4d1 54 */
chrish 0:785c2b62c4d1 55
chrish 0:785c2b62c4d1 56 /***************************************************************************
chrish 0:785c2b62c4d1 57 * lokale Funktionsprototypen
chrish 0:785c2b62c4d1 58 ***************************************************************************/
chrish 0:785c2b62c4d1 59
chrish 0:785c2b62c4d1 60
chrish 0:785c2b62c4d1 61 /***************************************************************************
chrish 0:785c2b62c4d1 62 * Defines und Makros *
chrish 0:785c2b62c4d1 63 ***************************************************************************/
chrish 0:785c2b62c4d1 64
chrish 0:785c2b62c4d1 65
chrish 0:785c2b62c4d1 66 /***************************************************************************
chrish 0:785c2b62c4d1 67 * lokale Funktionen
chrish 0:785c2b62c4d1 68 ****************************************************************************/
chrish 0:785c2b62c4d1 69 /* Umrechnen eines Farbwertes in einen Grauwert */
chrish 0:785c2b62c4d1 70 byte bRGB565ToGray(word wColor){
chrish 0:785c2b62c4d1 71 byte bGray = 0;
chrish 0:785c2b62c4d1 72 byte r,g,b;
chrish 0:785c2b62c4d1 73 r = (wColor & 0xf800)>>11;
chrish 0:785c2b62c4d1 74 g = (wColor & 0x07E0) >>5;
chrish 0:785c2b62c4d1 75 b = (wColor & 0x001F) ;
chrish 0:785c2b62c4d1 76
chrish 0:785c2b62c4d1 77 bGray = ((r+b)*2 + g)/3;
chrish 0:785c2b62c4d1 78 /*
chrish 0:785c2b62c4d1 79 .... hier eigenen Code eintragen
chrish 0:785c2b62c4d1 80 */
chrish 0:785c2b62c4d1 81 return bGray;
chrish 0:785c2b62c4d1 82 }
chrish 0:785c2b62c4d1 83
chrish 0:785c2b62c4d1 84 /* Umrechnen eines Grauwert in einen "unbunten" RGB565-Wert */
chrish 0:785c2b62c4d1 85 word wGrayToRGB565(byte bGray){
chrish 0:785c2b62c4d1 86 word wNoColor;
chrish 0:785c2b62c4d1 87 byte r,g,b;
chrish 0:785c2b62c4d1 88 r = bGray /2;
chrish 0:785c2b62c4d1 89 g= bGray;
chrish 0:785c2b62c4d1 90 b = bGray / 2;
chrish 0:785c2b62c4d1 91 wNoColor = (r <<11) + (g << 5) + b;
chrish 0:785c2b62c4d1 92 return wNoColor;
chrish 0:785c2b62c4d1 93 }
chrish 0:785c2b62c4d1 94
chrish 0:785c2b62c4d1 95
chrish 0:785c2b62c4d1 96 /* Umrechnen des Farbbildes in ein Grauwertbild
chrish 0:785c2b62c4d1 97 Parameterübergabe erfolgt über Zeiger
chrish 0:785c2b62c4d1 98 */
chrish 0:785c2b62c4d1 99 void vColorToGray(word *pColor, byte *pGray){
chrish 0:785c2b62c4d1 100 word w;
chrish 0:785c2b62c4d1 101 for(w = 0; w < 19200; w++){
chrish 0:785c2b62c4d1 102 *pGray = bRGB565ToGray(*pColor);
chrish 0:785c2b62c4d1 103 pGray++;
chrish 0:785c2b62c4d1 104 pColor++;
chrish 0:785c2b62c4d1 105 }
chrish 0:785c2b62c4d1 106 }
chrish 0:785c2b62c4d1 107
chrish 0:785c2b62c4d1 108 /* Grauwertbild in Sektor 2 plazieren */
chrish 0:785c2b62c4d1 109 void vGrayToScreen2(byte *pGray){
chrish 0:785c2b62c4d1 110 word wColor, w, v;
chrish 0:785c2b62c4d1 111 byte x, y;
chrish 0:785c2b62c4d1 112 x = y = 0;
chrish 0:785c2b62c4d1 113 for(v = 0; v < 19200; v++){
chrish 0:785c2b62c4d1 114 wColor = wGrayToRGB565(*pGray);
chrish 0:785c2b62c4d1 115 pGray++;
chrish 0:785c2b62c4d1 116 lcd_setPixel(&myLCD, 120 + y, 160 + x, wColor);
chrish 0:785c2b62c4d1 117 y++;
chrish 0:785c2b62c4d1 118 if(y > 119){
chrish 0:785c2b62c4d1 119 y = 0;
chrish 0:785c2b62c4d1 120 x++;
chrish 0:785c2b62c4d1 121 }
chrish 0:785c2b62c4d1 122 }
chrish 0:785c2b62c4d1 123 }
chrish 0:785c2b62c4d1 124
chrish 0:785c2b62c4d1 125 /* Grauwertbild in Sektor 3 plazieren */
chrish 0:785c2b62c4d1 126 void vGrayToScreen3(byte *pGray){
chrish 0:785c2b62c4d1 127
chrish 0:785c2b62c4d1 128 word wColor, w, v;
chrish 0:785c2b62c4d1 129 byte x, y;
chrish 0:785c2b62c4d1 130 x = y = 0;
chrish 0:785c2b62c4d1 131 for(v = 0; v < 19200; v++){
chrish 0:785c2b62c4d1 132 wColor = wGrayToRGB565(*pGray);
chrish 0:785c2b62c4d1 133 pGray++;
chrish 0:785c2b62c4d1 134 lcd_setPixel(&myLCD, y, 160 + x, wColor);
chrish 0:785c2b62c4d1 135 y++;
chrish 0:785c2b62c4d1 136 if(y > 119){
chrish 0:785c2b62c4d1 137 y = 0;
chrish 0:785c2b62c4d1 138 x++;
chrish 0:785c2b62c4d1 139 }
chrish 0:785c2b62c4d1 140 }
chrish 0:785c2b62c4d1 141 }
chrish 0:785c2b62c4d1 142
chrish 0:785c2b62c4d1 143
chrish 0:785c2b62c4d1 144
chrish 0:785c2b62c4d1 145 /* Histogramm in Sektor 4 zeichnen */
chrish 0:785c2b62c4d1 146 void vDrawHisto(byte *pGray){
chrish 0:785c2b62c4d1 147 word v, y, wMax = 0;
chrish 0:785c2b62c4d1 148 byte i, j, n;
chrish 0:785c2b62c4d1 149 /* Histogrammvektor initialisieren ... ihre Sache */
chrish 0:785c2b62c4d1 150
chrish 0:785c2b62c4d1 151 /* Histogrammvektor berechnen ... bitte tun */
chrish 0:785c2b62c4d1 152 /* Werte normieren ... wenn notwendig */
chrish 0:785c2b62c4d1 153
chrish 0:785c2b62c4d1 154 //word awHisto[64] = {0}; /*
chrish 0:785c2b62c4d1 155 //byte abPicture[160][120]; /*
chrish 0:785c2b62c4d1 156
chrish 0:785c2b62c4d1 157 for(i=0;i<64;i++) awHisto[i] = 0;
chrish 0:785c2b62c4d1 158
chrish 0:785c2b62c4d1 159
chrish 0:785c2b62c4d1 160 for(i=0;i<120;i++){
chrish 0:785c2b62c4d1 161 for(j=0;j<160;j++)awHisto[abPicture[i][j]] +=1;
chrish 0:785c2b62c4d1 162 }
chrish 0:785c2b62c4d1 163
chrish 0:785c2b62c4d1 164
chrish 0:785c2b62c4d1 165 /**ERmittlung des Maximalwertes */
chrish 0:785c2b62c4d1 166 wMax = awHisto[0];
chrish 0:785c2b62c4d1 167 for(i=1;i<64;i++){
chrish 0:785c2b62c4d1 168 if( awHisto[i] > wMax)wMax = awHisto[i];
chrish 0:785c2b62c4d1 169 }
chrish 0:785c2b62c4d1 170
chrish 0:785c2b62c4d1 171 /* ab hier Bildaufbau */
chrish 0:785c2b62c4d1 172 LCD_vFillRectangle(&myLCD, 10, 140, 128, 84, GRAY1); /* grauer Hintergrund */
chrish 0:785c2b62c4d1 173 //LCD_vSetPixel(&myLCD, 200,300, BRIGHT_RED)
chrish 0:785c2b62c4d1 174 // y x
chrish 0:785c2b62c4d1 175
chrish 0:785c2b62c4d1 176 for(i = 0; i < 128; i = i + 16){
chrish 0:785c2b62c4d1 177 LCD_vDrawVline(&myLCD, 20+i, 140, 84, GRAY2);
chrish 0:785c2b62c4d1 178 }
chrish 0:785c2b62c4d1 179 for(i = 0; i < 64; i++){ /* die möglichen Werte darstellen */
chrish 0:785c2b62c4d1 180 n = i*2;
chrish 0:785c2b62c4d1 181 y = i; // erzeugt einen Keil
chrish 0:785c2b62c4d1 182 for(j = 0; j < ( awHisto[i] * 64 / wMax) ; j++){
chrish 0:785c2b62c4d1 183 LCD_vSetPixel(&myLCD, 20+j, 10+n, BRIGHT_RED);
chrish 0:785c2b62c4d1 184 // LCD_vSetPixel(&myLCD, 20+j, 11+n, BRIGHT_RED);
chrish 0:785c2b62c4d1 185 }
chrish 0:785c2b62c4d1 186 }
chrish 0:785c2b62c4d1 187
chrish 0:785c2b62c4d1 188
chrish 0:785c2b62c4d1 189 // for(i = 0; i < 128; i = i + 16){
chrish 0:785c2b62c4d1 190 // LCD_vDrawVline(&myLCD, 20+i, 140, 84, GRAY2);
chrish 0:785c2b62c4d1 191 // }
chrish 0:785c2b62c4d1 192 for(i = 0; i < 128; i++){
chrish 0:785c2b62c4d1 193 LCD_vSetPixel(&myLCD, 84, 10+i, BLUE);
chrish 0:785c2b62c4d1 194 }
chrish 0:785c2b62c4d1 195 }
chrish 0:785c2b62c4d1 196
chrish 0:785c2b62c4d1 197
chrish 0:785c2b62c4d1 198
chrish 0:785c2b62c4d1 199 /* Grauwerte manipulieren
chrish 0:785c2b62c4d1 200 *pGray zeigt auf die Grauwerte
chrish 0:785c2b62c4d1 201 bValue bestimmt die Größenmanipulation
chrish 0:785c2b62c4d1 202 */
chrish 0:785c2b62c4d1 203 void vChangeGray(byte *pGray, byte bValue){
chrish 0:785c2b62c4d1 204 byte bGMin, bGMax, wMax;
chrish 0:785c2b62c4d1 205 word x,y;
chrish 0:785c2b62c4d1 206 //fpAdcValue
chrish 0:785c2b62c4d1 207 bGMin = 20;
chrish 0:785c2b62c4d1 208 bGMax = 40;
chrish 0:785c2b62c4d1 209 // wMax = 64 * fpAdcValue;
chrish 0:785c2b62c4d1 210 wMax = 255 * fpAdcValue;
chrish 0:785c2b62c4d1 211
chrish 0:785c2b62c4d1 212
chrish 0:785c2b62c4d1 213 byte *ab= &abPicture[0][0];
chrish 0:785c2b62c4d1 214 #if 0
chrish 0:785c2b62c4d1 215 for(x = 0; x < 100; x++){
chrish 0:785c2b62c4d1 216 if( ( ( *(ab + x) - bGMin) * (wMax/(bGMax+bGMin)) ) >=0)
chrish 0:785c2b62c4d1 217 *(pGray + x) = ( *(ab + x) - bGMin) * (wMax/(bGMax+bGMin));
chrish 0:785c2b62c4d1 218 else
chrish 0:785c2b62c4d1 219 *(pGray+x) =0;
chrish 0:785c2b62c4d1 220 }
chrish 0:785c2b62c4d1 221
chrish 0:785c2b62c4d1 222 #else
chrish 0:785c2b62c4d1 223 for(x = 0; x < 100; x++){
chrish 0:785c2b62c4d1 224 if( ( ( *(ab + x) - bGMin) * (wMax/(bGMax+bGMin)) ) >=0)
chrish 0:785c2b62c4d1 225 *(ab + x) = ( *(ab + x) - bGMin) * (wMax/(bGMax+bGMin));
chrish 0:785c2b62c4d1 226 else
chrish 0:785c2b62c4d1 227 *(ab+x) =0;
chrish 0:785c2b62c4d1 228 }
chrish 0:785c2b62c4d1 229 #endif
chrish 0:785c2b62c4d1 230 /* for(y=0;y<120;y++)
chrish 0:785c2b62c4d1 231 for(x=0;x<160;x++){
chrish 0:785c2b62c4d1 232 if( ( (abPicture[y] - bGMin) * (wMax/(bGMax+bGMin)) ) >=0)
chrish 0:785c2b62c4d1 233 pGray[y] = (byte)(abPicture[[x] - bGMin) * (wMax/(bGMax+bGMin));
chrish 0:785c2b62c4d1 234 else
chrish 0:785c2b62c4d1 235 pGray[y] =0;
chrish 0:785c2b62c4d1 236
chrish 0:785c2b62c4d1 237 }*/
chrish 0:785c2b62c4d1 238
chrish 0:785c2b62c4d1 239
chrish 0:785c2b62c4d1 240
chrish 0:785c2b62c4d1 241 /*
chrish 0:785c2b62c4d1 242 ... Sie sind dran
chrish 0:785c2b62c4d1 243 */
chrish 0:785c2b62c4d1 244 }
chrish 0:785c2b62c4d1 245
chrish 0:785c2b62c4d1 246
chrish 0:785c2b62c4d1 247 /***************************************************************************
chrish 0:785c2b62c4d1 248 * Initialisierung
chrish 0:785c2b62c4d1 249 * angeschlossene Hardware aktivieren
chrish 0:785c2b62c4d1 250 * Bildsektoren 1, 2 initialsieren
chrish 0:785c2b62c4d1 251 * Histogramm aufbauen
chrish 0:785c2b62c4d1 252 ****************************************************************************/
chrish 0:785c2b62c4d1 253 void LAB_vInit( void ){
chrish 0:785c2b62c4d1 254 spi_init(&mySPI, p11, p12, p13, NC);
chrish 0:785c2b62c4d1 255 spi_format(&mySPI, 8, 0, 0);
chrish 0:785c2b62c4d1 256 spi_frequency(&mySPI, 25000000);
chrish 0:785c2b62c4d1 257 LCD_vInit(&myLCD, &mySPI, p22, p23);
chrish 0:785c2b62c4d1 258 LCD_vSetMode(&myLCD, LANDSCAPE);
chrish 0:785c2b62c4d1 259 /* Blume in Sektor 1 zeichnen */
chrish 0:785c2b62c4d1 260 LCD_vFillSprite(&myLCD, 0, 0, 159, 119, (short int*)&awBlume[0]);
chrish 0:785c2b62c4d1 261 /* Grauwerte aus Farbbild ermitteln */
chrish 0:785c2b62c4d1 262 vColorToGray((word*)&awBlume[0], &abPicture[0][0]);
chrish 0:785c2b62c4d1 263 /* Grauwertbild in Sektor 2 zeichnen */
chrish 0:785c2b62c4d1 264 vGrayToScreen2(&abPicture[0][0]);
chrish 0:785c2b62c4d1 265 /* Histogramm in Sektor 4 zeichen */
chrish 0:785c2b62c4d1 266 vDrawHisto(&abPicture[0][0]);
chrish 0:785c2b62c4d1 267 }
chrish 0:785c2b62c4d1 268
chrish 0:785c2b62c4d1 269
chrish 0:785c2b62c4d1 270
chrish 0:785c2b62c4d1 271
chrish 0:785c2b62c4d1 272 /***************************************************************************
chrish 0:785c2b62c4d1 273 * MMI-Main
chrish 0:785c2b62c4d1 274 * diese Funktion wird alle 100 ms aufgerufen
chrish 0:785c2b62c4d1 275 ****************************************************************************/
chrish 0:785c2b62c4d1 276 void LAB_vMain( void ){
chrish 0:785c2b62c4d1 277 bLed2 = !bLed2;
chrish 0:785c2b62c4d1 278 // float bADCDATA;
chrish 0:785c2b62c4d1 279 byte i;
chrish 0:785c2b62c4d1 280
chrish 0:785c2b62c4d1 281 /* heir die Anzeige des Analogwertes einbauen */
chrish 0:785c2b62c4d1 282 byte abPictureCorrektet[120][160];
chrish 0:785c2b62c4d1 283
chrish 0:785c2b62c4d1 284 fpAdcValue = fpAnalog.read();
chrish 0:785c2b62c4d1 285 lcd_drawFloat(&myLCD,fpAdcValue*3.3, 3, 20, 125, 1, RED);
chrish 0:785c2b62c4d1 286 if(!bBtn1) {
chrish 0:785c2b62c4d1 287
chrish 0:785c2b62c4d1 288 vChangeGray(&abPictureCorrektet[0][0], 4);
chrish 0:785c2b62c4d1 289 #if 0
chrish 0:785c2b62c4d1 290 vGrayToScreen3(&abPictureCorrektet[0][0]);
chrish 0:785c2b62c4d1 291 #else
chrish 0:785c2b62c4d1 292 vGrayToScreen3(&abPicture[0][0]);
chrish 0:785c2b62c4d1 293
chrish 0:785c2b62c4d1 294 #endif
chrish 0:785c2b62c4d1 295 }
chrish 0:785c2b62c4d1 296 }
chrish 0:785c2b62c4d1 297
chrish 0:785c2b62c4d1 298
chrish 0:785c2b62c4d1 299 /***************************************************************************
chrish 0:785c2b62c4d1 300 * EOF: TEMPLATE.C
chrish 0:785c2b62c4d1 301 ****************************************************************************/
chrish 0:785c2b62c4d1 302
chrish 0:785c2b62c4d1 303