232 lines
3.4 KiB
C
232 lines
3.4 KiB
C
#include <avr/io.h>
|
|
#include <util/delay.h>
|
|
#include <string.h>
|
|
#include <stdlib.h>
|
|
|
|
#include "lib/light_ws2812.h"
|
|
#include "lib/pm.h"
|
|
#include "lib/mma8653.h"
|
|
#include "lib/timers.h"
|
|
#include "lib/button.h"
|
|
|
|
#define STRIPLEN (6*9)
|
|
struct cRGB led[STRIPLEN];
|
|
int brightness = 9;
|
|
|
|
volatile int stop = 0;
|
|
|
|
void update() {
|
|
ws2812_setleds(led, STRIPLEN);
|
|
}
|
|
|
|
void axl_test()
|
|
{
|
|
int ret;
|
|
int c = 0;
|
|
struct axl_result measurements;
|
|
|
|
int dir_x;
|
|
int dir_y;
|
|
int ledno;
|
|
int intens;
|
|
|
|
memset(led, 0, STRIPLEN * 3);
|
|
|
|
pm_axl_on();
|
|
_delay_ms(50);
|
|
|
|
ret = mma8653_init();
|
|
if (ret) {
|
|
led[8].b = 0x10;
|
|
update();
|
|
while(1);
|
|
}
|
|
|
|
while(!stop) {
|
|
if (pm_ac_connected()) {
|
|
led[10].g = 0;
|
|
led[10].b = 10;
|
|
pm_led_off();
|
|
} else {
|
|
led[10].g = 10;
|
|
led[10].b = 0;
|
|
_delay_ms(25);
|
|
pm_led_on();
|
|
}
|
|
if (pm_charging()) {
|
|
led[11].r = 10;
|
|
} else {
|
|
led[11].r = 0;
|
|
}
|
|
|
|
c++;
|
|
|
|
#define THRES 10
|
|
ret = mma8653_get_measurements(&measurements);
|
|
dir_x = 0;
|
|
if (measurements.x > THRES)
|
|
dir_x = -1;
|
|
else if (measurements.x < -THRES)
|
|
dir_x = 1;
|
|
dir_y = 0;
|
|
if (measurements.y > THRES)
|
|
dir_y = 1;
|
|
else if (measurements.y < -THRES)
|
|
dir_y = -1;
|
|
|
|
if (dir_y == -1)
|
|
ledno = dir_x + 1;
|
|
else if (dir_y == 0)
|
|
ledno = 3 + 1 -dir_x;
|
|
else if (dir_y == 1)
|
|
ledno = dir_x + 6 + 1;
|
|
|
|
intens = abs(measurements.x + measurements.y);
|
|
intens = intens >> 2;
|
|
if (intens < 1)
|
|
intens = 1;
|
|
if (measurements.z > 0)
|
|
led[ledno].b = intens;
|
|
else
|
|
led[ledno].r = intens;
|
|
|
|
if (ret)
|
|
led[ret].r = 0x10;
|
|
|
|
/*if (ret) {
|
|
led[8].g = 0;
|
|
led[8].r = c & 1;
|
|
} else {
|
|
led[8].r = 0;
|
|
led[8].g = c & 1;
|
|
}*/
|
|
update();
|
|
//_delay_ms(50);
|
|
memset(led, 0, 9 * 3);
|
|
//update();
|
|
_delay_ms(50);
|
|
}
|
|
}
|
|
|
|
void old_main()
|
|
{
|
|
memset(led, 0, STRIPLEN * 3);
|
|
while (!stop) {
|
|
led[0].r = brightness;
|
|
led[2].b = 0;
|
|
update();
|
|
_delay_ms(250);
|
|
|
|
led[1].g = brightness;
|
|
led[0].r = 0;
|
|
update();
|
|
_delay_ms(250);
|
|
|
|
led[1].g = 0;
|
|
led[2].b = brightness;
|
|
update();
|
|
_delay_ms(250);
|
|
|
|
for (int i=0; i<STRIPLEN; ++i) {
|
|
led[i].r=brightness;
|
|
led[i].g=brightness;
|
|
led[i].b=brightness;
|
|
}
|
|
update();
|
|
_delay_ms(50);
|
|
for (int i=0; i<STRIPLEN; ++i) {
|
|
led[i].r=0;
|
|
led[i].g=0;
|
|
led[i].b=0;
|
|
}
|
|
update();
|
|
_delay_ms(200);
|
|
}
|
|
}
|
|
|
|
void led_test()
|
|
{
|
|
memset(led, 0, STRIPLEN * 3);
|
|
while (!stop) {
|
|
for(int i = 0; i<STRIPLEN; ++i) {
|
|
led[i].g = 0x10;
|
|
if (led[i].r) {
|
|
led[i].b = 1;
|
|
led[i].r = 0;
|
|
} else {
|
|
led[i].r = 1;
|
|
led[i].b = 0;
|
|
}
|
|
update();
|
|
_delay_ms(30);
|
|
led[i].g = 0x0;
|
|
}
|
|
update();
|
|
}
|
|
|
|
}
|
|
|
|
int main()
|
|
{
|
|
pm_init();
|
|
timers_init();
|
|
|
|
pm_led_on();
|
|
|
|
_delay_ms(10);
|
|
|
|
memset(led, 0, STRIPLEN * 3);
|
|
for(int i = 0; i<STRIPLEN; ++i) {
|
|
led[i].g = 0x10;
|
|
update();
|
|
_delay_ms(15);
|
|
led[i].g = 0x0;
|
|
}
|
|
update();
|
|
_delay_ms(10);
|
|
|
|
#define OFS (9*4)
|
|
while (1) {
|
|
if (button_event(EV_PRESS)) {
|
|
led[3+OFS].g = 1;
|
|
}
|
|
if (button_event(EV_DOUBLEPRESS)) {
|
|
led[3+OFS].r = 1;
|
|
}
|
|
if (button_event(EV_LONGPRESS)) {
|
|
led[4+OFS].g = 1;
|
|
}
|
|
if (button_event(EV_DOUBLELONGPRESS)) {
|
|
led[5+OFS].b = 1;
|
|
}
|
|
|
|
if (block_for(TIMER_APP0, timer_ms(250))) {
|
|
led[0+OFS].b ^= 1;
|
|
update();
|
|
}
|
|
}
|
|
|
|
pm_reset();
|
|
}
|
|
|
|
void systick_cb()
|
|
{
|
|
// Turn LED DC-DC converter off when USB power is connected
|
|
if (pm_ac_connected()) {
|
|
pm_led_off();
|
|
led[0+OFS].r = 0;
|
|
} else {
|
|
pm_led_on();
|
|
led[0+OFS].r = 1;
|
|
}
|
|
|
|
button_systick_cb();
|
|
}
|
|
|
|
/*
|
|
_delay_ms(400);
|
|
if (!(PIND & (1 << 3)))
|
|
pm_reset();
|
|
stop = 1;
|
|
*/
|