color cleanup and brightness
This commit is contained in:
parent
7894359f30
commit
d9fd18d799
@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#include "canvas.h"
|
#include "canvas.h"
|
||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
#include "eeprom.h"
|
||||||
|
#include "../rgb-driver/colors.h"
|
||||||
|
|
||||||
|
|
||||||
static uint8_t canvasStorage[CANVAS_WIDTH * CANVAS_HEIGHT];
|
static uint8_t canvasStorage[CANVAS_WIDTH * CANVAS_HEIGHT];
|
||||||
@ -22,6 +24,8 @@ const canvas_t miniCanvas = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
void canvasShow() {
|
void canvasShow() {
|
||||||
|
uint8_t brightness_offset = _brightness_offset * eepromReadBrightness();
|
||||||
|
|
||||||
// wait for signal waiting for data
|
// wait for signal waiting for data
|
||||||
while (!(P1IN & BIT3));
|
while (!(P1IN & BIT3));
|
||||||
|
|
||||||
@ -31,14 +35,14 @@ void canvasShow() {
|
|||||||
if ((*((canvas.canvas)+i) & 0x80) != 0) {
|
if ((*((canvas.canvas)+i) & 0x80) != 0) {
|
||||||
*((canvas.canvas)+i) &= ~0x80;
|
*((canvas.canvas)+i) &= ~0x80;
|
||||||
spiSendOctet(i);
|
spiSendOctet(i);
|
||||||
spiSendOctet(*((canvas.canvas)+i));
|
spiSendOctet((*((canvas.canvas)+i) == 0) ? 0 : (*((canvas.canvas)+i) + brightness_offset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (uint8_t i = 0; i < (MINI_CANVAS_WIDTH*MINI_CANVAS_HEIGHT); i++) {
|
for (uint8_t i = 0; i < (MINI_CANVAS_WIDTH*MINI_CANVAS_HEIGHT); i++) {
|
||||||
if ((*((miniCanvas.canvas)+i) & 0x80) != 0) {
|
if ((*((miniCanvas.canvas)+i) & 0x80) != 0) {
|
||||||
*((miniCanvas.canvas)+i) &= ~0x80;
|
*((miniCanvas.canvas)+i) &= ~0x80;
|
||||||
spiSendOctet(i + (CANVAS_HEIGHT*CANVAS_WIDTH));
|
spiSendOctet(i + (CANVAS_HEIGHT*CANVAS_WIDTH));
|
||||||
spiSendOctet(*((miniCanvas.canvas)+i));
|
spiSendOctet((*((miniCanvas.canvas)+i) == 0) ? 0 : (*((miniCanvas.canvas)+i) + brightness_offset));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
spiSendOctet(0xfe);
|
spiSendOctet(0xfe);
|
||||||
|
@ -6,17 +6,16 @@
|
|||||||
#include "buttons.h"
|
#include "buttons.h"
|
||||||
#include "eeprom.h"
|
#include "eeprom.h"
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
|
#include "shapes.h"
|
||||||
|
|
||||||
|
|
||||||
typedef enum { e_Config_Flash, e_Config_ResetHighscore, e_Config_End } t_ConfigState;
|
|
||||||
|
|
||||||
static bool configChanged = false;
|
static bool configChanged = false;
|
||||||
|
|
||||||
static void configHandleFlash() {
|
static void configHandleFlash() {
|
||||||
if (buttonsConfig2Pressed()) {
|
if (buttonsConfig2Pressed()) {
|
||||||
configChanged = true;
|
configChanged = true;
|
||||||
uint8_t color = eepromReadFlashColor() + 1;
|
uint8_t color = eepromReadFlashColor() + 1;
|
||||||
if (color == _color_end) {
|
if (color > _color_end) {
|
||||||
color = 0;
|
color = 0;
|
||||||
}
|
}
|
||||||
canvasFillRow(CANVAS_HEIGHT-1, color);
|
canvasFillRow(CANVAS_HEIGHT-1, color);
|
||||||
@ -34,33 +33,48 @@ static void configHandleResetHighScore() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void (*configHandler[])(void) = { configHandleFlash, configHandleResetHighScore };
|
static void configHandleBrightness() {
|
||||||
|
displaySetValue(eepromReadBrightness());
|
||||||
|
|
||||||
|
if (buttonsConfig2Pressed()) {
|
||||||
|
configChanged = true;
|
||||||
|
uint8_t brightness = eepromReadBrightness() + 1;
|
||||||
|
if (brightness > _brightness_shifts) {
|
||||||
|
brightness = 0;
|
||||||
|
}
|
||||||
|
eepromSetBrightness(brightness);
|
||||||
|
|
||||||
|
stoneDrawConfigPattern();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void (*configHandler[])(void) = { configHandleFlash, configHandleResetHighScore, configHandleBrightness };
|
||||||
|
|
||||||
|
|
||||||
void configExec(void *handle) {
|
void configExec(void *handle) {
|
||||||
static t_ConfigState configState = e_Config_Flash;
|
static uint8_t configState = 0;
|
||||||
|
|
||||||
if (buttonsConfig1Pressed()) {
|
if (buttonsConfig1Pressed()) {
|
||||||
configState += 1;
|
configState += 1;
|
||||||
if (configState == e_Config_End) {
|
if (configState >= sizeof(configHandler) / sizeof(configHandler[0])) {
|
||||||
configState = e_Config_Flash;
|
configState = 0;
|
||||||
}
|
}
|
||||||
miniCanvasClear();
|
miniCanvasClear();
|
||||||
canvasClear();
|
canvasClear();
|
||||||
|
|
||||||
miniCanvasSetPixel(configState, 0, _medium_red);
|
miniCanvasSetPixel(configState, 0, _red);
|
||||||
}
|
}
|
||||||
|
|
||||||
configHandler[configState]();
|
configHandler[configState]();
|
||||||
|
|
||||||
if (configChanged) {
|
if (configChanged) {
|
||||||
miniCanvasSetPixel(0, 2, _medium_red);
|
miniCanvasSetPixel(0, 2, _red);
|
||||||
if (buttonsConfig4Pressed()) {
|
if (buttonsConfig4Pressed()) {
|
||||||
eepromCommit();
|
eepromCommit();
|
||||||
configChanged = false;
|
configChanged = false;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
miniCanvasSetPixel(0, 2, _medium_green);
|
miniCanvasSetPixel(0, 2, _green);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#include "spi.h"
|
#include "spi.h"
|
||||||
|
|
||||||
|
|
||||||
#define MAGIC 0xafff
|
#define MAGIC 0xb000
|
||||||
#define HIGHSCORE_ADDR 0x00
|
#define HIGHSCORE_ADDR 0x00
|
||||||
#define DUMMY 0x00
|
#define DUMMY 0x00
|
||||||
#define CMD_READ 0b00000011
|
#define CMD_READ 0b00000011
|
||||||
@ -16,6 +16,7 @@ typedef struct {
|
|||||||
uint16_t magic;
|
uint16_t magic;
|
||||||
uint16_t highScore;
|
uint16_t highScore;
|
||||||
uint8_t flashColor;
|
uint8_t flashColor;
|
||||||
|
uint8_t brightness;
|
||||||
} t_configBlock;
|
} t_configBlock;
|
||||||
|
|
||||||
typedef union {
|
typedef union {
|
||||||
@ -59,6 +60,7 @@ void eepromInit() {
|
|||||||
buf.v.magic = MAGIC;
|
buf.v.magic = MAGIC;
|
||||||
buf.v.highScore = 0;
|
buf.v.highScore = 0;
|
||||||
buf.v.flashColor = 0;
|
buf.v.flashColor = 0;
|
||||||
|
buf.v.brightness = 0;
|
||||||
writeBuf();
|
writeBuf();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -84,3 +86,11 @@ void eepromSetFlashColor(uint8_t v) {
|
|||||||
buf.v.flashColor = v;
|
buf.v.flashColor = v;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t eepromReadBrightness() {
|
||||||
|
return buf.v.brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
void eepromSetBrightness(uint8_t v) {
|
||||||
|
buf.v.brightness = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ uint16_t eepromReadHighScore();
|
|||||||
void eepromSetHighScore(uint16_t v);
|
void eepromSetHighScore(uint16_t v);
|
||||||
uint8_t eepromReadFlashColor();
|
uint8_t eepromReadFlashColor();
|
||||||
void eepromSetFlashColor(uint8_t v);
|
void eepromSetFlashColor(uint8_t v);
|
||||||
|
uint8_t eepromReadBrightness();
|
||||||
|
void eepromSetBrightness(uint8_t v);
|
||||||
void eepromCommit();
|
void eepromCommit();
|
||||||
|
|
||||||
|
|
||||||
|
@ -483,6 +483,31 @@ uint8_t stoneDraw() {
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void stoneJustDraw(uint8_t x, uint8_t y, shape_t shape) {
|
||||||
|
canvasSetPixel(x + motions[shape].draw[0].x,
|
||||||
|
y + motions[shape].draw[0].y,
|
||||||
|
motions[shape].color);
|
||||||
|
canvasSetPixel(x + motions[shape].draw[1].x,
|
||||||
|
y + motions[shape].draw[1].y,
|
||||||
|
motions[shape].color);
|
||||||
|
canvasSetPixel(x + motions[shape].draw[2].x,
|
||||||
|
y + motions[shape].draw[2].y,
|
||||||
|
motions[shape].color);
|
||||||
|
canvasSetPixel(x + motions[shape].draw[3].x,
|
||||||
|
y + motions[shape].draw[3].y,
|
||||||
|
motions[shape].color);
|
||||||
|
}
|
||||||
|
|
||||||
|
void stoneDrawConfigPattern() {
|
||||||
|
stoneJustDraw(1, 0, e_I);
|
||||||
|
stoneJustDraw(3, 4, e_O);
|
||||||
|
stoneJustDraw(4, 7, e_T);
|
||||||
|
stoneJustDraw(5, 10, e_Z);
|
||||||
|
stoneJustDraw(1, 12, e_S);
|
||||||
|
stoneJustDraw(5, 15, e_L);
|
||||||
|
stoneJustDraw(1, 17, e_J);
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t stoneMoveDown() {
|
uint8_t stoneMoveDown() {
|
||||||
return move(e_MoveDown);
|
return move(e_MoveDown);
|
||||||
}
|
}
|
||||||
|
@ -14,5 +14,6 @@ uint8_t stoneMoveRight();
|
|||||||
uint8_t stoneRotateLeft();
|
uint8_t stoneRotateLeft();
|
||||||
uint8_t stoneRotateRight();
|
uint8_t stoneRotateRight();
|
||||||
|
|
||||||
|
void stoneDrawConfigPattern();
|
||||||
|
|
||||||
#endif // _SHAPES_H_
|
#endif // _SHAPES_H_
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
#include "colors.h"
|
#include "colors.h"
|
||||||
|
|
||||||
#define DF 5
|
|
||||||
#define DF_M 3
|
|
||||||
.section ".rodata","a"
|
.section ".rodata","a"
|
||||||
;; color definitions according to
|
;; color definitions according to
|
||||||
;; https://learn.sparkfun.com/tutorials/lilypad-protosnap-plus-activity-guide/3-custom-color-mixing
|
;; https://learn.sparkfun.com/tutorials/lilypad-protosnap-plus-activity-guide/3-custom-color-mixing
|
||||||
@ -9,43 +7,49 @@ colors:
|
|||||||
.global colors
|
.global colors
|
||||||
;; red, green, blue, padding
|
;; red, green, blue, padding
|
||||||
.byte 0x00, 0x00, 0x00, 0 ;; off
|
.byte 0x00, 0x00, 0x00, 0 ;; off
|
||||||
.byte 0x00>>DF, 0x00>>DF, 0xff>>DF, 0 ;; blue
|
|
||||||
.byte 0x00>>DF, 0xff>>DF, 0x00>>DF, 0 ;; green
|
.byte 0x00>>5, 0x00>>5, 0xff>>5, 0 ;; blue
|
||||||
.byte 0xff>>DF, 0x80>>DF, 0x00>>DF, 0 ;; orange
|
.byte 0x00>>5, 0xff>>5, 0x00>>5, 0 ;; green
|
||||||
.byte 0xff>>DF, 0x00>>DF, 0x80>>DF, 0 ;; rose
|
.byte 0xff>>5, 0x80>>5, 0x00>>5, 0 ;; orange
|
||||||
.byte 0xff>>DF, 0x00>>DF, 0xff>>DF, 0 ;; magenta
|
.byte 0x80>>5, 0x00>>5, 0xff>>5, 0 ;; violet
|
||||||
.byte 0x80>>DF, 0x00>>DF, 0xff>>DF, 0 ;; violet
|
.byte 0x00>>5, 0xff>>5, 0xff>>5, 0 ;; cyan
|
||||||
.byte 0x00>>DF, 0x80>>DF, 0xff>>DF, 0 ;; azure
|
.byte 0xff>>5, 0xff>>5, 0x00>>5, 0 ;; yellow
|
||||||
.byte 0x00>>DF, 0xff>>DF, 0xff>>DF, 0 ;; cyan
|
.byte 0xff>>5, 0x00>>5, 0x00>>5, 0 ;; red
|
||||||
.byte 0x00>>DF, 0xff>>DF, 0x80>>DF, 0 ;; springgreen
|
.byte 0xff>>5, 0xff>>5, 0xff>>5, 0 ;; white
|
||||||
.byte 0x80>>DF, 0xff>>DF, 0x00>>DF, 0 ;; chartreuse
|
|
||||||
.byte 0xff>>DF, 0xff>>DF, 0x00>>DF, 0 ;; yellow
|
.byte 0x00>>4, 0x00>>4, 0xff>>4, 0 ;; blue
|
||||||
.byte 0xff>>DF, 0xff>>DF, 0xff>>DF, 0 ;; white
|
.byte 0x00>>4, 0xff>>4, 0x00>>4, 0 ;; green
|
||||||
.byte 0xff>>DF, 0x00>>DF, 0x00>>DF, 0 ;; red
|
.byte 0xff>>4, 0x80>>4, 0x00>>4, 0 ;; orange
|
||||||
.byte 0x00>>DF_M, 0x00>>DF_M, 0xff>>DF_M, 0 ;; blue
|
.byte 0x80>>4, 0x00>>4, 0xff>>4, 0 ;; violet
|
||||||
.byte 0x00>>DF_M, 0xff>>DF_M, 0x00>>DF_M, 0 ;; green
|
.byte 0x00>>4, 0xff>>4, 0xff>>4, 0 ;; cyan
|
||||||
.byte 0xff>>DF_M, 0x80>>DF_M, 0x00>>DF_M, 0 ;; orange
|
.byte 0xff>>4, 0xff>>4, 0x00>>4, 0 ;; yellow
|
||||||
.byte 0xff>>DF_M, 0x00>>DF_M, 0x80>>DF_M, 0 ;; rose
|
.byte 0xff>>4, 0x00>>4, 0x00>>4, 0 ;; red
|
||||||
.byte 0xff>>DF_M, 0x00>>DF_M, 0xff>>DF_M, 0 ;; magenta
|
.byte 0xff>>4, 0xff>>4, 0xff>>4, 0 ;; white
|
||||||
.byte 0x80>>DF_M, 0x00>>DF_M, 0xff>>DF_M, 0 ;; violet
|
|
||||||
.byte 0x00>>DF_M, 0x80>>DF_M, 0xff>>DF_M, 0 ;; azure
|
.byte 0x00>>3, 0x00>>3, 0xff>>3, 0 ;; blue
|
||||||
.byte 0x00>>DF_M, 0xff>>DF_M, 0xff>>DF_M, 0 ;; cyan
|
.byte 0x00>>3, 0xff>>3, 0x00>>3, 0 ;; green
|
||||||
.byte 0x00>>DF_M, 0xff>>DF_M, 0x80>>DF_M, 0 ;; springgreen
|
.byte 0xff>>3, 0x80>>3, 0x00>>3, 0 ;; orange
|
||||||
.byte 0x80>>DF_M, 0xff>>DF_M, 0x00>>DF_M, 0 ;; chartreuse
|
.byte 0x80>>3, 0x00>>3, 0xff>>3, 0 ;; violet
|
||||||
.byte 0xff>>DF_M, 0xff>>DF_M, 0x00>>DF_M, 0 ;; yellow
|
.byte 0x00>>3, 0xff>>3, 0xff>>3, 0 ;; cyan
|
||||||
.byte 0xff>>DF_M, 0xff>>DF_M, 0xff>>DF_M, 0 ;; white
|
.byte 0xff>>3, 0xff>>3, 0x00>>3, 0 ;; yellow
|
||||||
.byte 0xff>>DF_M, 0x00>>DF_M, 0x00>>DF_M, 0 ;; red
|
.byte 0xff>>3, 0x00>>3, 0x00>>3, 0 ;; red
|
||||||
.byte 0x00, 0x00, 0xff, 0 ;; blue
|
.byte 0xff>>3, 0xff>>3, 0xff>>3, 0 ;; white
|
||||||
.byte 0x00, 0xff, 0x00, 0 ;; green
|
|
||||||
.byte 0xff, 0x80, 0x00, 0 ;; orange
|
.byte 0x00>>2, 0x00>>2, 0xff>>2, 0 ;; blue
|
||||||
.byte 0xff, 0x00, 0x80, 0 ;; rose
|
.byte 0x00>>2, 0xff>>2, 0x00>>2, 0 ;; green
|
||||||
.byte 0xff, 0x00, 0xff, 0 ;; magenta
|
.byte 0xff>>2, 0x80>>2, 0x00>>2, 0 ;; orange
|
||||||
.byte 0x80, 0x00, 0xff, 0 ;; violet
|
.byte 0x80>>2, 0x00>>2, 0xff>>2, 0 ;; violet
|
||||||
.byte 0x00, 0x80, 0xff, 0 ;; azure
|
.byte 0x00>>2, 0xff>>2, 0xff>>2, 0 ;; cyan
|
||||||
.byte 0x00, 0xff, 0xff, 0 ;; cyan
|
.byte 0xff>>2, 0xff>>2, 0x00>>2, 0 ;; yellow
|
||||||
.byte 0x00, 0xff, 0x80, 0 ;; springgreen
|
.byte 0xff>>2, 0x00>>2, 0x00>>2, 0 ;; red
|
||||||
.byte 0x80, 0xff, 0x00, 0 ;; chartreuse
|
.byte 0xff>>2, 0xff>>2, 0xff>>2, 0 ;; white
|
||||||
.byte 0xff, 0xff, 0x00, 0 ;; yellow
|
|
||||||
.byte 0xff, 0xff, 0xff, 0 ;; white
|
.byte 0x00>>1, 0x00>>1, 0xff>>1, 0 ;; blue
|
||||||
.byte 0xff, 0x00, 0x00, 0 ;; red
|
.byte 0x00>>1, 0xff>>1, 0x00>>1, 0 ;; green
|
||||||
|
.byte 0xff>>1, 0x80>>1, 0x00>>1, 0 ;; orange
|
||||||
|
.byte 0x80>>1, 0x00>>1, 0xff>>1, 0 ;; violet
|
||||||
|
.byte 0x00>>1, 0xff>>1, 0xff>>1, 0 ;; cyan
|
||||||
|
.byte 0xff>>1, 0xff>>1, 0x00>>1, 0 ;; yellow
|
||||||
|
.byte 0xff>>1, 0x00>>1, 0x00>>1, 0 ;; red
|
||||||
|
.byte 0xff>>1, 0xff>>1, 0xff>>1, 0 ;; white
|
||||||
|
|
||||||
|
@ -2,51 +2,20 @@
|
|||||||
#define _COLORS_H_
|
#define _COLORS_H_
|
||||||
|
|
||||||
|
|
||||||
#define _off 0x00
|
#define _off 0
|
||||||
|
|
||||||
#define _blue 0x01
|
#define _blue 1
|
||||||
#define _green 0x02
|
#define _green 2
|
||||||
#define _orange 0x03
|
#define _orange 3
|
||||||
#define _rose 0x04
|
#define _violet 4
|
||||||
#define _magenta 0x05
|
#define _cyan 5
|
||||||
#define _violet 0x06
|
#define _yellow 6
|
||||||
#define _azure 0x07
|
#define _red 7
|
||||||
#define _cyan 0x08
|
#define _white 8
|
||||||
#define _springgreen 0x09
|
|
||||||
#define _chartreuse 0x0a
|
|
||||||
#define _yellow 0x0b
|
|
||||||
#define _white 0x0c
|
|
||||||
#define _red 0x0d
|
|
||||||
|
|
||||||
#define _medium_blue 0x0e
|
#define _brightness_offset 8
|
||||||
#define _medium_green 0x0f
|
#define _brightness_shifts 5
|
||||||
#define _medium_orange 0x10
|
#define _color_end (_brightness_offset * _brightness_shifts)
|
||||||
#define _medium_rose 0x11
|
|
||||||
#define _medium_magenta 0x12
|
|
||||||
#define _medium_violet 0x13
|
|
||||||
#define _medium_azure 0x14
|
|
||||||
#define _medium_cyan 0x15
|
|
||||||
#define _medium_springgreen 0x16
|
|
||||||
#define _medium_chartreuse 0x17
|
|
||||||
#define _medium_yellow 0x18
|
|
||||||
#define _medium_white 0x19
|
|
||||||
#define _medium_red 0x1a
|
|
||||||
|
|
||||||
#define _dazzling_blue 0x1b
|
|
||||||
#define _dazzling_green 0x1c
|
|
||||||
#define _dazzling_orange 0x1d
|
|
||||||
#define _dazzling_rose 0x1e
|
|
||||||
#define _dazzling_magenta 0x1f
|
|
||||||
#define _dazzling_violet 0x20
|
|
||||||
#define _dazzling_azure 0x21
|
|
||||||
#define _dazzling_cyan 0x22
|
|
||||||
#define _dazzling_springgreen 0x23
|
|
||||||
#define _dazzling_chartreuse 0x24
|
|
||||||
#define _dazzling_yellow 0x25
|
|
||||||
#define _dazzling_white 0x26
|
|
||||||
#define _dazzling_red 0x27
|
|
||||||
|
|
||||||
#define _color_end 0x28
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user