Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 1198 → Rev 1199

/C-OSD/C-Epilepsy/epi_helpers.c
0,0 → 1,94
/****************************************************************************
* Copyright (C) 2011 by Claas Anders "CaScAdE" Rathje *
* admiralcascade@gmail.com *
* Project-URL: http://www.mylifesucks.de/oss/c-epilepsy/ *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with this program; if not, write to the *
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
****************************************************************************/
 
#include "epi_helpers.h"
 
// clear anomation
 
void clear(void) {
for (uint8_t i = 0; i < 7; i++) {
animation[i] = 0;
}
}
 
/**
* Display degree on the EPI
* @param animation the animation array to set the LEDs in
* @param degree 0-360 degree to set
*/
void degree2epi(uint8_t *animation, uint16_t degree) {
setLed(animation, (degree * 10) / 75, 1);
}
 
void setSingleLed(uint8_t *animation, uint8_t led) {
uint8_t segment = led / 8;
uint8_t ledleft = (led - segment * 8);
animation[segment] |= (128 >> (7 - ledleft));
}
 
void unsetSingleLed(uint8_t *animation, uint8_t led) {
uint8_t segment = led / 8;
uint8_t ledleft = (led - segment * 8);
animation[segment] &= ~(128 >> (7 - ledleft));
}
 
void setLed(uint8_t *animation, uint8_t led, uint8_t bool_clear) {
if (bool_clear) {
clear();
}
setSingleLed(animation, led);
}
 
void setLedsAround(uint8_t *animation, uint8_t center, uint8_t border, uint8_t bool_clear) {
animation_locked = 1;
if (bool_clear) {
clear();
}
setSingleLed(animation, center);
for (uint8_t b = 1; b <= border; b++) {
setSingleLed(animation, (center + b) % 48);
setSingleLed(animation, (center + (48 - b)) % 48);
}
animation_locked = 0;
}
 
void setLeds(uint8_t *animation, uint8_t leds) {
uint8_t segment = leds / 8;
for (uint8_t i = 0; i < 6; i++) {
if (i < segment) {
animation[i] = 255;
} else if (i == segment) {
uint8_t ledsleft = (leds - segment * 8);
//animation[i] = ~((uint8_t) (255 >> ledsleft));
animation[i] = ~((uint8_t)(255 << ledsleft));
} else {
animation[i] = 0;
}
}
}
 
void blinkNumer(uint8_t *animation, uint8_t num, uint8_t times) {
for (uint8_t i = 0; i < times; i++) {
setLeds(animation, num);
_delay_ms(150);
setLeds(animation, 0);
_delay_ms(100);
}
}