6 #ifndef LIBPROPELLER_ELUM_H_
7 #define LIBPROPELLER_ELUM_H_
42 kSingleSlow, kSingle, kSingleSyncopated, kDouble, kTriple, kManyFast, kJitterFast
52 Elum(
int RedPin,
int GreenPin,
int ButtonPin) {
53 Start(RedPin, GreenPin, ButtonPin);
59 void Start(
int RedPin,
int GreenPin,
int ButtonPin) {
60 b_mask = 1 << ButtonPin;
80 return (
INA & b_mask) == 0;
83 inline void Slowclock(
void) {
90 if (whichColor == RED) {
92 OUTA &= ~(1 << pin_r);
94 OUTA &= ~(1 << pin_g);
101 OUTA &= ~(1 << pin_r);
102 OUTA &= ~(1 << pin_g);
117 void Flash(
int color,
int period_ms,
int flash_ms) {
122 Pwm(pin_r, period_ms, flash_ms);
123 }
else if (color == GREEN) {
125 Pwm(pin_g, period_ms, flash_ms);
153 case kSingleSyncopated:
182 FRQA = (((1000) << 2) * (0x40000000 / (
CLKFREQ / 1000))) / 1000;
183 CTRA = (0b00100000 << 23) + pin_r;
184 FRQB = (((10000 + frequency) << 2) * (0x40000000 / (
CLKFREQ / 1000))) / 10000;
185 CTRB = (0b00100000 << 23) + pin_g;
195 int Fraction(
int Y,
int X,
int B) {
207 _idx__0000 = (_idx__0000 + -1);
208 }
while (_idx__0000 >= 1);
213 int Pwm(
int Pin,
int Period_ms,
int Flash_ms) {
216 Flash_ms = ((Period_ms / 2) - (Min__(Flash_ms, (Period_ms / 2))));
217 Phsx = Fraction(Flash_ms, Period_ms, 32);
218 Frqx = Fraction(1, ((_clockfreq / 1000) * Period_ms), 32);
223 CTRA = (0x10000000 + Pin);
224 CTRB = (0x10000000 + Pin);
228 void Pattern(
int tRed,
int tGreen,
int phsGreen) {
229 PHSB = (0x7FFFFFFF / 100 * phsGreen) << 1;
232 CTRA = (0b00100000 << 23) + pin_r;
233 CTRB = (0b00100000 << 23) + pin_g;
238 static inline int32_t Min__(int32_t a, int32_t b) {
239 return a < b ? a : b;
245 #endif // SRLM_PROPGCC_ELUM_H_