Skip to content

Commit

Permalink
IRrecving working, added debug flags to disable functionality
Browse files Browse the repository at this point in the history
  • Loading branch information
mikepea committed Oct 30, 2010
1 parent 5f62784 commit 6b4aa2d
Show file tree
Hide file tree
Showing 5 changed files with 62 additions and 32 deletions.
2 changes: 1 addition & 1 deletion my_id.h
@@ -1,2 +1,2 @@

#define MY_ID 0x01
#define MY_BADGE_ID 0x0c
2 changes: 1 addition & 1 deletion white-night-kit.aps
@@ -1 +1 @@
<AVRStudio><MANAGEMENT><ProjectName>white-night-kit</ProjectName><Created>30-Oct-2010 09:15:53</Created><LastEdit>30-Oct-2010 09:26:00</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Oct-2010 09:15:53</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\white-night-kit.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>\\vmware-host\Shared Folders\Dropbox\git\mikepea\white-night-kit\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator 2</CURRENT_TARGET><CURRENT_PART>ATtiny25.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>white_night_code.c</SOURCEFILE><OTHERFILE>default\white-night-kit.lss</OTHERFILE><OTHERFILE>default\white-night-kit.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>attiny25</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>white-night-kit.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
<AVRStudio><MANAGEMENT><ProjectName>white-night-kit</ProjectName><Created>30-Oct-2010 09:15:53</Created><LastEdit>30-Oct-2010 16:26:35</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>30-Oct-2010 09:15:53</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\white-night-kit.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>\\vmware-host\Shared Folders\Dropbox\git\mikepea\white-night-kit\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator 2</CURRENT_TARGET><CURRENT_PART>ATtiny25</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>white_night_code.c</SOURCEFILE><OTHERFILE>default\white-night-kit.lss</OTHERFILE><OTHERFILE>default\white-night-kit.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>attiny25</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>white-night-kit.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>1</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -Os -std=gnu99 -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>white_night_code.c</FileName><Status>1</Status></File00000></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>
2 changes: 1 addition & 1 deletion white-night-kit.aws
@@ -1 +1 @@
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATTINY25"/><Files/></AVRWorkspace>
<AVRWorkspace><IOSettings><CurrentRegisters/></IOSettings><part name="ATTINY25"/><Files><File00000 Name="\\vmware-host\Shared Folders\Dropbox\git\mikepea\white-night-kit\white_night_code.c" Position="145 71 702 728" LineCol="0 0" State="Maximized"/></Files></AVRWorkspace>
69 changes: 43 additions & 26 deletions white_night_code.c
Expand Up @@ -8,7 +8,6 @@
* http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1210243556
*/


#include "my_id.h"
#include "white_night_code.h"

Expand All @@ -18,9 +17,10 @@

uint8_t same_colour_count = 0;
uint8_t last_colour = 0;
uint8_t curr_colour = MY_ID & displayRGBMask;
uint8_t curr_colour = (uint8_t)MY_BADGE_ID & displayRGBMask;
uint8_t next_colour = 0;
uint8_t my_mode = CYCLE_COLOURS_SEEN;
//uint8_t my_mode = INIT_MODE;
uint8_t debug_modes = 0x00;

// counts 'ticks' (kinda-seconds) of main loop
Expand Down Expand Up @@ -75,6 +75,7 @@ void enableIROut(void) {

}

#ifndef DISABLE_IR_SENDING_CODE
void sendNEC(unsigned long data)
{
// handle turning on an approximation of our colour,
Expand All @@ -98,6 +99,7 @@ void sendNEC(unsigned long data)
space(0);
enableIRIn(); // switch back to recv mode
}
#endif


// initialization
Expand All @@ -120,7 +122,7 @@ void enableIRIn(void) {

RESET_TIMER0;

//sei(); // enable interrupts
sei(); // enable interrupts

// initialize state machine variables
irparams.rcvstate = IDLE ;
Expand Down Expand Up @@ -152,31 +154,28 @@ ISR(TIMER0_OVF_vect) {

rgb_tick = (rgb_tick + 1) % 4; // rgb_tick keeps track of which

//if ( debug_modes & DEBUG_TURN_OFF_DISPLAY == 0 ) {
// process RGB software PWM
//
// rgb element we need to process.
if ((curr_colour & displayRedMask >> RED*2) > rgb_tick) {
#ifndef TURN_OFF_PWM_COLOUR
if (((curr_colour & displayRedMask) >> RED*2) > rgb_tick) {
// Update the red value
PORTB &= ~redMask; // turn on
} else {
PORTB |= redMask;
}

if ((curr_colour & displayGrnMask >> GREEN*2) > rgb_tick) {
if (((curr_colour & displayGrnMask) >> GREEN*2) > rgb_tick) {
PORTB &= ~grnMask; // turn on
}
else {
PORTB |= grnMask;
}

if ((curr_colour & displayBluMask >> BLUE*2) > rgb_tick) {
if (((curr_colour & displayBluMask) >> BLUE*2) > rgb_tick) {
PORTB &= ~bluMask; // turn on
}
else {
PORTB |= bluMask;
}
//}
#endif

irparams.irdata = (PINB & irInMask) >> (irInPortBPin - 1);

Expand Down Expand Up @@ -288,6 +287,7 @@ ISR(TIMER0_OVF_vect) {
if (irparams.irdata == SPACE) { // got a SPACE, check stop MARK time
if ((irparams.timer >= BITMARKMIN) && (irparams.timer <= BITMARKMAX)) {
// time OK -- got an IR code
//FLASH_RED;
irparams.irbuf[irparams.fptr] = irparams.ircode ; // store code at fptr position
irparams.fptr = (irparams.fptr + 1) % MAXBUF ; // move fptr to next empty slot
}
Expand All @@ -299,53 +299,55 @@ ISR(TIMER0_OVF_vect) {

}

/*
void flash_ircode(long data) {
#ifdef ENABLE_FLASH_BYTE_CODE
void flash_byte(uint8_t data) {

for (int i=0; i<32; i++) {
for (uint8_t i=0; i<8; i++) {
if ( data & 1 ) {
PORTB |= rgbMask; // turns off RGB
PORTB ^= redMask; // turns on red
delay_ten_us(IR_DATA_PRINT_DELAY);
delay_ten_us(20000);
PORTB |= rgbMask; // turns off RGB
delay_ten_us(IR_DATA_PRINT_DELAY);
} else {
PORTB |= rgbMask; // turns off RGB
PORTB ^= bluMask; // turns on red
delay_ten_us(IR_DATA_PRINT_DELAY);
delay_ten_us(20000);
PORTB |= bluMask; // turns off RGB
delay_ten_us(IR_DATA_PRINT_DELAY);
}
data >>= 1;
}

}
*/
#endif

void check_all_ir_buffers_for_data(void) {

for (uint8_t j=0; j<MAXBUF; j++) {

if (IRBUF_CUR) {

//FLASH_BLUE;

//flash_ircode(irparams.irbuf[j]);
//if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_VOLUME_UP ) {
// curr_colour = displayGrnMask;

//} else if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_NEXT_TRACK ) {
// curr_colour = displayBluMask;

//} else if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_PREV_TRACK ) {
// curr_colour = displayRedMask;
if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_PREV_TRACK ) {
my_mode = AM_INFECTED;

if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_VOLUME_DOWN ) {
} else if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_VOLUME_DOWN ) {
// turn'em off, n sync-ish em up.
my_mode = CYCLE_COLOURS_SEEN;
curr_colour = 0;

} else if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_PLAY ) {
// de-zombie folk
my_mode = CYCLE_COLOURS_SEEN;
// zombie 'em up
my_mode = AM_ZOMBIE;

} else if ( ( IRBUF_CUR & ~COMMON_CODE_MASK ) == APPLE_MENU ) {
// go into data transfer mode - IR all known info to a receiving station
Expand Down Expand Up @@ -420,14 +422,21 @@ void update_my_state(void) {
// read next valid id from EEPROM
for ( uint8_t i = curr_colour + 1; i<128; i++ ) {
uint8_t seen = eeprom_read_byte((uint8_t*)i);
if ( seen ) {
FLASH_GREEN;
if ( seen == 1 ) {
flash_byte(curr_colour);
last_colour = curr_colour;
curr_colour = seen & displayRGBMask; // in case ID is >= 64
break;
}
}

}
} else if ( my_mode == INIT_MODE ) {
// do nothing
if ( main_loop_counter > 5 ) {
my_mode = CYCLE_COLOURS_SEEN;
}
}

}

Expand All @@ -447,17 +456,21 @@ int main(void) {
// -- (if we set an input pin High it activates a
// pull-up resistor, which we don't need, but don't care about either)

enableIRIn();
//enableIRIn();
sei(); // enable microcontroller interrupts

long my_code = 0;


while (1) {

// set code to whatever we want to send
//my_code = MY_CODE_HEADER | (long)(my_mode) <<8 | curr_colour; // ID, plus blank colour
my_code = MY_CODE_HEADER | (long)(my_mode) <<8 | curr_colour; // ID, plus blank colour

disable_ir_recving();

#ifndef DISABLE_IR_SENDING_CODE
if ( my_mode == SEND_ALL_EEPROM ) {
for ( uint8_t i = 0; i < 128; i++ ) {
uint8_t has_seen = eeprom_read_byte((uint8_t*)i);
Expand All @@ -467,18 +480,22 @@ int main(void) {
}
}
}

for (uint8_t i=0; i<NUM_SENDS; i++) {
// transmit our identity, without interruption
sendNEC(my_code); // takes ~68ms
//delay_ten_us(3280); // delay for 32ms
}

#endif
enableIRIn();
enable_ir_recving();

// loop a number of times, to have ~1s of recving/game logic
for (int i=0; i<730; i++) {

check_all_ir_buffers_for_data();
delay_ten_us(92 + (MY_ID % 16)); // differ sleep period so devices are less likely to interfere
delay_ten_us(92 + (MY_BADGE_ID % 16)); // differ sleep period so devices are less likely to interfere

}

Expand Down
19 changes: 16 additions & 3 deletions white_night_code.h
Expand Up @@ -2,7 +2,12 @@
// common code so we know def is a badge
#define OUR_COMMON_CODE 0xbb

#define MY_CODE_HEADER (long)(OUR_COMMON_CODE)<<24 | (long)(MY_ID) <<16
#define MY_CODE_HEADER (long)(OUR_COMMON_CODE)<<24 | (long)(MY_BADGE_ID) <<16

// debugging flags
#define TURN_OFF_PWM_COLOUR 1
#define DISABLE_IR_SENDING_CODE 1
#define ENABLE_FLASH_BYTE_CODE 1

// our data packet is OUR_COMMON_CODE << 24 | MY_ID << 16 | mode | data(=0b00{colour})
#define COMMON_CODE_MASK 0xff000000
Expand All @@ -25,8 +30,8 @@

// Zombie game
#define BITTEN_MAX 5
#define MAX_TIME_INFECTED 120
#define MAX_TIME_DEAD 15
#define MAX_TIME_INFECTED 15
#define MAX_TIME_DEAD 5

// Apple codes (device id is first byte, mine is 5c)
#define APPLE_PLAY 0x000487ee
Expand All @@ -52,6 +57,14 @@
// 4 = PB3
#define irInPortBPin 4

#define JUST_RED_ON PORTB |= rgbMask; PORTB &= ~(redMask);
#define JUST_GREEN_ON PORTB |= rgbMask; PORTB &= ~(grnMask);
#define JUST_BLUE_ON PORTB |= rgbMask; PORTB &= ~(bluMask);

#define FLASH_BLUE PORTB ^= bluMask; delay_ten_us(100); PORTB ^= bluMask;
#define FLASH_GREEN PORTB ^= grnMask; delay_ten_us(100); PORTB ^= grnMask;
#define FLASH_RED PORTB ^= redMask; delay_ten_us(100); PORTB ^= redMask;

#define RED 0
#define GREEN 1
#define BLUE 2
Expand Down

0 comments on commit 6b4aa2d

Please sign in to comment.