/* * inits.c * * Created on: Nov 27, 2018 * Author: Logan */ #include "inits.h" #include "FreeRTOS.h" #include "task.h" #include "xgpio.h" #include "xparameters.h" #include "string.h" #include #define PIXEL_RED (2) #define PIXEL_GREEN (1) #define PIXEL_BLUE (2) #define PIXEL_ADDR (1) static XGpio gpio0_addr_red; static XGpio gpio1_green_blue; void gpioInit(void) //init gpio ip { XGpio_Config *pxConfigPtr; BaseType_t xStatus; /* Initialise the GPIO driver. */ pxConfigPtr = XGpio_LookupConfig( XPAR_AXI_GPIO_0_DEVICE_ID ); xStatus = XGpio_CfgInitialize( &gpio0_addr_red, pxConfigPtr, pxConfigPtr->BaseAddress ); configASSERT( xStatus == XST_SUCCESS ); ( void ) xStatus; /* Remove compiler warning if configASSERT() is not defined. */ /* Enable outputs and set low. */ XGpio_SetDataDirection( &gpio0_addr_red, PIXEL_ADDR, 0 ); XGpio_SetDataDirection( &gpio0_addr_red, PIXEL_RED, 0 ); XGpio_Config *pxConfigPtrGpio1; /* Initialise the GPIO driver. */ pxConfigPtrGpio1 = XGpio_LookupConfig( XPAR_AXI_GPIO_1_DEVICE_ID ); xStatus = XGpio_CfgInitialize( &gpio1_green_blue, pxConfigPtrGpio1, pxConfigPtrGpio1->BaseAddress ); configASSERT( xStatus == XST_SUCCESS ); ( void ) xStatus; /* Remove compiler warning if configASSERT() is not defined. */ /* Enable outputs and set low. */ XGpio_SetDataDirection( &gpio1_green_blue, PIXEL_GREEN, 0 ); XGpio_SetDataDirection( &gpio1_green_blue, PIXEL_BLUE, 0 ); } void writePixel (uint8_t row, uint8_t col, int red, int green, int blue) //color pixel { XGpio_DiscreteWrite(&gpio0_addr_red, PIXEL_ADDR, (row<<8) + col); //write the address first and then the colors XGpio_DiscreteWrite(&gpio0_addr_red, PIXEL_RED, red); XGpio_DiscreteWrite(&gpio1_green_blue, PIXEL_GREEN, green); XGpio_DiscreteWrite(&gpio1_green_blue, PIXEL_BLUE, blue); } void writeNumbers (char *temperature) //write temperature numbers { int next_digit = 0; //one digit int total_digits = strlen(temperature); char digit_str; for (int i = 0; i < total_digits; i++){ //index through each temperature digit digit_str = temperature[i]; switch(digit_str){ //draw digit case ('0'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!((row > 185 && row < 202) && (col > 64 + next_digit && col < 72 + next_digit))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('1'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (col > 71 + next_digit){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('2'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!((col >= 65 + next_digit && (row > 194 && row < 202)) || (col <= 71 + next_digit && (row > 185 && row < 193)))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('3'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!((col <= 71 + next_digit && (row > 194 && row < 202)) || (col <= 71 + next_digit && (row > 185 && row < 193)))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('4'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!(((col < 72 + next_digit && col > 64 + next_digit) && (row > 183 && row < 194)) || (col < 72 + next_digit && row > 195))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('5'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!((col <= 71 + next_digit && (row > 194 && row < 202)) || (col >= 65 + next_digit && (row > 185 && row < 193)))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('6'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!((col > 64 + next_digit && (row < 194 && row >= 184)) || ((col > 64 + next_digit && col < 72 + next_digit) && (row > 195 && row < 202)))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('7'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!(col < 72 + next_digit && row > 185)){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('8'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!(((row > 194 && row < 202) || (row > 185 && row < 193))&& (col > 64 + next_digit && col < 72 + next_digit))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } break; case ('9'): for (uint8_t col = 63 + next_digit; col < 74 + next_digit; col++){ for (uint8_t row = 184; row < 204; row++){ if (!((col < 72 + next_digit && row > 194) || ((row > 185 && row < 193) && (col > 64 + next_digit && col < 72 + next_digit)))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } } next_digit += 15; //next digit } } void drawBox(void) //make entire display black { for (uint8_t col = 0; col < 157; col++){ for (uint8_t row = 0; row < 205; row++){ writePixel(row, col, 0b00000, 0b000000, 0b00000); } } } void negSign(void) //draw negative sign { for (uint8_t col = 48; col < 59; col++){ for (uint8_t row = 193; row < 195; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } void clearNegSign(void) //only clear the negative sign { for (uint8_t col = 48; col < 59; col++){ for (uint8_t row = 193; row < 195; row++){ writePixel(row, col, 0b00000, 0b000000, 0b00000); } } } void degreeSym(char digits) //draw degree symbol { int next_digit = 0; //shift the symbol location based on temperature digits if (digits == '1'){ next_digit = 0; } else if (digits == '2'){ next_digit = 15; } else{ next_digit = 30; } for (uint8_t col = 79 + next_digit; col < 87 + next_digit; col++){ for (uint8_t row = 184; row < 192; row++){ if (!((row > 185 && row < 190) && (col > 80 + next_digit && col < 85 + next_digit))){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } } } void clearNumbers(void) //only clear the numbers { for (uint8_t col = 63; col < 89; col++){ for (uint8_t row = 184; row < 204; row++){ writePixel(row, col, 0b00000, 0b000000, 0b00000); } } } void writeForecast(int forecast, int forecast_digits) //draw the forecast { int digits = 10 * forecast_digits; //shift soe of the forecasts so they are centered (based on the number of digits in the temperature) switch(forecast){ case(0): for (uint8_t col = 0; col < 157; col++){ //sun for (uint8_t row = 0; row < 180; row++){ if (((row > 80 && row < 130) && (col > 43 + digits && col < 92 + digits))){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } } for (uint8_t col = 15 + digits; col < 36 + digits; col++){ //left ray for (uint8_t row = 103; row < 108; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 101 + digits; col < 122 + digits; col++){ //right ray for (uint8_t row = 103; row < 108; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 65 + digits; col < 70 + digits; col++){ //top ray for (uint8_t row = 52; row < 73; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 65 + digits; col < 70 + digits; col++){ //bottom ray for (uint8_t row = 136; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } break; case(1): for (uint8_t col = 0; col < 157; col++){ //sun for (uint8_t row = 0; row < 180; row++){ if (((row > 80 && row < 130) && (col > 43 && col < 92))){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } } for (uint8_t col = 15; col < 36; col++){ //left ray for (uint8_t row = 103; row < 108; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 101; col < 122; col++){ //right ray for (uint8_t row = 103; row < 108; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 65; col < 70; col++){ //top ray for (uint8_t row = 52; row < 73; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 65; col < 70; col++){ //bottom ray for (uint8_t row = 136; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } //cloud for (uint8_t col = 0; col < 15; col++){ for (uint8_t row = 151; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 15; col < 36; col++){ for (uint8_t row = 146; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 36; col < 43; col++){ for (uint8_t row = 130; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 43; col < 65; col++){ for (uint8_t row = 120; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 65; col < 82; col++){ for (uint8_t row = 103; row < 160; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 82; col < 106; col++){ for (uint8_t row = 98; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 106; col < 127; col++){ for (uint8_t row = 105; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 127; col < 135; col++){ for (uint8_t row = 115; row < 147; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 135; col < 142; col++){ for (uint8_t row = 130; row < 140; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } break; case(2): //cloud for (uint8_t col = 0; col < 15; col++){ for (uint8_t row = 151; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 15; col < 36; col++){ for (uint8_t row = 146; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 36; col < 43; col++){ for (uint8_t row = 130; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 43; col < 65; col++){ for (uint8_t row = 120; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 65; col < 82; col++){ for (uint8_t row = 103; row < 160; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 82; col < 106; col++){ for (uint8_t row = 98; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 106; col < 127; col++){ for (uint8_t row = 105; row < 157; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 127; col < 135; col++){ for (uint8_t row = 115; row < 147; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 135; col < 142; col++){ for (uint8_t row = 130; row < 140; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } break; case(3): //windy for (uint8_t col = 0; col < 15; col++){ for (uint8_t row = 101; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 15; col < 36; col++){ for (uint8_t row = 96; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 36; col < 43; col++){ for (uint8_t row = 80; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 43; col < 65; col++){ for (uint8_t row = 70; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 65; col < 82; col++){ for (uint8_t row = 53; row < 110; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 82; col < 106; col++){ for (uint8_t row = 48; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 106; col < 127; col++){ for (uint8_t row = 55; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 127; col < 135; col++){ for (uint8_t row = 65; row < 97; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 135; col < 142; col++){ for (uint8_t row = 80; row < 90; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } //wind for (uint8_t col = 82; col < 135; col++){ for (uint8_t row = 120; row < 125; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 52; col < 135; col++){ for (uint8_t row = 135; row < 140; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 22; col < 135; col++){ for (uint8_t row = 150; row < 155; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } break; case(4): //rainy, cloud first for (uint8_t col = 0; col < 15; col++){ for (uint8_t row = 101; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 15; col < 36; col++){ for (uint8_t row = 96; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 36; col < 43; col++){ for (uint8_t row = 80; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 43; col < 65; col++){ for (uint8_t row = 70; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 65; col < 82; col++){ for (uint8_t row = 53; row < 110; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 82; col < 106; col++){ for (uint8_t row = 48; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 106; col < 127; col++){ for (uint8_t row = 55; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 127; col < 135; col++){ for (uint8_t row = 65; row < 97; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 135; col < 142; col++){ for (uint8_t row = 80; row < 90; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } //rain for (uint8_t col = 65; col < 70; col++){ for (uint8_t row = 115; row < 150; row++){ writePixel(row, col, 0b00000, 0b111111, 0b11000); } } for (uint8_t col = 25; col < 30; col++){ for (uint8_t row = 115; row < 150; row++){ writePixel(row, col, 0b00000, 0b111111, 0b11000); } } for (uint8_t col = 105; col < 110; col++){ for (uint8_t row = 115; row < 150; row++){ writePixel(row, col, 0b00000, 0b111111, 0b11000); } } break; case(5): //thunder, cloud first for (uint8_t col = 0; col < 15; col++){ for (uint8_t row = 101; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 15; col < 36; col++){ for (uint8_t row = 96; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 36; col < 43; col++){ for (uint8_t row = 80; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 43; col < 65; col++){ for (uint8_t row = 70; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 65; col < 82; col++){ for (uint8_t row = 53; row < 110; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 82; col < 106; col++){ for (uint8_t row = 48; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 106; col < 127; col++){ for (uint8_t row = 55; row < 107; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 127; col < 135; col++){ for (uint8_t row = 65; row < 97; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 135; col < 142; col++){ for (uint8_t row = 80; row < 90; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } //thunder for (uint8_t col = 65; col < 70; col++){ for (uint8_t row = 115; row < 150; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 25; col < 30; col++){ for (uint8_t row = 115; row < 150; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } for (uint8_t col = 105; col < 110; col++){ for (uint8_t row = 115; row < 150; row++){ writePixel(row, col, 0b11111, 0b111111, 0b00000); } } break; case(6): //snow for (uint8_t col = 67 + digits; col < 72 + digits; col++){ for (uint8_t row = 75; row < 125; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } for (uint8_t col = 44 + digits; col < 94 + digits; col++){ //right ray for (uint8_t row = 97; row < 103; row++){ writePixel(row, col, 0b11111, 0b111111, 0b11111); } } break; } }