Migrating repo.
This commit is contained in:
62
firmware/main.c
Normal file
62
firmware/main.c
Normal file
@@ -0,0 +1,62 @@
|
||||
/*
|
||||
www.electropepper.org
|
||||
|
||||
Beerright 2017.
|
||||
|
||||
*/
|
||||
|
||||
#include "main.h"
|
||||
|
||||
#define diceDelay 100 // LED speed change while shuffling
|
||||
#define toggleDelay 300 // LED speed when stoped
|
||||
#define none 0
|
||||
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GIMSK |= _BV(PCIE); // Enable pin change interrupt
|
||||
PCMSK |= _BV(PB4); // Enable PORTB4 for pin change interrupt
|
||||
sei(); // Enable global interrupts
|
||||
DDRB &= ~_BV(PB4); // Set PORTB4 to input
|
||||
set_sleep_mode(SLEEP_MODE_PWR_DOWN); // Set sleep mode for Power-down(see datasheet)
|
||||
|
||||
|
||||
uint8_t randSeed = eeprom_read_byte ((uint8_t*)1); // Reads eeprom byte 1, value
|
||||
// into variable randSeed
|
||||
++randSeed; // Increments it
|
||||
eeprom_write_byte ((uint8_t*)1, randSeed); // Writes value back into
|
||||
// eeprom byte 1
|
||||
srand (randSeed); // Creates seed for random number
|
||||
// generator from randSeed value
|
||||
|
||||
|
||||
while (1) {
|
||||
for (stand_cycle = 0; stand_cycle < 40; stand_cycle++){ // Repeats 40 times next 4 lines
|
||||
what_led(cur_led); // Turn ON LED number inside variable cur_led
|
||||
_delay_ms(toggleDelay); // Wait
|
||||
what_led(none); // Truen off all LED's
|
||||
_delay_ms(toggleDelay); // Wait
|
||||
}
|
||||
sleep_mode(); // Go into sleep mode to save power, will came back alive
|
||||
// after interrupt is generated
|
||||
}
|
||||
}
|
||||
|
||||
ISR(PCINT0_vect) // Interrupt routine on pin change
|
||||
{
|
||||
for (uint8_t i = 0; i < 25; i++){ // Repeats 25 times next 3 lines
|
||||
cur_led = ((rand() % 7) + 1); // Creates random integer from 0 to 6 into cur_led
|
||||
what_led(cur_led); // Turn ON LED number inside variable cur_led
|
||||
_delay_ms(diceDelay); // Wait
|
||||
}
|
||||
stand_cycle = 0; // Resets the standby blinking times
|
||||
}
|
||||
|
||||
|
||||
void what_led(uint8_t led)
|
||||
{
|
||||
int8_t ledN = led_table[led]; // Reads led_table given number(led) into ledN
|
||||
DDRB = ledN & 0x0F; // Copy first ledN nibble into DDRB
|
||||
ledN = (ledN & 0xF0) >> 4; // Move second nibble into first nibble
|
||||
PORTB = ledN & 0x0F; // Copy first ledN nibble into PORTB
|
||||
}
|
Reference in New Issue
Block a user