From 5c75cbc046894fb95ebcf3db5f3eb8db52469df4 Mon Sep 17 00:00:00 2001 From: Mike S Date: Wed, 15 Jan 2014 15:30:31 -0700 Subject: [PATCH 01/14] Add Examples Added examples from https://www.sparkfun.com/tutorials/203 --- Firmware/Old-Simon_C/Makefile | 1112 +++++++------- Firmware/Old-Simon_C/Simon.c | 1282 ++++++++--------- Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde | 45 + .../SIMON_1_BLINK/applet/HardwareSerial.cpp.o | Bin 0 -> 16116 bytes Firmware/SIMON_1_BLINK/applet/Print.cpp.o | Bin 0 -> 25100 bytes .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp | 59 + .../applet/SIMON_1_BLINK.cpp.eep | 1 + .../applet/SIMON_1_BLINK.cpp.elf | Bin 0 -> 11871 bytes .../applet/SIMON_1_BLINK.cpp.hex | 60 + .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o | Bin 0 -> 4112 bytes Firmware/SIMON_1_BLINK/applet/WInterrupts.c.o | Bin 0 -> 5572 bytes Firmware/SIMON_1_BLINK/applet/WMath.cpp.o | Bin 0 -> 6980 bytes Firmware/SIMON_1_BLINK/applet/core.a | Bin 0 -> 93206 bytes .../SIMON_1_BLINK/applet/pins_arduino.c.o | Bin 0 -> 3012 bytes Firmware/SIMON_1_BLINK/applet/wiring.c.o | Bin 0 -> 8872 bytes .../SIMON_1_BLINK/applet/wiring_analog.c.o | Bin 0 -> 6512 bytes .../SIMON_1_BLINK/applet/wiring_digital.c.o | Bin 0 -> 8220 bytes .../SIMON_1_BLINK/applet/wiring_pulse.c.o | Bin 0 -> 6432 bytes .../SIMON_1_BLINK/applet/wiring_shift.c.o | Bin 0 -> 4032 bytes Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde | 69 + .../applet/HardwareSerial.cpp.o | Bin 0 -> 16116 bytes Firmware/SIMON_2_BUTTON/applet/Print.cpp.o | Bin 0 -> 25100 bytes .../SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp | 80 + .../applet/SIMON_2_BUTTON.cpp.eep | 1 + .../applet/SIMON_2_BUTTON.cpp.elf | Bin 0 -> 12250 bytes .../applet/SIMON_2_BUTTON.cpp.hex | 70 + .../applet/SIMON_2_BUTTON.cpp.o | Bin 0 -> 4628 bytes .../SIMON_2_BUTTON/applet/WInterrupts.c.o | Bin 0 -> 5572 bytes Firmware/SIMON_2_BUTTON/applet/WMath.cpp.o | Bin 0 -> 6980 bytes Firmware/SIMON_2_BUTTON/applet/core.a | Bin 0 -> 93206 bytes .../SIMON_2_BUTTON/applet/pins_arduino.c.o | Bin 0 -> 3012 bytes Firmware/SIMON_2_BUTTON/applet/simon.h | 13 + Firmware/SIMON_2_BUTTON/applet/wiring.c.o | Bin 0 -> 8872 bytes .../SIMON_2_BUTTON/applet/wiring_analog.c.o | Bin 0 -> 6512 bytes .../SIMON_2_BUTTON/applet/wiring_digital.c.o | Bin 0 -> 8220 bytes .../SIMON_2_BUTTON/applet/wiring_pulse.c.o | Bin 0 -> 6432 bytes .../SIMON_2_BUTTON/applet/wiring_shift.c.o | Bin 0 -> 4032 bytes Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde | 69 + .../applet/HardwareSerial.cpp.o | Bin 0 -> 16116 bytes Firmware/SIMON_3_BUZZER/applet/Print.cpp.o | Bin 0 -> 25100 bytes .../SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp | 79 + .../applet/SIMON_3_BUZZER.cpp.eep | 1 + .../applet/SIMON_3_BUZZER.cpp.elf | Bin 0 -> 12793 bytes .../applet/SIMON_3_BUZZER.cpp.hex | 77 + .../applet/SIMON_3_BUZZER.cpp.o | Bin 0 -> 6092 bytes .../SIMON_3_BUZZER/applet/WInterrupts.c.o | Bin 0 -> 5572 bytes Firmware/SIMON_3_BUZZER/applet/WMath.cpp.o | Bin 0 -> 6980 bytes Firmware/SIMON_3_BUZZER/applet/core.a | Bin 0 -> 93206 bytes .../SIMON_3_BUZZER/applet/pins_arduino.c.o | Bin 0 -> 3012 bytes Firmware/SIMON_3_BUZZER/applet/wiring.c.o | Bin 0 -> 8872 bytes .../SIMON_3_BUZZER/applet/wiring_analog.c.o | Bin 0 -> 6512 bytes .../SIMON_3_BUZZER/applet/wiring_digital.c.o | Bin 0 -> 8220 bytes .../SIMON_3_BUZZER/applet/wiring_pulse.c.o | Bin 0 -> 6432 bytes .../SIMON_3_BUZZER/applet/wiring_shift.c.o | Bin 0 -> 4032 bytes 54 files changed, 1821 insertions(+), 1197 deletions(-) create mode 100755 Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde create mode 100755 Firmware/SIMON_1_BLINK/applet/HardwareSerial.cpp.o create mode 100755 Firmware/SIMON_1_BLINK/applet/Print.cpp.o create mode 100755 Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp create mode 100755 Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep create mode 100755 Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf create mode 100755 Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex create mode 100755 Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o create mode 100755 Firmware/SIMON_1_BLINK/applet/WInterrupts.c.o create mode 100755 Firmware/SIMON_1_BLINK/applet/WMath.cpp.o create mode 100755 Firmware/SIMON_1_BLINK/applet/core.a create mode 100755 Firmware/SIMON_1_BLINK/applet/pins_arduino.c.o create mode 100755 Firmware/SIMON_1_BLINK/applet/wiring.c.o create mode 100755 Firmware/SIMON_1_BLINK/applet/wiring_analog.c.o create mode 100755 Firmware/SIMON_1_BLINK/applet/wiring_digital.c.o create mode 100755 Firmware/SIMON_1_BLINK/applet/wiring_pulse.c.o create mode 100755 Firmware/SIMON_1_BLINK/applet/wiring_shift.c.o create mode 100755 Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde create mode 100755 Firmware/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/Print.cpp.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp create mode 100755 Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep create mode 100755 Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf create mode 100755 Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex create mode 100755 Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/WInterrupts.c.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/WMath.cpp.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/core.a create mode 100755 Firmware/SIMON_2_BUTTON/applet/pins_arduino.c.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/simon.h create mode 100755 Firmware/SIMON_2_BUTTON/applet/wiring.c.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/wiring_analog.c.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/wiring_digital.c.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/wiring_pulse.c.o create mode 100755 Firmware/SIMON_2_BUTTON/applet/wiring_shift.c.o create mode 100755 Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde create mode 100755 Firmware/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/Print.cpp.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp create mode 100755 Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep create mode 100755 Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf create mode 100755 Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex create mode 100755 Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/WInterrupts.c.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/WMath.cpp.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/core.a create mode 100755 Firmware/SIMON_3_BUZZER/applet/pins_arduino.c.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/wiring.c.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/wiring_analog.c.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/wiring_digital.c.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/wiring_pulse.c.o create mode 100755 Firmware/SIMON_3_BUZZER/applet/wiring_shift.c.o diff --git a/Firmware/Old-Simon_C/Makefile b/Firmware/Old-Simon_C/Makefile index f949a91..29ea664 100644 --- a/Firmware/Old-Simon_C/Makefile +++ b/Firmware/Old-Simon_C/Makefile @@ -1,556 +1,556 @@ -# Hey Emacs, this is a -*- makefile -*- -#---------------------------------------------------------------------------- -# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. -# -# Released to the Public Domain -# -# Additional material for this makefile was written by: -# Peter Fleury -# Tim Henigan -# Colin O'Flynn -# Reiner Patommel -# Markus Pfaff -# Sander Pool -# Frederik Rouleau -# -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device, using avrdude. -# Please customize the avrdude settings below first! -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - - - -# MCU name -MCU = atmega328 - - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -F_CPU = 8000000 - - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - - -# Target file name (without extension). -TARGET = Simon - - -# List C source files here. (C dependencies are automatically generated.) -SRC = $(TARGET).c - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = s - - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = - - -# Compiler flag to set the C Standard level. -# c89 = "ANSI" C -# gnu89 = c89 plus GCC extensions -# c99 = ISO C99 standard (not yet fully implemented) -# gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 - - -# Place -D or -U options here -CDEFS = -DF_CPU=$(F_CPU)UL - - -# Place -I options here -CINCS = - - - -#---------------- Compiler Options ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) $(CINCS) -CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -CFLAGS += -Wall -Wstrict-prototypes -CFLAGS += -Wa,-adhlns=$(<:.c=.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) - - -#---------------- Assembler Options ---------------- -# -Wa,...: tell GCC to pass this to the assembler. -# -ahlms: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs - - -#---------------- Library Options ---------------- -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -# If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = -#PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_FLOAT) - - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -# If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = -#SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_FLOAT) - - -MATH_LIB = -lm - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) - - - -#---------------- Programming Options (avrdude serial bootloader) ---------------- - -#"C:\arduino\hardware\tools\avr\bin\avrdude" -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -C"C:\arduino\hardware\tools\avr\etc\avrdude.conf" -#avrdude -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -SERIAL_AVRDUDE = avrdude -#SERIAL_AVRDUDE_CONFIG = "C:\arduino\hardware\tools\avr\etc\avrdude.conf" -SERIAL_AVRDUDE_PORT = COM3 -SERIAL_AVRDUDE_SPEED = 19200 -SERIAL_AVRDUDE_PROGRAMMER = stk500v1 - -SERIAL_AVRDUDE_FLAGS = -p $(MCU) -P $(SERIAL_AVRDUDE_PORT) -c $(SERIAL_AVRDUDE_PROGRAMMER) -b$(SERIAL_AVRDUDE_SPEED) -#SERIAL_AVRDUDE_FLAGS += -C$(SERIAL_AVRDUDE_CONFIG) -SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - -#---------------- Programming Options (avrdude) ---------------- - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -AVRDUDE_PROGRAMMER = stk200 -#AVRDUDE_PROGRAMMER = ponyser - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = lpt1 -#AVRDUDE_PORT = COM1 - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - -#---------------- Programming Options (STK500) ---------------- -# Programming hardware: stk500 (the AVR MKII ISP version) - -STK500 = stk500 - -# Location of STK500.exe - no trailing '\' -STK500_PATH = C:\Program Files\Atmel\AVR Tools\STK500 - -# The STK500 AVR ISP MKII is USB. The USB drivers must already be installed. -# Do this normally by installing AVR Studio. -STK500_PORT = USB - -#-erase chip -Program Flash -Verify Flash -File name -Serial programing(ISP) -STK500_WRITE_FLASH = -e -pf -vf -if$(TARGET).hex -ms - -STK500_FLAGS = -d$(MCU) -c$(STK500_PORT) - -#-Set ISP frequency to 250kHz. Limit is 1/4 of internal osc which is default 1MHz -#Reduce this to 100kHz if you run into flash verification problems in low-voltage systems -STK500_FLAGS += -I250kHz - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -COPY = cp -WINSHELL = cmd - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: - - - - -# Define all object files. -OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) - -# Define all listing files. -LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d - - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build sizeafter end - -build: elf hex eep lss sym - -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -#New -ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf -#Old -#ELFSIZE = $(SIZE) -A $(TARGET).elf - -AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - -program_stk500: $(TARGET).hex $(TARGET).eep - $(STK500_PATH)\$(STK500) $(STK500_FLAGS) $(STK500_WRITE_FLASH) - -program_serial: $(TARGET).hex $(TARGET).eep - $(SERIAL_AVRDUDE) $(SERIAL_AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT=$(OBJCOPY) --debugging \ ---change-section-address .data-0x800000 \ ---change-section-address .bss-0x800000 \ ---change-section-address .noinit-0x800000 \ ---change-section-address .eeprom-0x810000 - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - - -# Target: clean project. -clean: begin clean_list end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(OBJ) - $(REMOVE) $(LST) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVE) .dep/* - - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ -clean clean_list program debug gdb-config - - - +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + + + +# MCU name +MCU = atmega328 + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +F_CPU = 8000000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Simon + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)UL + + +# Place -I options here +CINCS = + + + +#---------------- Compiler Options ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CFLAGS += -Wall -Wstrict-prototypes +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + + +#---------------- Programming Options (avrdude serial bootloader) ---------------- + +#"C:\arduino\hardware\tools\avr\bin\avrdude" -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -C"C:\arduino\hardware\tools\avr\etc\avrdude.conf" +#avrdude -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F +SERIAL_AVRDUDE = avrdude +#SERIAL_AVRDUDE_CONFIG = "C:\arduino\hardware\tools\avr\etc\avrdude.conf" +SERIAL_AVRDUDE_PORT = COM3 +SERIAL_AVRDUDE_SPEED = 19200 +SERIAL_AVRDUDE_PROGRAMMER = stk500v1 + +SERIAL_AVRDUDE_FLAGS = -p $(MCU) -P $(SERIAL_AVRDUDE_PORT) -c $(SERIAL_AVRDUDE_PROGRAMMER) -b$(SERIAL_AVRDUDE_SPEED) +#SERIAL_AVRDUDE_FLAGS += -C$(SERIAL_AVRDUDE_CONFIG) +SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +AVRDUDE_PROGRAMMER = stk200 +#AVRDUDE_PROGRAMMER = ponyser + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = lpt1 +#AVRDUDE_PORT = COM1 + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + +#---------------- Programming Options (STK500) ---------------- +# Programming hardware: stk500 (the AVR MKII ISP version) + +STK500 = stk500 + +# Location of STK500.exe - no trailing '\' +STK500_PATH = C:\Program Files\Atmel\AVR Tools\STK500 + +# The STK500 AVR ISP MKII is USB. The USB drivers must already be installed. +# Do this normally by installing AVR Studio. +STK500_PORT = USB + +#-erase chip -Program Flash -Verify Flash -File name -Serial programing(ISP) +STK500_WRITE_FLASH = -e -pf -vf -if$(TARGET).hex -ms + +STK500_FLAGS = -d$(MCU) -c$(STK500_PORT) + +#-Set ISP frequency to 250kHz. Limit is 1/4 of internal osc which is default 1MHz +#Reduce this to 100kHz if you run into flash verification problems in low-voltage systems +STK500_FLAGS += -I250kHz + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +build: elf hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +#New +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf +#Old +#ELFSIZE = $(SIZE) -A $(TARGET).elf + +AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + $(AVRMEM) 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + $(AVRMEM) 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + +program_stk500: $(TARGET).hex $(TARGET).eep + $(STK500_PATH)\$(STK500) $(STK500_FLAGS) $(STK500_WRITE_FLASH) + +program_serial: $(TARGET).hex $(TARGET).eep + $(SERIAL_AVRDUDE) $(SERIAL_AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + + + diff --git a/Firmware/Old-Simon_C/Simon.c b/Firmware/Old-Simon_C/Simon.c index 110bbf8..2c14726 100644 --- a/Firmware/Old-Simon_C/Simon.c +++ b/Firmware/Old-Simon_C/Simon.c @@ -1,641 +1,641 @@ -/** - * 6-19-2007 - * Copyright 2009, Spark Fun Electronics - * Nathan Seidle - * nathan at sparkfun.com - * - * Released under the Creative Commons Attribution Share-Alike 3.0 License - * http://creativecommons.org/licenses/by-sa/3.0 - * - * Simon Game ported for the ATmega168 - * - * Fixes and cleanup by Joshua Neal - * - * Generates random sequence, plays music, and displays button lights. - * - * Simon tones from Wikipedia - * - A (red, upper left) - 440Hz - 2.272ms - 1.136ms pulse - * - a (green, upper right, an octave higher than A) - 880Hz - 1.136ms, - * 0.568ms pulse - * - D (blue, lower left, a perfect fourth higher than the upper left) - * 587.33Hz - 1.702ms - 0.851ms pulse - * G (yellow, lower right, a perfect fourth higher than the lower left) - - * 784Hz - 1.276ms - 0.638ms pulse - * - * The tones are close, but probably off a bit, but they sound all right. - * - * The old version of SparkFun simon used an ATmega8. An ATmega8 ships - * with a default internal 1MHz oscillator. You will need to set the - * internal fuses to operate at the correct external 16MHz oscillator. - * - * Original Fuses: - * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xE1:m -U hfuse:w:0xD9:m - * - * Command to set to fuses to use external 16MHz: - * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xEE:m -U hfuse:w:0xC9:m - * - * The current version of Simon uses the ATmega168. The external osciallator - * was removed to reduce component count. This version of simon relies on the - * internal default 1MHz osciallator. Do not set the external fuses. - */ - -#include -#include - -/* Uncomment one of the following, corresponding to the board you have. */ -//#define BOARD_REV_6_25_08 -//#define BOARD_REV_4_9_2009 -//#define BOARD_REV_6_3_2009 -#define BOARD_REV_PTH - -#ifdef BOARD_REV_PTH - -#define CHIP_ATMEGA168 - -#define LED_RED (1 << 0) -#define LED_GREEN (1 << 1) -#define LED_BLUE (1 << 2) -#define LED_YELLOW (1 << 3) - -/* LED pin definitions */ -#define LED_RED_PIN 2 -#define LED_RED_PORT PORTB -#define LED_GREEN_PIN 3 -#define LED_GREEN_PORT PORTD -#define LED_BLUE_PIN 5 -#define LED_BLUE_PORT PORTB -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 1 -#define BUTTON_RED_PORT PINB -#define BUTTON_GREEN_PIN 2 -#define BUTTON_GREEN_PORT PIND -#define BUTTON_BLUE_PIN 4 -#define BUTTON_BLUE_PORT PINB -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 4 -#define BUZZER1_PORT PORTD -#define BUZZER2 7 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_PTH */ - - -#ifdef BOARD_REV_6_25_08 - -#define CHIP_ATMEGA168 - -#define LED_RED (1 << 0) -#define LED_GREEN (1 << 1) -#define LED_BLUE (1 << 2) -#define LED_YELLOW (1 << 3) - -/* LED pin definitions */ -#define LED_RED_PIN 3 -#define LED_RED_PORT PORTC -#define LED_GREEN_PIN 2 -#define LED_GREEN_PORT PORTD -#define LED_BLUE_PIN 0 -#define LED_BLUE_PORT PORTC -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 2 -#define BUTTON_RED_PORT PINC -#define BUTTON_GREEN_PIN 5 -#define BUTTON_GREEN_PORT PINC -#define BUTTON_BLUE_PIN 1 -#define BUTTON_BLUE_PORT PINC -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 3 -#define BUZZER1_PORT PORTD -#define BUZZER2 4 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_6_25_08 */ - - -#ifdef BOARD_REV_4_9_2009 - -#define CHIP_ATMEGA168 - -/* LED pin definitions */ -#define LED_BLUE_PIN 5 -#define LED_BLUE_PORT PORTB -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD -#define LED_RED_PIN 2 -#define LED_RED_PORT PORTB -#define LED_GREEN_PIN 2 -#define LED_GREEN_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 0 -#define BUTTON_RED_PORT PINB -#define BUTTON_GREEN_PIN 1 -#define BUTTON_GREEN_PORT PINB -#define BUTTON_BLUE_PIN 7 -#define BUTTON_BLUE_PORT PIND -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 3 -#define BUZZER1_PORT PORTD -#define BUZZER2 4 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_4_9_2009 */ - -#ifdef BOARD_REV_6_3_2009 - -#define CHIP_ATMEGA168 - -#define LED_RED (1 << 0) -#define LED_GREEN (1 << 1) -#define LED_BLUE (1 << 2) -#define LED_YELLOW (1 << 3) - -/* LED pin definitions */ -#define LED_RED_PIN 2 -#define LED_RED_PORT PORTB -#define LED_GREEN_PIN 2 -#define LED_GREEN_PORT PORTD -#define LED_BLUE_PIN 5 -#define LED_BLUE_PORT PORTB -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 0 -#define BUTTON_RED_PORT PINB -#define BUTTON_GREEN_PIN 1 -#define BUTTON_GREEN_PORT PINB -#define BUTTON_BLUE_PIN 7 -#define BUTTON_BLUE_PORT PIND -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 3 -#define BUZZER1_PORT PORTD -#define BUZZER2 4 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_6_3_2009 */ - -/* Define game parameters */ -#define MOVES_TO_WIN 14 -#define TIME_LIMIT 3000 /* 3000ms = 3 sec */ - -#define sbi(port_name, pin_number) (port_name |= 1< 256) - { - TIFR0 = (1< 0) { - delay_us(1000); - } -} - -/* Light the given set of LEDs */ -static void set_leds(uint8_t leds) -{ - if ((leds & LED_RED) != 0) { - sbi(LED_RED_PORT, LED_RED_PIN); - } else { - cbi(LED_RED_PORT, LED_RED_PIN); - } - if ((leds & LED_GREEN) != 0) { - sbi(LED_GREEN_PORT, LED_GREEN_PIN); - } else { - cbi(LED_GREEN_PORT, LED_GREEN_PIN); - } - if ((leds & LED_BLUE) != 0) { - sbi(LED_BLUE_PORT, LED_BLUE_PIN); - } else { - cbi(LED_BLUE_PORT, LED_BLUE_PIN); - } - if ((leds & LED_YELLOW) != 0) { - sbi(LED_YELLOW_PORT, LED_YELLOW_PIN); - } else { - cbi(LED_YELLOW_PORT, LED_YELLOW_PIN); - } -} - - -#ifdef BOARD_REV_6_25_08 -static void init_gpio(void) -{ - /* 1 = output, 0 = input */ - DDRB = 0b11111111; - DDRC = 0b00001001; /* LEDs and Buttons */ - DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ - - PORTC = 0b00100110; /* Enable pull-ups on buttons 0,2,3 */ - PORTD = 0b01000000; /* Enable pull-up on button 1 */ -} -#endif /* BOARD_REV_6_25_08 */ - -#ifdef BOARD_REV_4_9_2009 -static void init_gpio(void) -{ - /* 1 = output, 0 = input */ - DDRB = 0b11111100; /* button 2,3 on PB0,1 */ - DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ - - PORTB = 0b00000011; /* Enable pull-ups on buttons 2,3 */ - PORTD = 0b11000000; /* Enable pull-up on button 0,1 */ -} -#endif /* BOARD_REV_4_9_2009 */ - -#ifdef BOARD_REV_PTH -static void init_gpio(void) -{ - /* 1 = output, 0 = input */ - DDRB = 0xFF & ~(1< 70; x--) { - for (y = 0; y < 3; y++) { - sbi(BUZZER2_PORT, BUZZER2); - cbi(BUZZER1_PORT, BUZZER1); - - delay_us(x); - - cbi(BUZZER2_PORT, BUZZER2); - sbi(BUZZER1_PORT, BUZZER1); - - delay_us(x); - } - } -} - -/* Play the winner sound and lights */ -void play_winner(void) -{ - set_leds(LED_GREEN|LED_BLUE); - winner_sound(); - set_leds(LED_RED|LED_YELLOW); - winner_sound(); - set_leds(LED_GREEN|LED_BLUE); - winner_sound(); - set_leds(LED_RED|LED_YELLOW); - winner_sound(); -} - -/* Plays the current contents of the game moves */ -static void play_moves(void) -{ - uint8_t move; - - for (move = 0; move < nmoves; move++) { - toner(moves[move], 150); - delay_ms(150); - } -} - -/* Adds a new random button to the game sequence, by sampling the timer */ -static void add_to_moves(void) -{ - uint8_t new_button; - - /* Use the lower 2 bits of the timer for the random value */ - new_button = 1 << (TCNT2 & 0x3); - - moves[nmoves++] = new_button; -} - -/* Toggle buzzer every buzz_delay_us, for a duration of buzz_length_ms. */ -static void buzz_sound(uint16_t buzz_length_ms, uint16_t buzz_delay_us) -{ - uint32_t buzz_length_us; - - buzz_length_us = buzz_length_ms * (uint32_t)1000; - while (buzz_length_us > buzz_delay_us*2) { - buzz_length_us -= buzz_delay_us*2; - - /* toggle the buzzer at various speeds */ - cbi(BUZZER1_PORT, BUZZER1); - sbi(BUZZER2_PORT, BUZZER2); - delay_us(buzz_delay_us); - - sbi(BUZZER1_PORT, BUZZER1); - cbi(BUZZER2_PORT, BUZZER2); - delay_us(buzz_delay_us); - } -} - - -/* - * Light an LED and play tone - * - * red, upper left: 440Hz - 2.272ms - 1.136ms pulse - * green, upper right: 880Hz - 1.136ms - 0.568ms pulse - * blue, lower left: 587.33Hz - 1.702ms - 0.851ms pulse - * yellow, lower right: 784Hz - 1.276ms - 0.638ms pulse - */ -static void toner(uint8_t which, uint16_t buzz_length_ms) -{ - set_leds(which); - switch (which) { - case LED_RED: - buzz_sound(buzz_length_ms, 1136); - break; - - case LED_GREEN: - buzz_sound(buzz_length_ms, 568); - break; - - case LED_BLUE: - buzz_sound(buzz_length_ms, 851); - break; - - case LED_YELLOW: - buzz_sound(buzz_length_ms, 638); - break; - } - - /* Turn off all LEDs */ - set_leds(0); -} - -/* Show an "attract mode" display while waiting for user to press button. */ -static void attract_mode(void) -{ - while (1) { - set_leds(LED_RED); - delay_ms(100); - if (check_button() != 0x00) - return; - - set_leds(LED_BLUE); - delay_ms(100); - if (check_button() != 0x00) - return; - - set_leds(LED_GREEN); - delay_ms(100); - if (check_button() != 0x00) - return; - - set_leds(LED_YELLOW); - delay_ms(100); - if (check_button() != 0x00) - return; - } -} - - -/* Wait for a button to be pressed. Returns one of led colors (LED_RED, etc.) - * if successful, 0 if timed out */ -static uint8_t wait_for_button(void) -{ - uint16_t time_limit = TIME_LIMIT; - uint8_t released = 0; - uint8_t old_button; - - while (time_limit > 0) { - uint8_t button; - - /* Implement a small bit of debouncing */ - old_button = button; - button = check_button(); - - /* - * Make sure we've seen the previous button - * released before accepting new buttons - */ - if (button == 0) - released = 1; - if (button == old_button && released == 1) { - /* Make sure just one button is pressed */ - if (button == LED_RED || - button == LED_BLUE || - button == LED_GREEN || - button == LED_YELLOW) { - return button; - } - } - - delay_ms(1); - - time_limit--; - } - return 0; /* Timed out */ -} - - - -/* Play the game. Returns 0 if player loses, or 1 if player wins. */ -static int game_mode(void) -{ - nmoves = 0; - while (nmoves < MOVES_TO_WIN) { - uint8_t move; - - /* Add a button to the current moves, then play them back */ - add_to_moves(); - play_moves(); - - /* Then require the player to repeat the sequence. */ - for (move = 0; move < nmoves; move++) { - uint8_t choice = wait_for_button(); - - /* If wait timed out, player loses. */ - if (choice == 0) - return 0; - - toner(choice, 150); - - /* If the choice is incorect, player loses. */ - if (choice != moves[move]) { - return 0; - } - } - - /* Player was correct, delay before playing moves */ - delay_ms(1000); - } - - /* player wins */ - return 1; -} - -int main(void) -{ - - /* Setup IO pins and defaults */ - ioinit(); - - /* Main loop */ - while (1) { - /* Wait for user to start game */ - attract_mode(); - - /* Indicate the start of game play */ - set_leds(LED_RED|LED_GREEN|LED_BLUE|LED_YELLOW); - delay_ms(1000); - set_leds(0); - delay_ms(250); - - if (game_mode() != 0) { - /* Player won, play winner tones */ - play_winner(); - } else { - /* Player lost, play loser tones */ - play_loser(); - } - } - - return(0); -} - +/** + * 6-19-2007 + * Copyright 2009, Spark Fun Electronics + * Nathan Seidle + * nathan at sparkfun.com + * + * Released under the Creative Commons Attribution Share-Alike 3.0 License + * http://creativecommons.org/licenses/by-sa/3.0 + * + * Simon Game ported for the ATmega168 + * + * Fixes and cleanup by Joshua Neal + * + * Generates random sequence, plays music, and displays button lights. + * + * Simon tones from Wikipedia + * - A (red, upper left) - 440Hz - 2.272ms - 1.136ms pulse + * - a (green, upper right, an octave higher than A) - 880Hz - 1.136ms, + * 0.568ms pulse + * - D (blue, lower left, a perfect fourth higher than the upper left) + * 587.33Hz - 1.702ms - 0.851ms pulse + * G (yellow, lower right, a perfect fourth higher than the lower left) - + * 784Hz - 1.276ms - 0.638ms pulse + * + * The tones are close, but probably off a bit, but they sound all right. + * + * The old version of SparkFun simon used an ATmega8. An ATmega8 ships + * with a default internal 1MHz oscillator. You will need to set the + * internal fuses to operate at the correct external 16MHz oscillator. + * + * Original Fuses: + * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xE1:m -U hfuse:w:0xD9:m + * + * Command to set to fuses to use external 16MHz: + * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xEE:m -U hfuse:w:0xC9:m + * + * The current version of Simon uses the ATmega168. The external osciallator + * was removed to reduce component count. This version of simon relies on the + * internal default 1MHz osciallator. Do not set the external fuses. + */ + +#include +#include + +/* Uncomment one of the following, corresponding to the board you have. */ +//#define BOARD_REV_6_25_08 +//#define BOARD_REV_4_9_2009 +//#define BOARD_REV_6_3_2009 +#define BOARD_REV_PTH + +#ifdef BOARD_REV_PTH + +#define CHIP_ATMEGA168 + +#define LED_RED (1 << 0) +#define LED_GREEN (1 << 1) +#define LED_BLUE (1 << 2) +#define LED_YELLOW (1 << 3) + +/* LED pin definitions */ +#define LED_RED_PIN 2 +#define LED_RED_PORT PORTB +#define LED_GREEN_PIN 3 +#define LED_GREEN_PORT PORTD +#define LED_BLUE_PIN 5 +#define LED_BLUE_PORT PORTB +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 1 +#define BUTTON_RED_PORT PINB +#define BUTTON_GREEN_PIN 2 +#define BUTTON_GREEN_PORT PIND +#define BUTTON_BLUE_PIN 4 +#define BUTTON_BLUE_PORT PINB +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 4 +#define BUZZER1_PORT PORTD +#define BUZZER2 7 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_PTH */ + + +#ifdef BOARD_REV_6_25_08 + +#define CHIP_ATMEGA168 + +#define LED_RED (1 << 0) +#define LED_GREEN (1 << 1) +#define LED_BLUE (1 << 2) +#define LED_YELLOW (1 << 3) + +/* LED pin definitions */ +#define LED_RED_PIN 3 +#define LED_RED_PORT PORTC +#define LED_GREEN_PIN 2 +#define LED_GREEN_PORT PORTD +#define LED_BLUE_PIN 0 +#define LED_BLUE_PORT PORTC +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 2 +#define BUTTON_RED_PORT PINC +#define BUTTON_GREEN_PIN 5 +#define BUTTON_GREEN_PORT PINC +#define BUTTON_BLUE_PIN 1 +#define BUTTON_BLUE_PORT PINC +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 3 +#define BUZZER1_PORT PORTD +#define BUZZER2 4 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_6_25_08 */ + + +#ifdef BOARD_REV_4_9_2009 + +#define CHIP_ATMEGA168 + +/* LED pin definitions */ +#define LED_BLUE_PIN 5 +#define LED_BLUE_PORT PORTB +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD +#define LED_RED_PIN 2 +#define LED_RED_PORT PORTB +#define LED_GREEN_PIN 2 +#define LED_GREEN_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 0 +#define BUTTON_RED_PORT PINB +#define BUTTON_GREEN_PIN 1 +#define BUTTON_GREEN_PORT PINB +#define BUTTON_BLUE_PIN 7 +#define BUTTON_BLUE_PORT PIND +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 3 +#define BUZZER1_PORT PORTD +#define BUZZER2 4 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_4_9_2009 */ + +#ifdef BOARD_REV_6_3_2009 + +#define CHIP_ATMEGA168 + +#define LED_RED (1 << 0) +#define LED_GREEN (1 << 1) +#define LED_BLUE (1 << 2) +#define LED_YELLOW (1 << 3) + +/* LED pin definitions */ +#define LED_RED_PIN 2 +#define LED_RED_PORT PORTB +#define LED_GREEN_PIN 2 +#define LED_GREEN_PORT PORTD +#define LED_BLUE_PIN 5 +#define LED_BLUE_PORT PORTB +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 0 +#define BUTTON_RED_PORT PINB +#define BUTTON_GREEN_PIN 1 +#define BUTTON_GREEN_PORT PINB +#define BUTTON_BLUE_PIN 7 +#define BUTTON_BLUE_PORT PIND +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 3 +#define BUZZER1_PORT PORTD +#define BUZZER2 4 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_6_3_2009 */ + +/* Define game parameters */ +#define MOVES_TO_WIN 14 +#define TIME_LIMIT 3000 /* 3000ms = 3 sec */ + +#define sbi(port_name, pin_number) (port_name |= 1< 256) + { + TIFR0 = (1< 0) { + delay_us(1000); + } +} + +/* Light the given set of LEDs */ +static void set_leds(uint8_t leds) +{ + if ((leds & LED_RED) != 0) { + sbi(LED_RED_PORT, LED_RED_PIN); + } else { + cbi(LED_RED_PORT, LED_RED_PIN); + } + if ((leds & LED_GREEN) != 0) { + sbi(LED_GREEN_PORT, LED_GREEN_PIN); + } else { + cbi(LED_GREEN_PORT, LED_GREEN_PIN); + } + if ((leds & LED_BLUE) != 0) { + sbi(LED_BLUE_PORT, LED_BLUE_PIN); + } else { + cbi(LED_BLUE_PORT, LED_BLUE_PIN); + } + if ((leds & LED_YELLOW) != 0) { + sbi(LED_YELLOW_PORT, LED_YELLOW_PIN); + } else { + cbi(LED_YELLOW_PORT, LED_YELLOW_PIN); + } +} + + +#ifdef BOARD_REV_6_25_08 +static void init_gpio(void) +{ + /* 1 = output, 0 = input */ + DDRB = 0b11111111; + DDRC = 0b00001001; /* LEDs and Buttons */ + DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ + + PORTC = 0b00100110; /* Enable pull-ups on buttons 0,2,3 */ + PORTD = 0b01000000; /* Enable pull-up on button 1 */ +} +#endif /* BOARD_REV_6_25_08 */ + +#ifdef BOARD_REV_4_9_2009 +static void init_gpio(void) +{ + /* 1 = output, 0 = input */ + DDRB = 0b11111100; /* button 2,3 on PB0,1 */ + DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ + + PORTB = 0b00000011; /* Enable pull-ups on buttons 2,3 */ + PORTD = 0b11000000; /* Enable pull-up on button 0,1 */ +} +#endif /* BOARD_REV_4_9_2009 */ + +#ifdef BOARD_REV_PTH +static void init_gpio(void) +{ + /* 1 = output, 0 = input */ + DDRB = 0xFF & ~(1< 70; x--) { + for (y = 0; y < 3; y++) { + sbi(BUZZER2_PORT, BUZZER2); + cbi(BUZZER1_PORT, BUZZER1); + + delay_us(x); + + cbi(BUZZER2_PORT, BUZZER2); + sbi(BUZZER1_PORT, BUZZER1); + + delay_us(x); + } + } +} + +/* Play the winner sound and lights */ +void play_winner(void) +{ + set_leds(LED_GREEN|LED_BLUE); + winner_sound(); + set_leds(LED_RED|LED_YELLOW); + winner_sound(); + set_leds(LED_GREEN|LED_BLUE); + winner_sound(); + set_leds(LED_RED|LED_YELLOW); + winner_sound(); +} + +/* Plays the current contents of the game moves */ +static void play_moves(void) +{ + uint8_t move; + + for (move = 0; move < nmoves; move++) { + toner(moves[move], 150); + delay_ms(150); + } +} + +/* Adds a new random button to the game sequence, by sampling the timer */ +static void add_to_moves(void) +{ + uint8_t new_button; + + /* Use the lower 2 bits of the timer for the random value */ + new_button = 1 << (TCNT2 & 0x3); + + moves[nmoves++] = new_button; +} + +/* Toggle buzzer every buzz_delay_us, for a duration of buzz_length_ms. */ +static void buzz_sound(uint16_t buzz_length_ms, uint16_t buzz_delay_us) +{ + uint32_t buzz_length_us; + + buzz_length_us = buzz_length_ms * (uint32_t)1000; + while (buzz_length_us > buzz_delay_us*2) { + buzz_length_us -= buzz_delay_us*2; + + /* toggle the buzzer at various speeds */ + cbi(BUZZER1_PORT, BUZZER1); + sbi(BUZZER2_PORT, BUZZER2); + delay_us(buzz_delay_us); + + sbi(BUZZER1_PORT, BUZZER1); + cbi(BUZZER2_PORT, BUZZER2); + delay_us(buzz_delay_us); + } +} + + +/* + * Light an LED and play tone + * + * red, upper left: 440Hz - 2.272ms - 1.136ms pulse + * green, upper right: 880Hz - 1.136ms - 0.568ms pulse + * blue, lower left: 587.33Hz - 1.702ms - 0.851ms pulse + * yellow, lower right: 784Hz - 1.276ms - 0.638ms pulse + */ +static void toner(uint8_t which, uint16_t buzz_length_ms) +{ + set_leds(which); + switch (which) { + case LED_RED: + buzz_sound(buzz_length_ms, 1136); + break; + + case LED_GREEN: + buzz_sound(buzz_length_ms, 568); + break; + + case LED_BLUE: + buzz_sound(buzz_length_ms, 851); + break; + + case LED_YELLOW: + buzz_sound(buzz_length_ms, 638); + break; + } + + /* Turn off all LEDs */ + set_leds(0); +} + +/* Show an "attract mode" display while waiting for user to press button. */ +static void attract_mode(void) +{ + while (1) { + set_leds(LED_RED); + delay_ms(100); + if (check_button() != 0x00) + return; + + set_leds(LED_BLUE); + delay_ms(100); + if (check_button() != 0x00) + return; + + set_leds(LED_GREEN); + delay_ms(100); + if (check_button() != 0x00) + return; + + set_leds(LED_YELLOW); + delay_ms(100); + if (check_button() != 0x00) + return; + } +} + + +/* Wait for a button to be pressed. Returns one of led colors (LED_RED, etc.) + * if successful, 0 if timed out */ +static uint8_t wait_for_button(void) +{ + uint16_t time_limit = TIME_LIMIT; + uint8_t released = 0; + uint8_t old_button; + + while (time_limit > 0) { + uint8_t button; + + /* Implement a small bit of debouncing */ + old_button = button; + button = check_button(); + + /* + * Make sure we've seen the previous button + * released before accepting new buttons + */ + if (button == 0) + released = 1; + if (button == old_button && released == 1) { + /* Make sure just one button is pressed */ + if (button == LED_RED || + button == LED_BLUE || + button == LED_GREEN || + button == LED_YELLOW) { + return button; + } + } + + delay_ms(1); + + time_limit--; + } + return 0; /* Timed out */ +} + + + +/* Play the game. Returns 0 if player loses, or 1 if player wins. */ +static int game_mode(void) +{ + nmoves = 0; + while (nmoves < MOVES_TO_WIN) { + uint8_t move; + + /* Add a button to the current moves, then play them back */ + add_to_moves(); + play_moves(); + + /* Then require the player to repeat the sequence. */ + for (move = 0; move < nmoves; move++) { + uint8_t choice = wait_for_button(); + + /* If wait timed out, player loses. */ + if (choice == 0) + return 0; + + toner(choice, 150); + + /* If the choice is incorect, player loses. */ + if (choice != moves[move]) { + return 0; + } + } + + /* Player was correct, delay before playing moves */ + delay_ms(1000); + } + + /* player wins */ + return 1; +} + +int main(void) +{ + + /* Setup IO pins and defaults */ + ioinit(); + + /* Main loop */ + while (1) { + /* Wait for user to start game */ + attract_mode(); + + /* Indicate the start of game play */ + set_leds(LED_RED|LED_GREEN|LED_BLUE|LED_YELLOW); + delay_ms(1000); + set_leds(0); + delay_ms(250); + + if (game_mode() != 0) { + /* Player won, play winner tones */ + play_winner(); + } else { + /* Player lost, play loser tones */ + play_loser(); + } + } + + return(0); +} + diff --git a/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde b/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde new file mode 100755 index 0000000..c0ec37d --- /dev/null +++ b/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde @@ -0,0 +1,45 @@ +/* + +Simon Experiments #1 +Blink +Pete Lewis +Sparkfun Electronics +10/13/2010 + +This example code is in the public domain. + +////////////////////////////////////////////////// +SETUP & UPLOAD INSTRUCTIONS +1. Select "Tools" from the upper window menu. +2. Select "Serial Port" and then select the COM PORT that your FTDI BASIC is connected on. (It most likely will be the COM 2 or higher). +3. Select "Tools", then "Board", then "LilyPad Arduino w/ ATmega328" +4. Click on the "upload button" - it looks like a box with an arrow to the right. +////////////////////////////////////////////////// + +*/ + + + +int ledPin = 3; // The simon board has 4 LEDs on it. + // For this example, we're just going to use one. + // The other LEDs are on pins 3,5,10 and 13. + // For fun, try switching "ledPin" to another LED and see what happens! + + +// The setup() funtion runs once, when the sketch starts + +void setup() { + // initialize the digital pin as an output: + pinMode(ledPin, OUTPUT); +} + +// the loop() function runs over and over again, +// as long as the Arduino has power + +void loop() +{ + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + delay(1000); // wait for a second +} diff --git a/Firmware/SIMON_1_BLINK/applet/HardwareSerial.cpp.o b/Firmware/SIMON_1_BLINK/applet/HardwareSerial.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..5201b37e47077aab517decf9fcfa8e55817c07ef GIT binary patch literal 16116 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 U*;m&HS0Og-l{T)Y92`gd-!^+>ng9R* literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/Print.cpp.o b/Firmware/SIMON_1_BLINK/applet/Print.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..0fccf779a77a8cb0b18e63663cfcef105e70b611 GIT binary patch literal 25100 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 M;REtGE;9Z6Hy+PRp#T5? literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp new file mode 100755 index 0000000..986895a --- /dev/null +++ b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp @@ -0,0 +1,59 @@ +/* + +Simon Experiments #1 +Blink +Pete Lewis +Sparkfun Electronics +10/13/2010 + +////////////////////////////////////////////////// +SETUP & UPLOAD INSTRUCTIONS +1. Select "Tools" from the upper window menu. +2. Select "Serial Port" and then select the COM PORT that your FTDI BASIC is connected on. (It most likely will be the COM 2 or higher). +3. Select "Tools", then "Board", then "LilyPad Arduino w/ ATmega328" +4. Click on the "upload button" - it looks like a box with an arrow to the right. +////////////////////////////////////////////////// + +*/ + + + +#include "WProgram.h" +void setup(); +void loop(); +int ledPin = 3; // The simon board has 4 LEDs on it. + // For this example, we're just going to use one. + // The other LEDs are on pins 3,5,10 and 13. + // For fun, try switching "ledPin" to another LED and see what happens! + + +// The setup() funtion runs once, when the sketch starts + +void setup() { + // initialize the digital pin as an output: + pinMode(ledPin, OUTPUT); +} + +// the loop() function runs over and over again, +// as long as the Arduino has power + +void loop() +{ + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + delay(1000); // wait for a second +} + +int main(void) +{ + init(); + + setup(); + + for (;;) + loop(); + + return 0; +} + diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep new file mode 100755 index 0000000..7c166a1 --- /dev/null +++ b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf new file mode 100755 index 0000000000000000000000000000000000000000..45b9907b155923fe884ca3ae8a35a6bdd2e75995 GIT binary patch literal 11871 zcmc&)4U|;XeZO~RKW5q4Z&*Me4Du=B><7z-_`wRIqQGuIgSHzVvoo{1BfB%>%q%EH z9S~^Dp=D=hF)=5JNQ_BNJOQ7>wg ze9RaCKIyfua^SS(wYZE(R>?d-c~y|5uO*OsAm_zah0DnOV9eD^O4=P3Y#kyh-*ZdZXVUVs!30ouRhS3wV{27NhQ({!du1!RBM-0UilC2HjEzySDu_T`gPE+zgs)@1;l(x`cc?y zPRP)B?bvQPa3(#T9UlRHUU9cw!1WzA+C9>DxOVJnSv&R_Q9G6u|NYAB(Yn#PZ`X}B z%xlT7&UfXld?No?{!squ{5SF^@_}51Y|T~5&YVwn=c;5fH%Y!KPf5>{&&)bLtH0#| zYiLF5*`clEc@=M4ev-`QE96MNQXa|sibJgFeezW<#ib<6-D!08mJ6D&R7PeJ}3aw(tAzFlK1jwD zM&8fgFg&+Sc29O7`*{86p9CUZI z*ZZ;~w{-4bpSyZ)+qt=|bKcJ8vf|Lr@{{vg+id)iY(6Wdot)D;{q21(9@<%U@@i-S zdt~4DYfdgu7RQvu!q#hG0UQ>`#J}js&fI&s$j*;Vyy6v0Ft+&~3&EEg4TC-i5CrrC zt^%wjU$pxq+xmAv{#7lTso^I8&w_uqi+?LR$!MCu?zbAVjP2*UkavQA9`JKi zK>MN%)O{K55TUW}2(H0IA}MwPNk=ooN%3i5L!nq)JVRMD(hZdD30!u-TVeksD9hRr z4QCQ5t8KYB1$rnpI2cQdvkDET5^1pwNi>{@N7BLvPqBC`Bd!CI zi48?ltyW@3G}Skl*lC3m!|{wz`PvfgAMV8sxIBVc&qUf!fl9{W8xxVJ*ujos{jp4F zaBC`-iHcFU){M>35EB;SYq&gOVWkkQP(K7JnMh@W4Mq5TAAdpNZDpZ z6yH3a%30ueJ>@YJ%~Mvs29!rusNo@foW(t5mD31(!h7_y7hs0HpB z36#k{BP+lG%)tv*xm-zBE1iC@o|!U7W^M_d0GeLed|} z%V=KqQZkJb^96&I+=R@fxL|64W}m9)ICTy zi&^4wFMc#d^IuYD(Q1e>ez@qF%H*2)=E!R_yMn`N8eVpf_#@csVRfPqj1U7*UrB`z z8CKrkXB@k`p|0PWD;r_u(pM2@j2+U;8K?3l5=-^ST1#S_^AR)yI>$eGmX z2RSK5Ek(+{YD@z{evC5zUh-!XtxiSzg;d5hboS@CCd1U9!%cpSWv+dg+R9MIL=825 zjO)gN)@*9kDJ|u57bK$oG<1H7t5$iMPo0W*UMBL=c4%|#r;efH;bUrKNIv;F_T43! z*eK>)BsU7wPHq!bJ`07W9ic%CZj!RkuZq*HGE#YdoT#1WX2r$yDdZLwsfK^!@j43v+rLn3OZQ;%yN^liP5JM~ZF-g?+ZhB z${&Cw>dDxR%P!OJUQi~RW6IPl?}Dl9l{eE^H`M1Tc(CgeVz#H4nJP)xDM`dBNt9@f zv1gukeqpB$%J8359gN8(D5!m4noSSScmCcFnCw|z{PnKJ$qOFt;3nh0{k0j zIQR;MtNzm#z6vn?U2<+L!^;hqiqk}wH#IvPu>?9E;e)!K8%CgF+Ai!q-1CCmwG^V_ zpBptV$lV(#_)UI!I4|4+ql36Ac`Fm;o=P9f;CVnE1p~7hC#S02xcOKN&o24LHlHk; z&ysjjk~2K?Q-)u`UrSD+%5{_Qu{xf;@_k$H0QLS3Hy>-{c}g|{z@AG#o6kylj>*L~ z{{_PrvO&(TZL0RxHptELo{D-_Xr8F9z8NgkR--e|=M+S~g*NfO8*1SP!Do=?RIu)$Lel zP~{kSklLi6Y}1iaTHPVqn#lLNtxYb}sB!wBUTt}yf0A`BDKf2}rM=%b;+c;{62Fr4BPa-rW8ve|KN7jo({!LXP8ZPmym9! zl&jJ=+-=+0QW zXXC?xfo%|7xNg(kTdcP0mT7LAwPwTmO?UN#lJJ1N zqOGgB!EiFkRX$!~Oblp<0vI?qXxI!m3G@`eW(@-xa*`#Vn*!UC*iy}*9~6Y9vARm)#4yc*9Wu^uW}MoGi-73!mC3qVBoc$^me7t=%V4axr9T{Q2?qH`PAncC9F9ZvPaSe(j#fda+~HDO9M+SW?a@2quBwC4*7KyaYp)G-1eXTe!HV|>)NMGPj`hc* zkpK_-3Pcz`VD{0iqe%sQi2K`KXcVtL)H=gHQNH-WZaNc6W$e@6A$2BPbe^nj^pUT9 zhOF*I=f|o(x;lx$$d=9PZWmY{Wma05EBtluDg3zW9{W^kGMtWYG9!clk8 z>GGvceXnrlw0n2Wnh#;FI!D?(@fMlkRJ^ONuY2o8 zJOwO%h6n8$sA{$?zw&aHyy9F0apB_^y?GhVOZ&W%obM^F`=n6~ecZTU;vz|keuCE& z+GnH&7JD>Y1Eo3*G?apuH}H##g<>2?QRtuVe4%3hph>@j#+4^K%hgzA54S|s=Fx-_)_!?2v|To zRv=mR4T8HMrnqyo9(Lxcjp5F37)&!Z3&FtQkn+bPdw#P}Wt0Goza=i5V(Rht)-hZHK}BjKY`2bZw>x^*J_IElCl17z0_PF0)D?|YK)`8!Gi+R-J;0{4Y>JbMxw+&37%{q8_O4>Ok3-8&d_n>MIzB<;BM(?&eh^(&2cEMkM{?9Ld$Z z0tYs(=EY3yj<`&mo8W=O>VnR>39j{=v;K1v^Fj0fsdhUz5d_j!d+0vOM%6~{A2ZUaX!0v!O(k=6kD6wq${0BHU%)9CXT&g4`N zeV&S$`Ihwh68n2Vvltv_jgbFNiJZqzra#(q1@>7Te?6Yp0hgTd^M5<;{=ZZre*rXq z9l1wge}4j+znYzz{sHI%z$fEkzW-Qa{|0C$pK}xMfp+)Dt!y>w!B&s@)qytgGrk!m z^g_@tD{Ubt50=PzjO4bzt%TlOLVpr8e-8;7P}m5Nf7Sk3zcdA6kK)whsbxX47AD`% zE4dOQevfz#w3*-P;qSOh&Ujx2?T+t9pt(B9zy<5egN~PNcgo*5=pVc2w?I4oz2aA( zxjL%V_9$VIe|{rlS^&?#xkNq(wAs_L|Ai&;_7eK$68cWioI}ib|0HO$2dBRsj zme7xYp3uMFjBh{a-7bHh0qx`~#TP+44@cDZ2BD?#qE1@rP`fgd=s9F}bT3foUI}EZxA#2xm zE0`HdVk6eC@LkbVLK7wXt6(I7@1&9sTU?A<_LjPsr_K=+YcLv0Sy-sL)e1cOBQSH& zU9=azV2^6SLn3JUTuPK?Wey1OV6E-l{Mqt@z^vXXsw z;mfW<0PRbQIsxl`YSvg)wdafPOV literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex new file mode 100755 index 0000000..710e32b --- /dev/null +++ b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex @@ -0,0 +1,60 @@ +:100000000C9461000C947E000C947E000C947E0095 +:100010000C947E000C947E000C947E000C947E0068 +:100020000C947E000C947E000C947E000C947E0058 +:100030000C947E000C947E000C947E000C947E0048 +:100040000C94A4000C947E000C947E000C947E0012 +:100050000C947E000C947E000C947E000C947E0028 +:100060000C947E000C947E00000000002400270009 +:100070002A0000000000250028002B0000000000DE +:1000800023002600290004040404040404040202DA +:100090000202020203030303030301020408102007 +:1000A0004080010204081020010204081020000012 +:1000B0000007000201000003040600000000000029 +:1000C000000011241FBECFEFD8E0DEBFCDBF11E08E +:1000D000A0E0B1E0E6E9F3E002C005900D92A230A5 +:1000E000B107D9F711E0A2E0B1E001C01D92AB3039 +:1000F000B107E1F70E949D000C94C9010C94000027 +:100100008091000161E00E947C0168EE73E080E074 +:1001100090E00E94F8008091000160E00E947C0164 +:1001200068EE73E080E090E00E94F800089580910E +:10013000000161E00E945C0108950E9422010E947A +:1001400097000E948000FDCF1F920F920FB60F9272 +:1001500011242F933F934F935F936F937F938F93CC +:100160009F93AF93BF932091060130910701409177 +:1001700008015091090170910A01DA01C901029642 +:10018000A11DB11D672F6A5F6D3730F06D57DA0121 +:10019000C9010396A11DB11D60930A018093060158 +:1001A00090930701A0930801B09309018091020187 +:1001B00090910301A0910401B09105010196A11D48 +:1001C000B11D8093020190930301A0930401B093A9 +:1001D0000501BF91AF919F918F917F916F915F9139 +:1001E0004F913F912F910F900FBE0F901F90189538 +:1001F000EF92FF920F931F937B018C018FB7F894BE +:100200004091060150910701609108017091090128 +:100210008FBF2FB7F8948091060190910701A091AC +:100220000801B09109012FBF841B950BA60BB70BDA +:10023000E816F9060A071B0760F71F910F91FF9058 +:10024000EF900895789484B5826084BD84B5816010 +:1002500084BD85B5826085BD85B5816085BDEEE6CE +:10026000F0E0808181608083E1E8F0E0808182605D +:100270008083808181608083E0E8F0E0808181601C +:100280008083E1EBF0E0808184608083E0EBF0E04C +:10029000808181608083EAE7F0E0808184608083F0 +:1002A000808182608083808181608083808180689A +:1002B00080831092C1000895282F30E0C90186562E +:1002C0009F4FFC0194912A573F4FF9018491882355 +:1002D00091F0E82FF0E0EE0FFF1FE859FF4FA591D6 +:1002E000B491662329F48C91909589238C93089579 +:1002F0008C91892B8C930895482F50E0CA01825528 +:100300009F4FFC012491CA0186569F4FFC01949196 +:100310004A575F4FFA0134913323D1F1222331F14F +:10032000233021F4809180008F7705C0243031F490 +:10033000809180008F7D8093800018C0213019F457 +:1003400084B58F7704C0223021F484B58F7D84BDBD +:100350000DC0263021F48091B0008F7705C0273082 +:1003600029F48091B0008F7D8093B000E32FF0E0FE +:10037000EE0FFF1FEE58FF4FA591B491662329F4AD +:100380008C91909589238C9308958C91892B8C93D3 +:060390000895F894FFCF70 +:02039600030062 +:00000001FF diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o b/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..fc35559c482c1c9169b2f3e5c5a42de92ccc6322 GIT binary patch literal 4112 zcmcInTWDNW6g_wDq^3<8n@OKqWeO=48izho(Uv}J8f|EkhQ#87!P}e6?POqbXPmid zjZj*AAzGn6svs3n?1!LOLH!d{&@Y94D1txsL(nfJh=N#*Yn{8#y(iO_>W7=0d)C=| zpLO=x=QTMwc<>&_ag-59jjOb!)VVgLo`SJoJ8V#E)f(k=JL|i8I^3>qXUsXgXxSpA zGQFy!V;59PxdPjj$`;h_PPc1&$BvF}C+F;0qEuU|8tO61Mg1!F8tU2InSqzOfRfQe zW_2`KjaxpM%nj7InYKz8sZ183qL+hkSYdorS?!W(k8SO7D|U&QoelJ(WX|M8mDlZ9 z)uzXHHuV`@tk#1#tEqL`Ty0wm&y0GS8t0GSm*A`O>I`fz?yF7COb21q%==*}KORI; zB`i0K^=fdu(ku?o<`akF-Hp;rC9D<4hlUT0c!Lj&4vq~C502b7?rpw(n`k$Cdk+qc z94PvAFhoklzM?Hm*6Z;Sw#6Al6fxQ%^-8H%T&Kni#AE9tuvsaGK`GD8Uaf`Y`~uCrBZu7d>J;&HsBdFWljJFUL7oh34#Z0kOf-UHs?Z3kzNjkU(b@t+$DJe)F}B@k8%)!yC_Gt4jBPs<_Cku3JJ&t1YeGWeR8Zmq)qz@`Bm*KPth0R9t<+>^4tGDz3t!TH@-=rV3Z@M7zzM zl!~i&g56%N4y8@a_HavkTH4G@4)K~7fSK+_JhLtS{HbY#>wa1q+3=uzv`WE69_(0a7II^@n%k<$+;a(%2Ld`u%yan|>!4IM4`$0YLoH4=2 zP(LVm0QC{U+~-FHqf%93CK^&lA?CVr4axa8>XXE>&7Kgqku5 zx5Vd3)bA5B0g#ta966e=6H5%|E&QHf{-gDgU<{`|5u8W;h2TEaUkhgZ-w{j9KUnxD z!Q}i^Fz50ovBZymClb6^Fi&x};CA3Of*Cfak(GJzZO-wcW6i?L1;Y2z_)ukhxYow! z3Z7eG6v^ddz&LU;FUFCRym1aL;-`)$+~MF5j%#w;ODuYhYx2Xp&FJqWmOOAS4v8T) srrB_6eu*bfz4Qf4)|WAxwPt*#FR6*SUYb*Qbo{`yYkuKm-ps!G2eMVDn*aa+ literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/WInterrupts.c.o b/Firmware/SIMON_1_BLINK/applet/WInterrupts.c.o new file mode 100755 index 0000000000000000000000000000000000000000..55cc05d35be811b5a0d51a236f88575e39b29589 GIT binary patch literal 5572 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 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/core.a b/Firmware/SIMON_1_BLINK/applet/core.a new file mode 100755 index 0000000000000000000000000000000000000000..3dde725300928dcab84527b5d9d6f4ac53a589c9 GIT binary patch literal 93206 zcmeFa34B(?)jxi3o)7{A0s#R9?xzZrMaP{Ie}GEr<}@~H8ss;wIvNTb@Xif&~t=eUejE%wyfzq zqb1_jT(h>S(KwVfHTzB*Eg0FcmbRd!h+eJ(Uo7a zwx+hWrb%t}>#7=8*VeBusi<$MYxcx(ZB0dEeG|f{ExXYEo@_W(74>zMOZ6iiYl>}G)5T9s>&+G?XYb!$YZ zcxCnSnI*wrH3=S9tc?0hs;yxEwDpL_tn#WgHFb+>lPNvCY+YGRZCQD3)uMID+zT6# zU&)g^c@v?yiJjZXqOYYkVx1hkNT+*_(ysB~0TE}IU4S#JI$3UyY6DcQcft14&DN{(1 zSUWtCs!0-}!&6-jD+sdIVHV_@1RPsiU)H>+vS-37lLSNFij_8ofHT*YHPn)T=dLX~ zuj;h=#!4nDu$US?yRodUvVJY46cQKYTmJH@DtO9^z9#G|px57mg4yC$+8?dBsRWI$ zrKYYvw<5PbumAcQ)9`G!kie40oxn4VJb`1HyX7Rd>fDNk1_sbS&%U&R_{m#s=HZ7Y zzRwEs^JmXSRA=TF%&@|x{V!Xz_*mcf@p7}|d&|Ah=6S37c;03>6&mNs-e7N_=MV8G z3>rEhHfV^S_Ezz0i8;bHdOC87X+r_L~S7gf|TlNipH3nkc#PGVBx|fg?=*_!rH@Z;Fqw z5O7K#G+J@EWHB95`qCjK73ra2ZRysQZf#auA3v>+pPqIU#IC{9mp`dqpOn5vbIQ5? zXTk9Mm_Yko0&Mvg`Cm)QZ}gvw@Y5!P@q0W*^-%G@!T+Zt_cLIt_a@|V7+%P~-=7lU zdyH6$x0P!AcmCQRzouaQig|fbBd24qGbgWFUJiN9_4Tz)d1dPw^J;6#^VU>U$Z>(xkH_vNou0)pSR`QJUWK=hx z(N|3%q;7}9u9!}@;9(`gCjde|L-1%>0D3P%`6dD(^+HqAK&O|H$aXL@fvJOW8jPnO9#>y27=Hp! zN%g5+O_!hQ?P4z#P%I&5sNanV?J*Pfg22bFJ?zPkbnN4Rk8tely2CoUYY$)0A??~j zU16M}@o`Il;hR@=;5}w)KwyPCb0wsh$C3&uhMKcDw3@V>6|tWycKRFweHX(dR{M3p z!yNlRMul|+Hhfs>5589XsxX(Yb;^EroCwJYEy>uLQz)O(?(twM&JX_%aLyO zXFl2viS5=$J!1gdP_^cN@ zh`}d4i-&yHo!5!M=a}am;j`Yb@{`YYGKd)RtUn`#e;n{c;jS9G^MihUf|*1LQrq9LB2x$CdQnfTP%^g|sB?=!GPgi@oLOYfvNMb0 zk*l`S^)jd50vRtV-Tja z$JuL`zRaIGjVur=5u{r2o3^^sU(@LehrMrFWv5@&>3gDUwX2IY)QYaAF2C9vU_<=2 zD6Mbq#5Ux6yI;@S+5J}Lp0VAP zyXLY@Q(HT0yw`6|@1lKS=BZ=(Y!v<*;8RQJ>-8JG9dF#|Y8|p+@P_oRv0F2@WAbb`zRvBPZ+GtLY{h${9nV!${hi$~cjD>SwWs6lj_n=y zb==yqrQ@=W`i_#0r5y`8@;WlxGryVHKDK@2zfm*tj@|Dbknj1IXZ@tnXFt9j<`0?YRhD9{?eLUkXYL0w&Gz

|lHc-#2 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 M@`MoX5ixH69k#ozZ~y=R literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/pins_arduino.c.o b/Firmware/SIMON_1_BLINK/applet/pins_arduino.c.o new file mode 100755 index 0000000000000000000000000000000000000000..85b1e160350c3cbaaf9119263145468d7f6901f6 GIT binary patch literal 3012 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 Q#&O0^@vWJ1a1Ql<04;^aivR!s literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_analog.c.o b/Firmware/SIMON_1_BLINK/applet/wiring_analog.c.o new file mode 100755 index 0000000000000000000000000000000000000000..248bb21713c2f63cdb95289c691815ac7b635759 GIT binary patch literal 6512 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 SbAQ2%)A$#kOQ;WK%>M=Zz@!rZ literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_pulse.c.o b/Firmware/SIMON_1_BLINK/applet/wiring_pulse.c.o new file mode 100755 index 0000000000000000000000000000000000000000..ac72d3c27118c6f4e6a61d1c628060b25ba0c97d GIT binary patch literal 6432 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 a{Fu)!{cW>%S}}RVvz4P;AEqGY9R35(T==p8 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_shift.c.o b/Firmware/SIMON_1_BLINK/applet/wiring_shift.c.o new file mode 100755 index 0000000000000000000000000000000000000000..21da0280890d8e3e6f4bf7c93d017819ff5439ed GIT binary patch literal 4032 zcma)9OKenC82-;pTPiJu@={VB1L38@ogzd?Q6N?Xg#bcOBbDLKqtgq+Ofz#^D8WE5 ziVFinOEqqc3ym&hXV3%_x-g0x5g&`HA(~g6XlASiM*DB^H~aU3K*V1X^RDH3nLwM7( z=GSJ7RTFv|)kZhv?&_3&w;-ym6vRrSCu+eaqlm0Q-I#m{U8y^NPQ_n+Br4O9bj#U3 zuUJ~$-o9pivIp8Rx13A*rBb1ibo1_ZZeCa?C4x#eAyL<8}K^h6hpcv)ECmhaHm)+)(rh)d%N<#|T)`pw-)q-fD1; z!MT&r+NT-&0)yD1dDyO)pvl1hYMEBsH0UB%2d@v_9K1C+J~(}7(a`mwn?t`kcbt!% zkN{=)&|1 zTH2h@I!s#5SOQeiV>KlQEw!kmJESQ~Eh@=|^nj%nm830gkV8Yt9jZ03l0(*Iu|Wz$ z>S!3!21js=KY^XV&}YB9&(|6AYwkL&^H21#YQ{+cgg?fJXQ*<4vNg;M6o9bq&6Uk0bPVFS3S>0v#sErCrV{<2z>FrAw5re5CleuNLn4e^`rl1TSVA3Jp zO=aJ(&-5D+7<@az4BLZ?O`LvJ-z9DZe0+odUmV}Wwl=7qcYwr*^=*c3IbD}9*x^>J zuLFj#wMCZVLT`Zce%SfBppSQa4~ESFmDix`jTkK50bjIU*EEqTY^=xcj;-f{Gso`V zkGO=V=1HrBh(__)4444VTgUD(J3i4nV|Ug(z7mBrWm0U+x&Vc7MZ z1&`J{iF)tCX2trr=4ic>sP_kKtcRu6>b(VSb3kQ2k`|E|vA#j*(RzjH!Tz%zXszBy z;5G+THXuzJsj$3 z*sQS5e@WC{Cu8H$nD~U9Vg2YzsK@o(ymNt!jn4xKfBTG$FMUsy zd?aJz6YuZj_3&v!iR+sh)p^rGiR)d7>g@DT;<{6#Iy)_txIU$*&XW!$juY4!s(LS? zpJ|@UVdLk0nThpOCdE(w<&{e9+q-pJDkUI$Qrj)rsYz$&9*zFd-c&i4*Zf4TT&gMA zQYusG9Z2cVP%1^WkaNo^evoQkm8_Tde7Ep?*~7P*?;&Njh5f5$i>wE-KgnMJE+99L zzL=aB9I_IFG2a4L8~#3!?^fD*H?|wT1GwApuYk`Pz6|)1;g^9~!_NVa82&l1*KmNG zH2f0q6>_|LDEi$6&b>a5!8LRO-zMi_K;FTiohcuZ!@dy6TD0RD$|uJD81M_jUj%+< z`0K#$$<1}({kCiP#c@0mUhOo)huTk`3WG;z~(NA#5@?`y2lWI95$Yfjo%W9*%smKImVm@ z@>y&=_mn&V%tg3oxDV9dRm6}F7<)gEXV2XEz&8x%@23WGULZ)6v+eA>^x2-#dlI81 P`2AyJ^c_U~GqC>yN5jqx literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde b/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde new file mode 100755 index 0000000..18fd0b4 --- /dev/null +++ b/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde @@ -0,0 +1,69 @@ +/* + +Simon Experiments #2 +Button +Pete Lewis +Sparkfun Electronics +10/13/2010 + +This example code is in the public domain. + +////////////////////////////////////////////////// +SETUP & UPLOAD INSTRUCTIONS +1. Select "Tools" from the upper window menu. +2. Select "Serial Port" and then select the COM PORT that your FTDI BASIC is connected on. (It most likely will be the COM 2 or higher). +3. Select "Tools", then "Board", then "LilyPad Arduino w/ ATmega328" +4. Click on the "upload button" - it looks like a box with an arrow to the right. +////////////////////////////////////////////////// + +*/ + + + +int ledPin = 3; // The simon board has 4 LEDs on it. + // For this example, we're just going to use one. + // The other LEDs are on pins 3,5,10 and 13. + // For fun, try switching "ledPin" to another pin number and see what happens! + +int buttonPin = 2; // The simon board has 4 BUTTONS on it. + // For this example, we're just going to use one. + // The other BUTTONS are on pins 2,6,9 and 12. + // For fun, try switching "buttonPin" to another pin number and see what happens! + +int button_state; // This variable will be used to "store" the state of the button. + // It will allow us to know whether the button is pressed or not. + + +// The setup() funtion runs once, when the sketch starts + +void setup() { + // initialize the led pin as an output: + pinMode(ledPin, OUTPUT); + // initialize the internal pull-up on the button pin: + digitalWrite(buttonPin, HIGH); + // initialize the button pin as an input: + pinMode(buttonPin, INPUT); + +} + +// the loop() function runs over and over again, +// as long as the Arduino has power + +void loop() +{ + + // Using the digitalRead() function, we can read the state of a pin, and know whether or not it is Logic HIGH or Logic LOW. + // When you press the button, you are actually causing an electrical connection between the pin on the micro (buttonPin) and Logic LOW (aka GND). + // Every time the loop starts over it will first set the variable "button_state" to the state of the pin. + // It is refreshing every time the loop starts over. + int button_state = digitalRead(buttonPin); + + // The second step in the loop is to actually do something with this variable. + // In this next "if statement" we are going to decide to do something. Here we are going to turn on the ledPin for a second. + if(button_state == 1){ + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + } + +} diff --git a/Firmware/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o b/Firmware/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..5201b37e47077aab517decf9fcfa8e55817c07ef GIT binary patch literal 16116 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 U*;m&HS0Og-l{T)Y92`gd-!^+>ng9R* literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/Print.cpp.o b/Firmware/SIMON_2_BUTTON/applet/Print.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..0fccf779a77a8cb0b18e63663cfcef105e70b611 GIT binary patch literal 25100 zcmds!l$V#oDo0sr7AXwO%N7Y^9F1l)>v*>sUvkqpfWn70dYQ6o&cz)_$I|*V#E?@YDCN z_xZ5T{;p>|>sj};*IE0JP4gDbx7HdJYnGWXWK8c_#(V{l)1ARYbD=3U#l{Y^XABuW zI5uRMz06)dFn6Fa8AWFB;Pas}CYEPnLuL&=ckso-jTs>NEMqb=Y;4Hj!HgL*+#+t^ z$uPWl_{>4mbBsBu*j|tmq`Rqf$kf5-<G^4^q44%rkzz2h)i|rIIWdZ$BKW2>RuN-{UU}H}6 zgUsUe>B*vG3^FF+1(CYYN~I=>`AUL_8xkO*~jpi)q^OTy$qN=iE1&~O^(@r z#iy9u1;fB(P*A1uG_e`EhFRGRD81(Crg~;(`LenXHtcsNmr-j9e_#RllXuo2b3L` zYT0P)Y}Y(-jzv4WPwaWFW%D_oR5Cget+3;292AK#sQ-$cS?a77GqQJw&)7p7Z~F^v(xilfU~@P z_&`B9eN~XpVmL@wwHaa6I0saa;@5proaPtG*4zz)*Q%VV0WpbtzqO zhq}QXo~rOriPR3`^`2#76^xjB)bZ(+?X||<%S0Ks*hIatJJm9^KfYHClhk6QjEK}$ zd-%j!t&q!oD;$sI$LVHV#!2~HhgDFW`w-E$I!m;WCZDU43hZA_YkzCfel%yj3ha-< zzF?^63Px#UK9@-qm|cX2df#GfnI|S=e6RM)d4GY|yg%UsQ-x0*6?nQQt*7~m#3Z#H zFFsC-n|!X;D)9V5TF*DBXEU11mpt~x5UA0jPKQc zG4DNi&3hXks5&2;D)97ZT2IThfWgpQo^+ft!>>585tYy9kP5OqoHom@)GWI+OOyYY zro|n}|A3uhYPSc4+RYFY_?B!=gjS4dUXRTLiAHC%Fk;&)wMFmyP$F?`M%A>G;tkf!* ziF}x=z`n2Tok?5MiA6la48sht_M`t8girS!%vQ~sT+ve9Uf`H9OkaamPUOHHfBouFBn zsp`+2D@z%2E~~6>EJGo*NG#0s;%UWGlSML1Td>}35Q6DcG)n>lhTq>Hr{=OtJ(H#3)ZdI?3ZBn<_^y~H!i5aDdzLrdMtEfgs z62~J+w8djb{Da2s}Wl4=*OaOMVI$u8T#rLi`X13+2x|?>+PzDx7cb; zGdU8|H|;n3vFK~Lq#w($%(sa}>_W|7>)F@a>WH`4Rhs5=5~FFfy~BL&i=F9oc3(KG@QG z_CA~4Q@5pdoIQMS+jHAa-!^nxR?qvL$2!9_8|bG|7wlCUf%ECJmcZ4aAb-dq^ z)$^L?J-esBaK`4pAa}+yr(3L_YHe?JPijtUpb5&>*E+jrpB>VTy{0RB5YKR5t)E9~ zs>z)fbS~*E?`-Pa)cK9hZ+AY>`9$Y)od-L$B@Uwfp83h^KiP4|(A^(*zy8F~pFi_N zfn8%a*x9FCnpu%~ZKgf!dtdc$**#|O)}lL$mfJbSmlxF*T~}m#b9-}!jyXN+LXn;MurT3lULzCVe za`d!!ay}_I-)41J6kJ>I8~c>CcifZx!Skv8kh}qr78D z#|0ge(Z^@@vW2zpqOJV{yQ;T2#Uj-By`ruA9LDCm_6D30U3bjveP_!jTY|B<_RZ{` z+#b{OL3eNW8wH07?3iI=p0#`I_iT{Aj@V$_rSJJ4*xCtK99`A3Zn9tERIOj8*KFY_ zQ_!2?45^;XQF>+xwSf=cQ?%}V$4*$g&f+*r1IV zx-(%vcsAJ^YRlA5+ee+f+3WHVzf8?^^md@=Cr9>nzc%SvjMeWtt)^jm_4Uney{IHXW%i2HFi@`PQryXwgkX<74CrjaPFrJ7f0+9k#Jrl9E~r* zit6Xj??rw%nx1ifd_g3arDG@DNBe zKGX+ae!_4=mt7mC3-$l6{IBe?<)Qz9CN=*szv?bq9VQg z;M3Wr^Pss}Q<(-;m1C~#vR8H4tGnzM`j)uAA(6gx>NA?EzpnUnUPABD_6tUSsy4Jf z(UF&${?nChph=yLntOULIVR}qziker_pLcc`ykY(*7HQyjsE&DI-O43-e=b;awIu6I zzD0_t_|hk$;(HxmwYYt4Wlf7&hgSo>+VC}puRxxBli{ljUsd=D*zmQ4uQGhQ;45Im z*8;xE@Z8^5z=mi1zRK{Z-dDheN9n$5enV45o8bw$uQfbB_7zA;Ie;tZH?+S9H|rEV zrsn3A61{U1PD!{=yk3yIhPlb6pk7WiUN_R*L{qqVrf9t8lWQ z|Ho(f)r-$@-8G|`)1#qr-qM9tCYVeJmp50mw3*iW8*0kiPV_|GxpQaXeVtdCzPjo( zy1F#F`ZT&VX><)~bZgV-))~BjXq$)Tqr^npc{ad%leE?Rtf;=;4eO1L)= zeQdpklT!9Ax7TQ5<29LRyat<6;<9)1eO`5)X>V+;U)@+!ov6Z_7mSUN!)8d@u*NRA zSJI$WJV&ls)-|`a6fbpabW6?Jiu%TCER-$_mmcd#TOD4~CmT08V9_&pi(LzAmw!su z)lKb{4R|bI00+egR;{FyDN~&DplRo=MeCKXYpZN1M_J0-u5Yd}jlqIlShMNJdkr<>9lB}Z<$$YcT6rp-Xoq5;$7o=lrQIyr}qo308)E3OS9NjR z{w&3%X@KUslZ|-3}kR!00az+VI6XXDDprT(@?{B1;Lx;=+k(%+XO{$BCQ$Jd|g@4FFyH^QH8|9yWu zBL3d;+K+3B`gSHR3Pf`78ANjfwcnMdPJwzmc$Gom6Ie{>DM6^*t}*Z#?f7>Gdc6#MI%k#H8;_r4i)332~s{Vc)@%K3V z9YH+H$Di42`Cg6q+lk4TZod5{;&0DoVSh~a{QcjEzg_T`uD%~e{5=JK`uv#U`OCwD zmvw@+ztZzZsstr4fI>E;MG3I)Rv?9XiHm1KTH% zL&wGgrfU%S`Fjq7F!zaJnWE)kZ9|El$ha@Ih2@T>xB}-FV205xm|y#iJ5U> z02DKPvV;-~e{buQF}Je&@m!fhiMf^44|8P55(k=?4U2m+2glin3UoT7cw@H{i8At!`NC^)y52b{Mnx`eq zaT-UCuSz)K!o$pa66P}@j-RM;zf4KsilhHWN|<}dIQoC8glWSva9>K{5*x>O;D7X? z1pY>w8VPf4j$=GrCt>cX;usJ7zeAM8xZ)TOf1i?mocXbYgZiFf{!zjSXFtLGR>Is9 z#4#T5Yd9xC{%0BdXvGPi$#IMa?u%6DGZ6`YCK8?+311KiUlIwgh=j`{;rd9pUBW^8 zO*S`4I4J)VbC-nqj4j0Yyf2bII1ddDf6JF$Ht(YHavZ5GTUx$AVUdFiFI?*GZEKs$ zTWVH2zM-b2DH*74Dz9p4zP{X@q?MO5*ici^QqD8AbO&R7bvO+Rm3j^q)p+O8a@fHW zs-#u&jALCIT{^q;sl7wlJ||h_((|^x7JS&Gm*l0r?APQcsjB2Dw?$NbYkV5 z@g}W2omhFN#Yrnqr@lN@(#$_0kDe}-mp8Pv)=tG(KxJENrvWOes{^R5Uyn1}*4kD$ zEwANUB_83n)*{r}UK!Y|ZEr{#`<8*7zQd5xrF)@3UGiM2yu50CMR{|3OHKK@`j)o# ziU!U>ekZc>NaOlov3x&-dCI*7nfn7iL9A@}3(4}x!*;{j%*K4+{+aeiad*#OFwb!o zh<+n@iEusquMmC)`fG&oD|u5b%sE{z%qP$~;cr8~LAVt5Hw%9a`a6a1gZ|sXA3^`P z@Snj?3ZDu-D9m~Ow(uJ0-FXGdPd)#qFYA?w`)7oypDer__hrJ>NQ)n6JNs_jn?3zH z;YqmP>goAA0s7yI`}aNlgTgQ3{wq)ajPP5y^I}@&%Qct$5$_1A{v_cn+)wlLMZ%+C zU+U@S3%5Xjjqpy~tAziEx^umxf9f{~vkyBx{dQrf%>$nPQQ@yZf56kfD9k?mqo;pg z_=nIB#O74<%@O_u^y54|zoXFRH_(@Q`uW2A4p`~w>x8d`{jI{exZf>&5cdBlybJt$ zk8`n=WM0%4dpw^!1P&pe7cK#>@NCM-{E`i66rKrQPnIp?Mq%zdwvr{UZDPL)`rAeS zG|I3;^xL8TuIPUc{R5(Z9{Qh>`Ot;@OqjuE#3l><{<3fa+)L(S0C`K8_J_r08f=aV zF9Z+F4D6Au86?c6C?v-LkTZnoX9`*BHH(Zk;knqw!kjnD$g(ZILbw=dtH_eJLF{jX zeY@CjZM$BWb9Sqzzs1wv>+$!5xwbvz>34hjXUY7M0(nt50e+n<<@o~{b=i&b92R~Z zd{pe+x{D9`p{qP$>QD9bQ_1ob;IqQ4%N(-gwUCUw4#EGG!lTdum1G)2YK0Tv7P6$> zAof#Wzg3v$N87|6H`61`a_%DIe1P(xF!!a8lf~yR$tX_){JbdK4gRgzOu!s^L-d2d zM}#MWGfxWq&xQYN;WF?@Pha5arwP9an;F6%gBN-FrJjBRnTINnO~Tyw-AtD9catX= z!!_d`;g#SYkVm~?w?NegE5%w<#?*#vjd}@&PpfI1e?~4upzxv0*uYxmB zC@Wv(1`50VI$81>O`d>#Kjz;=;S%r^u}8C-bA&n97Ln-$vQ(IR{xY)otRchaO899J z{wjEb*t5Qygp0sm_w=`U`uoV-I6%HH%(T17lGhVtM{4)78m(;u}%<}(9 zZ1|P^FT(g^EaoU#zSdeCVvrNCKbb6f<&lwBDeT7y*MTRAJzSU)VUF{Q$O!;sp)j{V zSCGZ$Dl&X_z|UIYSHLY|!*RY*^kdN(Um+)g?`dBX=1{!b(|^a)KSnNu0p#bxY{UIz zDZ@XLQHHDGzgPH6;J3wwWq4ooJD~rBJl451M}_&lEE`{L)MuOwpL<}RFZu-h6pFqV z`thRYUZzC!r6*y$iT+0DFA)7o=;w-_!*8+ZJE31D`W~zgO=Og9Dr{PX=YYTD>A&jf z?-X7Eo4*%s2LFhR@;?p#kBFY%$@d6<2>uxvZ8!<_`jy!K3+$g4oBgnPN%%GJyX0{I z$Opn4Ge^kM7ny^DeEG+4;=-fA1!PVZNJ5zXIFWo-uz#3BMww^8{(RwbFyCQuKS!BJ zmVE`+Trz_*g%jXX;ql-F!X@C#$g;1vTA1U!QkeVvHNv##{*U(Ddu$|g0z%lYWESZb zVU~gWUFvCeH(B-!+>4WG|07}A^SMYp?e~&pZ?I38_RkB`{uN=`ze$$;fZO+iF(l1l z(N6>)5iSM~gfo3!4-uw4&mr{rn-Jy_%`cDaoGr{c^4$aV7{X>W zS)QA2uMVcoS)ykfP7`Ju^1T4<*>v;B^4z?{F_Qz6W*uNP+Vt`#lxM9GHVLymZxUvEenXh;$+^M5-U{5oG?vX z)>!5dry+!XRPWo&fj$H4!wTG&m=drVD0xE+Mqvl@5J_3{Y0|ZPxtgQ$+`G|up88#O`v<5<(~dZG6xr= z8kgGFk!2pWdHVHa77%hHF16oEmhb!Bo_;%-0}Zkhm)hS?mT~)tr{6;!i4VwAxYT|h zS)Ro&dHPq#@|=Ck)4xNO=jmZj|1nwmbO6>e_0RJoecp}m^n8b<&$1#<@AkCv%$n}$ z-JUjqOdxYTz1!0k2Kwcm{z|fpnQBj8N0#x^=IPgyivmCV)Uh!@n8S(PuY2qf!o|2J zJf;iUl;A#77&o_`Xxas$r%w)j>N&qxk!9>v3p1Z)kK2Uld$Y$k3ZIYrc46Gye5OzO zabrVxm)M+#`yP)U7p9-*g>f@43DZxn$8QNw$NdA34-3;+A=Mn3k5T@RZ z0nzgeQRmbQVcPRNQT0naJ4If;tB~g*lbn_Y}-c@^?f( z3GBX`u;P%%s0TCnw8#5}xvsx1Ondj;MC^GUr*ru~ga^UKozG*Allfc53g= z^I@|bHs2RL`A5Plzl9(; zHA;9rnCFJHF9Y-YJb5hqxHJEeP(nUWJ($l5p5^J<=-vg0o@aKtHf|PXAKl_{hcMfm z=Xz>?zh}d#6>AVV37l9>3?=^IT8Y-W*|0tC1cT2y^M?*`L}^7v?jw z)Z@9r^usegUBfGdF;s&05m?*FEuxLzwFv&-L_K@N;3d!+wvS z6=r+#>`(1~@7cILIR`d`e^Z#x5zcG34;MZELnHO{Khfh!o;}b0^!w3VVdlHkl6uN`Vfu0J8WO=?$-Qd;)6X2w&wS4h z&m3(b3?M6o+5T%hZWLxa^ITHxzv|iS@bo)9Ji7=mgJolvk%V1L} zTnTOyUISh)ydKQ+P}<)JzFqi9@cqIp&o1E%_~-d1?UzHpUzl~_IVSZFf&W#Q_4=dm zi{O73X1#b`se7bMVKkHB*`?~oczT{uS`JRgxx$0M{ExZRlNSoJ-+7Ly_Enw@^RQf? zAU<m+3>E?v7i$g(bNC(HhJ2RVTc$o;rb3V=_GegLExX20IOUcsybA{Oj3&_$Jd}fdnxGyE+IZj!Qi_EjfE6J<`qzo6C zZLo?g-)pLc>9&q6eb*q&c4{We_nJ0gw#Rxh0kRPnc`@#r$#RZ&qcHt%B}-r5BFy&b zAWOe@3ny^jPEOzh@-1985quZeVZep>fb7IYrvLlNGB$Pz^X%wB@;H1z9>GOsJM1AB M;REtGE;9Z6Hy+PRp#T5? literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp new file mode 100755 index 0000000..56686a0 --- /dev/null +++ b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp @@ -0,0 +1,80 @@ +/* + +Simon Experiments #2 +Button +Pete Lewis +Sparkfun Electronics +10/13/2010 + +////////////////////////////////////////////////// +SETUP & UPLOAD INSTRUCTIONS +1. Select "Tools" from the upper window menu. +2. Select "Serial Port" and then select the COM PORT that your FTDI BASIC is connected on. (It most likely will be the COM 2 or higher). +3. Select "Tools", then "Board", then "LilyPad Arduino w/ ATmega328" +4. Click on the "upload button" - it looks like a box with an arrow to the right. +////////////////////////////////////////////////// + +*/ + + + +#include "WProgram.h" +void setup(); +void loop(); +int ledPin = 3; // The simon board has 4 LEDs on it. + // For this example, we're just going to use one. + // The other LEDs are on pins 3,5,10 and 13. + // For fun, try switching "ledPin" to another pin number and see what happens! + +int buttonPin = 2; // The simon board has 4 BUTTONS on it. + // For this example, we're just going to use one. + // The other BUTTONS are on pins 2,6,9 and 12. + // For fun, try switching "buttonPin" to another pin number and see what happens! + +int button_state; // This variable will be used to "store" the state of the button. + // It will allow us to know whether the button is pressed or not. + + +// The setup() funtion runs once, when the sketch starts + +void setup() { + // initialize the led pin as an output: + pinMode(ledPin, OUTPUT); + // initialize the button pin as an input: + pinMode(buttonPin, INPUT); +} + +// the loop() function runs over and over again, +// as long as the Arduino has power + +void loop() +{ + + // Using the digitalRead() function, we can read the state of a pin, and know whether or not it is Logic HIGH or Logic LOW. + // When you press the button, you are actually causing an electrical connection between the pin on the micro (buttonPin) and Logic HIGH (aka power). + // Every time the loop starts over it will first set the variable "button_state" to the state of the pin. + // It is refreshing every time the loop starts over. + int button_state = digitalRead(buttonPin); + + // The second step in the loop is to actually do something with this variable. + // In this next "if statement" we are going to decide to do something. Here we are going to turn on the ledPin for a second. + if(button_state == 1){ + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + } + +} + +int main(void) +{ + init(); + + setup(); + + for (;;) + loop(); + + return 0; +} + diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep new file mode 100755 index 0000000..7c166a1 --- /dev/null +++ b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf new file mode 100755 index 0000000000000000000000000000000000000000..110397a959c5b027c408c0cba839f7113ebf088a GIT binary patch literal 12250 zcmcgy32q`}h6WM*W8 z!y$nnz&dM)s{`>#`?$_76+t*$5MJc5)$tN}ogSCTrY_1S@0k(@K;TMZVov2p) zaZ>?sRf(NTQD$A{*FY0;Nby)?E+a|jH$W%>pP8uw+3nGJku1Z~meDck+kwO}T(<$yLZTxk}lYtCFc) zP#%>>r0@Q3&VF)sZ|FvAU`5M`fo-Ju6>WPyD2MU^IhwDK2lAEjV7>~im&nmvsXUM? zlLvFlTf)sEJFuXc3K==6Q>jZKc# z=I7+UD)-2}-~H|Q8d%l|%eKR^6fE0&CvnnLD5X>cpm@xiHV`%;q60r{_Ge_ zcc5hB6AD+H{~%`soC#GT?caZ4Xx=(Q!$W;Tch-&ly$I}E9BP?3BJaNLp^lH_cy8&o z)g8Z+Be{F#=T008otQXYJ2~gr4U-*zlY2VXGk?kZdvc@u?w!9UAK14ickg+GSA{w! zUY2)kW&H)YmmN)4Z?if+lL9d1mjflEd>Lh0?7fFH|31sA?QkH5RojK@F5qcnrN9=dHDa^zI#KX6Zh2apEGhjqr%wj$+4x8`SmB}0v^Gr z|LyqXD}Lb<=i@E(sW*}H4ia9^W`JhEM!+ioYe?7W3P7JYhNmsR3H(PjZbTT8B!?$RxKYX+Ji79P}lM{<16VZ$aKvO&s&x#9B$i@d^=@u)wGnVe@ zPwuiJ$-zWcT;X!GeyA6hAo~P^G7Hh&4=fc=Y)D39VkaAl_r|l~{%z?vY#)OHP1qC* zGaf=bhU^nxE*GK&;(LLmlIg6KOozPH zLPbg;6-}PX>yBrwfpBJrQaQ~v*wj^#P)yVn?;^toq!L-pCr4dz^7+bXo8MO&N6>sF zrLO|>$+CG01eyp+%AX?$l>U@6lEX- zSIO$UxgA%z4 zn&cnhVbWq0uB3X~CBJHF_X<#bQh8URJ-6dv0`Lhgm&!S8WR2VmC6eR0Y(U7%h?QSW z&gC>t1Z0rN1(GfDU4?^3K(Bys3x$~~dW3AHG3~@ElYHs~alQ~$!+30B;XXW4$Ra39 zsd~Pq(kXj;=wsG!&2EJ@H0~sN^sp2){ z+7I!NQKG?UUdHmWCog;RvW}*fq1G&989jiC^#+|X44yJ~7RW+0P?mCSlm2G)TP0;^W}lvIPEPn;z=3gu&x z-f*^qN458nw3Hz(^<$qP8u?bp#jC-_7~_s_8l7vLPPrwT8~|BN#{}UMuY<0K)te}q z)Q7_56!?^3Zs~-$e$&oqgq4-bK-t%5W4rWomMXuF$TB^$x`@n{%12CP@N)-j ztH2B*dlZg521Taft`a*fh-E@jFRd6~>hTcJ&{dmTf^_Z8Hd zLX!gWDYo4qxlD11f^$@EJGYS{-+(~F&Tu~lH&NLWRKe*~9w|SsWzqI?lcHkE6>>9! zR875g$o~bz_OsLVK@2j0Yv=Az$rCZE~el+cF}i4ng5k zNbN+HH$)(N*4IH2btK%4Y=`N~r-aF-m@qZUD5}bCxe9d|n~OODN1OJeXvZf^Z;#M3 z6_SV>lBgS!7>m`c|2T3Pvh82Qjf1NAmWl&qo<=_3k&C(>Dy=dqswwe2@)k!b=4w+7 za+bc=Dh?q2jWz0J-$lc4pDqL>VydZD6hK&Eg%A@9m%TQ?#aycI*qSRL&U>JNi z%7;O~tj5Wy;ubst42EyF_rRQYS_u^etKt7C)~h^nepAR)H8 z7~md7t`7QZF0Q(ysvhdsRLTa--0i|9tp`%pED9xHtxHhUnNZW6eAiv zjg+_+mAV!!3a)Qxs-i_@P#&O>w5Z%|3C()NT^B0c3O+br*(_VNrBqkdE?OH%4|;1G zUno)Swn4d?Qm1{QwH_`!t(&d2Ute{DGPk}8zO%EYup!KzUIDz7s(DmA%MIkBpb2E7 ztK1Icv#txyZGoh-l#rUKpQ*3t|JT0TzRBs5W_N-DB+QyIT!D&*iZ=m4xxrp5i*ND}@ zOM_Ty7M>E+DYE!I`M4qKgw(WAJ{Q_TRqk6*y1v2gyb9e8H-A2H54%zR=Wi$|(Fd*ym zFaXOwap=#5j8D9x1idrJ=P~rp><#HMuZX4ZSWbOaLO3&JEd93O?V;cBpHI7I7zy?< zAtU!=4S5J+^KK-T;LAZ_3l-G4Q0 zctcD49FR7g(D+9h2Cz@22JVj60xk!nCLT>bZ3I0G5uX@Sf}i&YDwr?}27#JRJ%ivA zUjl)pTTCM1?&0p#?(3dOKE)#-JeYKHmQeW9&bBc zGBNiW`}7yexY15$?OW#obr)T5kFD$It7iM|T0INytyREuxRU+R&70O;DX@XcuC%ge zxaxN~i@t8LCmoJtooi^%-LhqcqtP_3*b8p8Kkl~q3};lkbmV zu2{}hysoEi-HoVwmCl=XksVAYI(m9Kw{1W#U{f^MZ^uAIvvv8IhqLI_=jMnTqM+!` z%Sc|@cb=sDKvBK7m3SLe;zo*_CnT`8RQ zIWf$_%N-Q<&8=OHlxr0APx8{r%k6m?&P!4_Q54D=rQAqyb95S8%d|B{v`pBSeJ*Y{ zYjDms|5&Js3+lU?gt>r)EdF&%*_MYaJOjAWYae6Go@%a8y3yk*iBi{+?~mY=4h;Yuos)3aH2Qn zpsB&`M0mi(@R0Wz0eY4uS>^y+0W-Mcs@s^bDZ-YYB4j5uGul zzT-e2ILX9!F4@R9zN<8jC%*$R$;5FH2mxg3o-)~#<63Nzk>j6< zrcB;#r9!;wA(-NqisU-Vh4@n%qLY!^2Hcd%I$Dc~MLBN^8eXhOt{;cfE1}aQBlnde zxu<6e^(U*5Ga6GXT1?z|jy)k5+_cO1n=*M%H3>1wf=-54 z58UIPSUVT*tPuhDBirKA~wdPJ(Cjp?GS-cwoZc zjtZIw|G{VCcwzDvv_Ra`fZ}5ic#_{4l{V3j4|KfAuSTRx@fVCp>c?f1C;0_#bv((B z$=Yjii8whq75vqX%*n~wDDy7^JDr?dh{6{P3VFt`-GlSrGB=%^Tnof)_274-eB6U`-});L{%xnsvGUp5`z+eye~pZpL=V37Ik*24w0Eg9 zEPdh~;2&ulnlPTqVhaQHm}`TVz%|LyZls|SOB272Xh_2AV1b>RH-m8lN>`IjC( z{d*L+*S_b9_}>T41(f52?Y~BOG`>dTM}c!p@jYTZeqB_be;vC1o}8>hU2l8bTvfv# zraHuTA#krhyjk+%tAM|#q=lgU>x%f-7U6$fgvX2UEO4%u1dQibQFvGDXZ-FXLkufQ z9eVWv;EaXw_bJ6!Y}LOn05|hr9rSVMW)kiFDR8ep+{T&nCgb}{;4kV5Z2tq`Kl0#Z z=nGfBUrYhc4HW(wQvEXxxL5x?;3hSp|1T)wuLRBw)fQcURS|!E5x%tu4+H0aV&;9w z0ypP(`m-Cj*PnZeaNfU6>h+!Wag%n7N8b~`U4Nx`2Dm$3O2l)(z5ae5_!Fpa`sZ!n zX4A*`zvICf-(MEh|4k7t@$PUV$~_JJsph-nj900)!QS>4g73vocY|+PJj_}aj$@lU zt*cDo8dX@kwo}3EKnjPoURB;5OD8o_bOvjVCh-kd>Sl`@R-WK->@K9K57QK>KNe0~ z*vxvx9GVh4{dxJ6bF2jo$&{5!CwsA#b&vLKZ6EV}nK_s`AAY%CwV4|FGQhI3P?<_{ zzibS(Vrn1mJ?T32+uH4`6!${HVYRlwvhHxy!ks}ZogPeOfvYg}Cqa!RqORr3QS>%k zz+6^%D}WwQAHfx!*qv|D90S^x6*Opf4otw;d>P$5d!wMOwhLXOT3b<8U+y_7TdC4~ z5V*oqzQ`@FFy9-ZDGUzN!w`tY&}9Rv!6M@et|Cke8B|g6DzGpb>k0D)!AMyb+V?z` z#m^L-K2vR*feB%E+^H)kr*=DdeX($=Fbo&zFB%;&_NDf_jbSk{xbSqhIrhDqiL{Bk zZJzB5XptRGRrkKcim8KNp)o5>|DXElVC*J*DrDJD$0oXD>}&CqImkS(sVlV76>4h{ F{|zxYW=H@4 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex new file mode 100755 index 0000000..d2625e0 --- /dev/null +++ b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex @@ -0,0 +1,70 @@ +:100000000C9461000C947E000C947E000C947E0095 +:100010000C947E000C947E000C947E000C947E0068 +:100020000C947E000C947E000C947E000C947E0058 +:100030000C947E000C947E000C947E000C947E0048 +:100040000C94A9000C947E000C947E000C947E000D +:100050000C947E000C947E000C947E000C947E0028 +:100060000C947E000C947E00000000002400270009 +:100070002A0000000000250028002B0000000000DE +:1000800023002600290004040404040404040202DA +:100090000202020203030303030301020408102007 +:1000A0004080010204081020010204081020000012 +:1000B0000007000201000003040600000000000029 +:1000C000000011241FBECFEFD8E0DEBFCDBF11E08E +:1000D000A0E0B1E0EEE3F4E002C005900D92A430A0 +:1000E000B107D9F711E0A4E0B1E001C01D92AD3035 +:1000F000B107E1F70E94A2000C941D020C940000CD +:10010000809102010E94CE01019781F4809100014B +:1001100061E00E94810168EE73E080E090E00E945F +:10012000FD008091000160E00E94810108958091AE +:10013000000161E00E9461018091020160E00E9483 +:10014000610108950E9427010E9497000E9480008B +:10015000FDCF1F920F920FB60F9211242F933F9352 +:100160004F935F936F937F938F939F93AF93BF93BF +:10017000209108013091090140910A0150910B0131 +:1001800070910C01DA01C9010296A11DB11D672F02 +:100190006A5F6D3730F06D57DA01C9010396A11D12 +:1001A000B11D60930C018093080190930901A09305 +:1001B0000A01B0930B018091040190910501A09177 +:1001C0000601B09107010196A11DB11D80930401A4 +:1001D00090930501A0930601B0930701BF91AF91E1 +:1001E0009F918F917F916F915F914F913F912F914F +:1001F0000F900FBE0F901F901895EF92FF920F93E4 +:100200001F937B018C018FB7F894409108015091A6 +:10021000090160910A0170910B018FBF2FB7F8940B +:100220008091080190910901A0910A01B0910B0100 +:100230002FBF841B950BA60BB70BE816F9060A0710 +:100240001B0760F71F910F91FF90EF90089578942E +:1002500084B5826084BD84B5816084BD85B58260CB +:1002600085BD85B5816085BDEEE6F0E08081816069 +:100270008083E1E8F0E0808182608083808181601A +:100280008083E0E8F0E0808181608083E1EBF0E052 +:10029000808184608083E0EBF0E0808181608083F6 +:1002A000EAE7F0E0808184608083808182608083DF +:1002B0008081816080838081806880831092C1000A +:1002C0000895282F30E0C90186569F4FFC01949174 +:1002D0002A573F4FF9018491882391F0E82FF0E0ED +:1002E000EE0FFF1FE859FF4FA591B491662329F443 +:1002F0008C91909589238C9308958C91892B8C9364 +:100300000895482F50E0CA0182559F4FFC01249167 +:10031000CA0186569F4FFC0194914A575F4FFA01DC +:1003200034913323D1F1222331F1233021F4809110 +:1003300080008F7705C0243031F4809180008F7D5C +:100340008093800018C0213019F484B58F7704C0E1 +:10035000223021F484B58F7D84BD0DC0263021F478 +:100360008091B0008F7705C0273029F48091B000CC +:100370008F7D8093B000E32FF0E0EE0FFF1FEE586B +:10038000FF4FA591B491662329F48C919095892310 +:100390008C9308958C91892B8C930895682F70E02D +:1003A000CB0182559F4FFC012491CB0186569F4F74 +:1003B000FC0144916A577F4FFB019491992319F4F2 +:1003C00020E030E038C0222331F1233021F4809145 +:1003D00080008F7705C0243031F4809180008F7DBC +:1003E0008093800018C0213019F484B58F7704C041 +:1003F000223021F484B58F7D84BD0DC0263021F4D8 +:100400008091B0008F7705C0273029F48091B0002B +:100410008F7D8093B000892F90E0880F991F8458BA +:100420009F4FFC01A591B4918C9120E030E0842392 +:0E04300011F021E030E0C9010895F894FFCFEB +:04043E0003000200B5 +:00000001FF diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o b/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..a816ec25d8c01977a33ac9ba7b5b3a765bcb5cc8 GIT binary patch literal 4628 zcmcInTWDNG7@paaq%ld;X49L->bBNeXkBZKx3sp^G`7Je4M~a>7EVsGr|H7x?7DlR zjVLW*Q6I#L7DW^hLD3hfc)<&(DCmH-rm{jwRgy2xxZ;CTvF>q zYwLEXgzyY(7NQ|5ceHu!J*`_?J7ik!Y>}NpGW9#j74toWSd^&xJ9Rf9nv+gD z+EOh@<_ENtN~%HS+n{jWPb#&D8ZXsYh+>gyXrz>qNSF*6f;A|YRI|1u5ym1p%O=@ttftUoBMOxLT>{?5;8cnXERyKOnYt8C&G;1A=SdVBa@eq5- z-+pbuui7oy+mqW>nwXvnqqv$0qI_l~jN?KyS<+3h~M!oLHL!&;! zy9{4t`0@of=3p#a4PQ~mZO_E>K%Ix}vC`<_c_G#)B~Vnrf3`2iuU;w0LL7Zei1sG{ zpOn842d60=`nh`g=;`AMQ#+;=OG%qKW<+-UQY9^k{hmt$VWG6(nIx`gq-X*`oZ{kCA>>yD`7D(szP+IG*3}1M4?eIN>){f?xAG8CyqkRSB;f5 zJEesrQ>Kuew<2x^2P?sp9Z{!Qo*s{&L)uQFK_!SL>vUG7yJ7O@QD9y0<=v^SXYlU2 zzUp3uZVei-xnL)h&oEW8aiH{MfAgg6BqTCqmA?U3eDyUD2^iD0RltT_8DY1-eJUJf5uy8Y?N7(why2< zg?QW#OV)M<3OC*Z&N_3SZGL|N+dhoZ48sNjL)P{?WH;XHh&Kiu^IK(X%&!F<*vICy z8J$+!AkY)Cp?hs_0mT3g&+Zx+~eHn^w42spz^HIQ@P?D;)u@p6mQB0rKBpt^Q zYtR`Iv1aFL1^`cuo@n%|z?D6Rgeoi;mnea%KNJJ*Zf zB&Yg(+#O(kym1op)Q#cFJn;#6>cqM-Ph3Ktz~$qRr&cymcxu;NnU$W9UJX}vZxrUs zN=e8Q7pZ&FYPgTS6~HM+M&@0Y#x7Tl%$n$c2k#S0^nch0+P*{_w?=T`pyKnPplXuAsQ&jAkv30B#o?GIb;H-7I5b*NEZ6wRxYIivju=jrvZ^>q}yD zEWR~*=5U6X|6f2S&?E~6^cDOS^jjriS@dLU9EuA3}VjY_GVJ%r772ovb9;7*O5ZA?y%WboI+R_XLQu&xQVcuyb z0%Bheov7nlNdACWE_PoS!s?liUE6L)e*-ZG2QfFvz#tdXY-6hUCZ7!TrY~TvHkh-m e6Xs|8GBj}(T*WkTRQ_fkReTeZ-)P3?l>Y(KGw3}4 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/WInterrupts.c.o b/Firmware/SIMON_2_BUTTON/applet/WInterrupts.c.o new file mode 100755 index 0000000000000000000000000000000000000000..55cc05d35be811b5a0d51a236f88575e39b29589 GIT binary patch literal 5572 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 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/core.a b/Firmware/SIMON_2_BUTTON/applet/core.a new file mode 100755 index 0000000000000000000000000000000000000000..1868e3eb4a9a4184a0d599792c2b3ef1653e5889 GIT binary patch literal 93206 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 Q#&O0^@vWJ1a1Ql<04;^aivR!s literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_analog.c.o b/Firmware/SIMON_2_BUTTON/applet/wiring_analog.c.o new file mode 100755 index 0000000000000000000000000000000000000000..248bb21713c2f63cdb95289c691815ac7b635759 GIT binary patch literal 6512 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 SbAQ2%)A$#kOQ;WK%>M=Zz@!rZ literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_pulse.c.o b/Firmware/SIMON_2_BUTTON/applet/wiring_pulse.c.o new file mode 100755 index 0000000000000000000000000000000000000000..ac72d3c27118c6f4e6a61d1c628060b25ba0c97d GIT binary patch literal 6432 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 a{Fu)!{cW>%S}}RVvz4P;AEqGY9R35(T==p8 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_shift.c.o b/Firmware/SIMON_2_BUTTON/applet/wiring_shift.c.o new file mode 100755 index 0000000000000000000000000000000000000000..21da0280890d8e3e6f4bf7c93d017819ff5439ed GIT binary patch literal 4032 zcma)9OKenC82-;pTPiJu@={VB1L38@ogzd?Q6N?Xg#bcOBbDLKqtgq+Ofz#^D8WE5 ziVFinOEqqc3ym&hXV3%_x-g0x5g&`HA(~g6XlASiM*DB^H~aU3K*V1X^RDH3nLwM7( z=GSJ7RTFv|)kZhv?&_3&w;-ym6vRrSCu+eaqlm0Q-I#m{U8y^NPQ_n+Br4O9bj#U3 zuUJ~$-o9pivIp8Rx13A*rBb1ibo1_ZZeCa?C4x#eAyL<8}K^h6hpcv)ECmhaHm)+)(rh)d%N<#|T)`pw-)q-fD1; z!MT&r+NT-&0)yD1dDyO)pvl1hYMEBsH0UB%2d@v_9K1C+J~(}7(a`mwn?t`kcbt!% zkN{=)&|1 zTH2h@I!s#5SOQeiV>KlQEw!kmJESQ~Eh@=|^nj%nm830gkV8Yt9jZ03l0(*Iu|Wz$ z>S!3!21js=KY^XV&}YB9&(|6AYwkL&^H21#YQ{+cgg?fJXQ*<4vNg;M6o9bq&6Uk0bPVFS3S>0v#sErCrV{<2z>FrAw5re5CleuNLn4e^`rl1TSVA3Jp zO=aJ(&-5D+7<@az4BLZ?O`LvJ-z9DZe0+odUmV}Wwl=7qcYwr*^=*c3IbD}9*x^>J zuLFj#wMCZVLT`Zce%SfBppSQa4~ESFmDix`jTkK50bjIU*EEqTY^=xcj;-f{Gso`V zkGO=V=1HrBh(__)4444VTgUD(J3i4nV|Ug(z7mBrWm0U+x&Vc7MZ z1&`J{iF)tCX2trr=4ic>sP_kKtcRu6>b(VSb3kQ2k`|E|vA#j*(RzjH!Tz%zXszBy z;5G+THXuzJsj$3 z*sQS5e@WC{Cu8H$nD~U9Vg2YzsK@o(ymNt!jn4xKfBTG$FMUsy zd?aJz6YuZj_3&v!iR+sh)p^rGiR)d7>g@DT;<{6#Iy)_txIU$*&XW!$juY4!s(LS? zpJ|@UVdLk0nThpOCdE(w<&{e9+q-pJDkUI$Qrj)rsYz$&9*zFd-c&i4*Zf4TT&gMA zQYusG9Z2cVP%1^WkaNo^evoQkm8_Tde7Ep?*~7P*?;&Njh5f5$i>wE-KgnMJE+99L zzL=aB9I_IFG2a4L8~#3!?^fD*H?|wT1GwApuYk`Pz6|)1;g^9~!_NVa82&l1*KmNG zH2f0q6>_|LDEi$6&b>a5!8LRO-zMi_K;FTiohcuZ!@dy6TD0RD$|uJD81M_jUj%+< z`0K#$$<1}({kCiP#c@0mUhOo)huTk`3WG;z~(NA#5@?`y2lWI95$Yfjo%W9*%smKImVm@ z@>y&=_mn&V%tg3oxDV9dRm6}F7<)gEXV2XEz&8x%@23WGULZ)6v+eA>^x2-#dlI81 P`2AyJ^c_U~GqC>yN5jqx literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde b/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde new file mode 100755 index 0000000..91e6fd5 --- /dev/null +++ b/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde @@ -0,0 +1,69 @@ +/* +Simon Experiments #2 +Buzzer +Pete Lewis +Sparkfun Electronics +10/13/2010 + +This example code is in the public domain. + +*/ + + + +int ledPin = 3; // LEDs are on pins 3,5,10 and 13. +int buttonPin = 2; // BUTTONS are on pins 2,6,9 and 12. +int button_state; // This variable will be used to "store" the state of the button. + +/// These next two definitions are setting up the buzzer pins. +/// By sending these HIGH/LOW we can create a sound from the buzzer. +int buzzer_1 = 4; +int buzzer_2 = 7; + + +void setup() { + pinMode(ledPin, OUTPUT); + + digitalWrite(buttonPin, HIGH); + pinMode(buttonPin, INPUT); + + pinMode(buzzer_1, OUTPUT); + pinMode(buzzer_2, OUTPUT); + digitalWrite(buzzer_1, LOW); // buzzer_1 will toggle HIGH/LOW to create the sound - see buzz() function below. + digitalWrite(buzzer_2, LOW); // buzzer_2 will toggle as well (to create more volume). +} + + +void loop() +{ + int button_state = digitalRead(buttonPin); + + if(button_state == 1){ + + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + + // Call the "buzz()" funtion. See below to know what this does. + buzz(); + + } + +} + + +////////////////////////////////////////////////////////////////////////////////////// +void buzz(){ + /// this function makes the buzzer pin move and crease a sound. + /// By writing the pin HIGH/LOW in a pattern we can create a frequency. + /// this FOR LOOP is used to repeat the pattern and let us hear the note for second. + for(int i = 0; i < 100; i++){ + digitalWrite(buzzer_1, HIGH); + digitalWrite(buzzer_2, LOW); + delay(1); + digitalWrite(buzzer_1, LOW); + digitalWrite(buzzer_2, HIGH); + delay(1); + } +} + diff --git a/Firmware/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o b/Firmware/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..5201b37e47077aab517decf9fcfa8e55817c07ef GIT binary patch literal 16116 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 U*;m&HS0Og-l{T)Y92`gd-!^+>ng9R* literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/Print.cpp.o b/Firmware/SIMON_3_BUZZER/applet/Print.cpp.o new file mode 100755 index 0000000000000000000000000000000000000000..0fccf779a77a8cb0b18e63663cfcef105e70b611 GIT binary patch literal 25100 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 M;REtGE;9Z6Hy+PRp#T5? literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp b/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp new file mode 100755 index 0000000..c395ad4 --- /dev/null +++ b/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp @@ -0,0 +1,79 @@ +/* +Simon Experiments #2 +Buzzer +Pete Lewis +Sparkfun Electronics +10/13/2010 +*/ + + + +#include "WProgram.h" +void setup(); +void loop(); +void buzz(); +int ledPin = 3; // LEDs are on pins 3,5,10 and 13. +int buttonPin = 2; // BUTTONS are on pins 2,6,9 and 12. +int button_state; // This variable will be used to "store" the state of the button. + +/// These next two definitions are setting up the buzzer pins. +/// By sending these HIGH/LOW we can create a sound from the buzzer. +int buzzer_1 = 4; +int buzzer_2 = 7; + + +void setup() { + pinMode(ledPin, OUTPUT); + pinMode(buttonPin, INPUT); + + pinMode(buzzer_1, OUTPUT); + pinMode(buzzer_2, OUTPUT); + digitalWrite(buzzer_1, LOW); // buzzer_1 will toggle HIGH/LOW to create the sound - see buzz() function below. + digitalWrite(buzzer_2, LOW); // buzzer_2 will always stay low. +} + + +void loop() +{ + int button_state = digitalRead(buttonPin); + + if(button_state == 1){ + + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + + // Call the "buzz()" funtion. See below to know what this does. + buzz(); + + } + +} + + +////////////////////////////////////////////////////////////////////////////////////// +void buzz(){ + /// this function makes the buzzer pin move and crease a sound. + /// By writing the pin HIGH/LOW in a pattern we can create a frequency. + /// this FOR LOOP is used to repeat the pattern and let us hear the note for second. + for(int i = 0; i < 100; i++){ + digitalWrite(buzzer_1, HIGH); + delay(1); + digitalWrite(buzzer_1, LOW); + delay(1); + } +} + + +int main(void) +{ + init(); + + setup(); + + for (;;) + loop(); + + return 0; +} + diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep b/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep new file mode 100755 index 0000000..7c166a1 --- /dev/null +++ b/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep @@ -0,0 +1 @@ +:00000001FF diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf b/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf new file mode 100755 index 0000000000000000000000000000000000000000..22a46fd98e2c733753f48e76ff1f04b4de129f1d GIT binary patch literal 12793 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 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/core.a b/Firmware/SIMON_3_BUZZER/applet/core.a new file mode 100755 index 0000000000000000000000000000000000000000..5ddbf535ff3145e5d1f3f98e3eaa5f5db4788376 GIT binary patch literal 93206 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 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/pins_arduino.c.o b/Firmware/SIMON_3_BUZZER/applet/pins_arduino.c.o new file mode 100755 index 0000000000000000000000000000000000000000..85b1e160350c3cbaaf9119263145468d7f6901f6 GIT binary patch literal 3012 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 Q#&O0^@vWJ1a1Ql<04;^aivR!s literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_analog.c.o b/Firmware/SIMON_3_BUZZER/applet/wiring_analog.c.o new file mode 100755 index 0000000000000000000000000000000000000000..248bb21713c2f63cdb95289c691815ac7b635759 GIT binary patch literal 6512 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 SbAQ2%)A$#kOQ;WK%>M=Zz@!rZ literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_pulse.c.o b/Firmware/SIMON_3_BUZZER/applet/wiring_pulse.c.o new file mode 100755 index 0000000000000000000000000000000000000000..ac72d3c27118c6f4e6a61d1c628060b25ba0c97d GIT binary patch literal 6432 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 a{Fu)!{cW>%S}}RVvz4P;AEqGY9R35(T==p8 literal 0 HcmV?d00001 diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_shift.c.o b/Firmware/SIMON_3_BUZZER/applet/wiring_shift.c.o new file mode 100755 index 0000000000000000000000000000000000000000..21da0280890d8e3e6f4bf7c93d017819ff5439ed GIT binary patch literal 4032 zcma)9OKenC82-;pTPiJu@={VB1L38@ogzd?Q6N?Xg#bcOBbDLKqtgq+Ofz#^D8WE5 ziVFinOEqqc3ym&hXV3%_x-g0x5g&`HA(~g6XlASiM*DB^H~aU3K*V1X^RDH3nLwM7( z=GSJ7RTFv|)kZhv?&_3&w;-ym6vRrSCu+eaqlm0Q-I#m{U8y^NPQ_n+Br4O9bj#U3 zuUJ~$-o9pivIp8Rx13A*rBb1ibo1_ZZeCa?C4x#eAyL<8}K^h6hpcv)ECmhaHm)+)(rh)d%N<#|T)`pw-)q-fD1; z!MT&r+NT-&0)yD1dDyO)pvl1hYMEBsH0UB%2d@v_9K1C+J~(}7(a`mwn?t`kcbt!% zkN{=)&|1 zTH2h@I!s#5SOQeiV>KlQEw!kmJESQ~Eh@=|^nj%nm830gkV8Yt9jZ03l0(*Iu|Wz$ z>S!3!21js=KY^XV&}YB9&(|6AYwkL&^H21#YQ{+cgg?fJXQ*<4vNg;M6o9bq&6Uk0bPVFS3S>0v#sErCrV{<2z>FrAw5re5CleuNLn4e^`rl1TSVA3Jp zO=aJ(&-5D+7<@az4BLZ?O`LvJ-z9DZe0+odUmV}Wwl=7qcYwr*^=*c3IbD}9*x^>J zuLFj#wMCZVLT`Zce%SfBppSQa4~ESFmDix`jTkK50bjIU*EEqTY^=xcj;-f{Gso`V zkGO=V=1HrBh(__)4444VTgUD(J3i4nV|Ug(z7mBrWm0U+x&Vc7MZ z1&`J{iF)tCX2trr=4ic>sP_kKtcRu6>b(VSb3kQ2k`|E|vA#j*(RzjH!Tz%zXszBy z;5G+THXuzJsj$3 z*sQS5e@WC{Cu8H$nD~U9Vg2YzsK@o(ymNt!jn4xKfBTG$FMUsy zd?aJz6YuZj_3&v!iR+sh)p^rGiR)d7>g@DT;<{6#Iy)_txIU$*&XW!$juY4!s(LS? zpJ|@UVdLk0nThpOCdE(w<&{e9+q-pJDkUI$Qrj)rsYz$&9*zFd-c&i4*Zf4TT&gMA zQYusG9Z2cVP%1^WkaNo^evoQkm8_Tde7Ep?*~7P*?;&Njh5f5$i>wE-KgnMJE+99L zzL=aB9I_IFG2a4L8~#3!?^fD*H?|wT1GwApuYk`Pz6|)1;g^9~!_NVa82&l1*KmNG zH2f0q6>_|LDEi$6&b>a5!8LRO-zMi_K;FTiohcuZ!@dy6TD0RD$|uJD81M_jUj%+< z`0K#$$<1}({kCiP#c@0mUhOo)huTk`3WG;z~(NA#5@?`y2lWI95$Yfjo%W9*%smKImVm@ z@>y&=_mn&V%tg3oxDV9dRm6}F7<)gEXV2XEz&8x%@23WGULZ)6v+eA>^x2-#dlI81 P`2AyJ^c_U~GqC>yN5jqx literal 0 HcmV?d00001 From eb44ce666acec4120cceda55a8ae9a48f8289c40 Mon Sep 17 00:00:00 2001 From: Mike S Date: Wed, 15 Jan 2014 16:03:25 -0700 Subject: [PATCH 02/14] Updated Blink Code --- .../{SIMON_1_BLINK.pde => SIMON_1_BLINK.ino} | 10 ++++++++++ 1 file changed, 10 insertions(+) rename Firmware/SIMON_1_BLINK/{SIMON_1_BLINK.pde => SIMON_1_BLINK.ino} (86%) mode change 100755 => 100644 diff --git a/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde b/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino old mode 100755 new mode 100644 similarity index 86% rename from Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde rename to Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino index c0ec37d..99e9433 --- a/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.pde +++ b/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino @@ -6,6 +6,10 @@ Pete Lewis Sparkfun Electronics 10/13/2010 +Modified by +Prof Mike Soltys +01/15/2013 + This example code is in the public domain. ////////////////////////////////////////////////// @@ -16,6 +20,12 @@ SETUP & UPLOAD INSTRUCTIONS 4. Click on the "upload button" - it looks like a box with an arrow to the right. ////////////////////////////////////////////////// +////////////////////////////////////////////////// +DESCRIPTION +Causes one LED to blink continuously with one second increments +////////////////////////////////////////////////// + + */ From 4cd74f9a238cfbe65298f5b79990d7730f04e6a9 Mon Sep 17 00:00:00 2001 From: Mike S Date: Wed, 15 Jan 2014 17:25:48 -0700 Subject: [PATCH 03/14] Updated Examples 2 and 3, and added 4 2 and 3 are now working 4 plays mr roboto --- Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino | 3 +- ...{SIMON_2_BUTTON.pde => SIMON_2_BUTTON.ino} | 28 +++++- ...{SIMON_3_BUZZER.pde => SIMON_3_BUZZER.ino} | 18 +++- .../SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino | 95 +++++++++++++++++++ 4 files changed, 136 insertions(+), 8 deletions(-) rename Firmware/SIMON_2_BUTTON/{SIMON_2_BUTTON.pde => SIMON_2_BUTTON.ino} (73%) mode change 100755 => 100644 rename Firmware/SIMON_3_BUZZER/{SIMON_3_BUZZER.pde => SIMON_3_BUZZER.ino} (80%) mode change 100755 => 100644 create mode 100644 Firmware/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino diff --git a/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino b/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino index 99e9433..c44fe40 100644 --- a/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino +++ b/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino @@ -8,7 +8,8 @@ Sparkfun Electronics Modified by Prof Mike Soltys -01/15/2013 +University of Colorado +01/15/2014 This example code is in the public domain. diff --git a/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde b/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.ino old mode 100755 new mode 100644 similarity index 73% rename from Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde rename to Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.ino index 18fd0b4..885072c --- a/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.pde +++ b/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.ino @@ -6,6 +6,10 @@ Pete Lewis Sparkfun Electronics 10/13/2010 +Modified by +Prof Mike Soltys +University of Colorado +01/15/14 This example code is in the public domain. ////////////////////////////////////////////////// @@ -16,6 +20,13 @@ SETUP & UPLOAD INSTRUCTIONS 4. Click on the "upload button" - it looks like a box with an arrow to the right. ////////////////////////////////////////////////// +////////////////////////////////////////////////// +DESCRIPTION +Pressing the buttion will change the state of the LED from on to off or off to on. + +Note: these buttions are SUPER sensitive (freakishly so). The simon says code usese +a delay and check process called debouncing to fix this. +////////////////////////////////////////////////// */ @@ -33,7 +44,8 @@ int buttonPin = 2; // The simon board has 4 BUTTONS on it. int button_state; // This variable will be used to "store" the state of the button. // It will allow us to know whether the button is pressed or not. - +int led_state = 0; // This variable will be used to "store" the state of the LED. + // It will allow us to know whether the LED is on or off. // The setup() funtion runs once, when the sketch starts void setup() { @@ -61,9 +73,17 @@ void loop() // The second step in the loop is to actually do something with this variable. // In this next "if statement" we are going to decide to do something. Here we are going to turn on the ledPin for a second. if(button_state == 1){ - digitalWrite(ledPin, HIGH); // set the LED on - delay(1000); // wait for a second - digitalWrite(ledPin, LOW); // set the LED off + // If the LED is off, turn it on + if (led_state == 0 ){ + digitalWrite(ledPin, HIGH); // set the LED on + led_state = 1; + } + // If the LED is on, turn it off + else if (led_state == 1 ) { + digitalWrite(ledPin, LOW); // set the LED off + led_state = 0; + } + delay(1000); // wait for a second } } diff --git a/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde b/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino old mode 100755 new mode 100644 similarity index 80% rename from Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde rename to Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino index 91e6fd5..7ae8c2a --- a/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.pde +++ b/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino @@ -1,12 +1,25 @@ /* -Simon Experiments #2 +Simon Experiments #3 Buzzer Pete Lewis Sparkfun Electronics 10/13/2010 +Updated by +Prof Mike Soltys +University of Colorado +01/15/2014 + This example code is in the public domain. +////////////////////////////////////////////////// +DESCRIPTION +Pressing the buttion will flash the LED for 1 second and play a tone. + +Note: these buttions are SUPER sensitive (freekishly so). The simon says code usese +a delay and check process called debouncing to fix this. +////////////////////////////////////////////////// + */ @@ -19,7 +32,6 @@ int button_state; // This variable will be used to "store" the state of the b /// By sending these HIGH/LOW we can create a sound from the buzzer. int buzzer_1 = 4; int buzzer_2 = 7; - void setup() { pinMode(ledPin, OUTPUT); @@ -37,6 +49,7 @@ void setup() { void loop() { int button_state = digitalRead(buttonPin); + if(button_state == 1){ @@ -51,7 +64,6 @@ void loop() } - ////////////////////////////////////////////////////////////////////////////////////// void buzz(){ /// this function makes the buzzer pin move and crease a sound. diff --git a/Firmware/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino b/Firmware/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino new file mode 100644 index 0000000..89b51c8 --- /dev/null +++ b/Firmware/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino @@ -0,0 +1,95 @@ +/* +Simon Experiments #4 +Mr Roboto +Prof Mike Soltys +University of Colorado +01/15/2014 + +This example code is in the public domain. + +////////////////////////////////////////////////// +DESCRIPTION +Pressing the buttion will play the song Mr Roboto + +Note: these buttions are SUPER sensitive (freekishly so). The simon says code usese +a delay and check process called debouncing to fix this. +////////////////////////////////////////////////// + +*/ + + + +int ledPin = 3; // LEDs are on pins 3,5,10 and 13. +int buttonPin = 2; // BUTTONS are on pins 2,6,9 and 12. +int button_state; // This variable will be used to "store" the state of the button. + +/// These next two definitions are setting up the buzzer pins. +/// By sending these HIGH/LOW we can create a sound from the buzzer. +int buzzer_1 = 4; +int buzzer_2 = 7; + +/* Here are some variables we'll use to make a little jingle. + First we'll define frequencies of a few notes to use in the jingle */ +const int NOTE_F4 = 349; // F4 (F above middle c) +const int NOTE_DS4 = 311; // D-sharp 4 +const int NOTE_REST = 0; // Rest, no tone +const int jingleLength = 12; // This is the length of the jingle - 12 notes +/* This array contains the note played, in order */ +const int jingleNote[jingleLength] = { + NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_DS4, NOTE_REST, + NOTE_F4, NOTE_F4, NOTE_F4, NOTE_F4, NOTE_DS4}; +/* jingleDuration contains the length of each note played + 8 = 1/8 note, 4 = 1/4 note, 32 = 1/32 note, etc.*/ +const int jingleDuration[jingleLength] = { + 8, 8, 8, 8, 8, 4, 32,// do-mo-ar-i-ga-to-(rest) + 4, 4, 8, 8, 4 }; // mis-ter-ro-bot-o +const int jingleBPM = 60; // Jingle beats-per-minute = 60 bpm + +void setup() { + pinMode(ledPin, OUTPUT); + + digitalWrite(buttonPin, HIGH); + pinMode(buttonPin, INPUT); + + pinMode(buzzer_1, OUTPUT); + pinMode(buzzer_2, OUTPUT); + digitalWrite(buzzer_1, LOW); // buzzer_1 will toggle HIGH/LOW to create the sound - see buzz() function below. + digitalWrite(buzzer_2, LOW); // buzzer_2 will toggle as well (to create more volume). +} + + +void loop() +{ + int button_state = digitalRead(buttonPin); + + if(button_state == 1){ + + digitalWrite(ledPin, HIGH); // set the LED on + delay(1000); // wait for a second + digitalWrite(ledPin, LOW); // set the LED off + + // Call the "buzz()" funtion. See below to know what this does. + buzz(); + + } + +} + +////////////////////////////////////////////////////////////////////////////////////// +void buzz(){ +for (int i=0; i Date: Tue, 21 Jan 2014 13:16:17 -0700 Subject: [PATCH 04/14] Started working on an Apple Remote, with an IR led soldered to pin A0 --- .../SIMON_APPLE_REMOTE/AppleRemoteSender.cpp | 136 ++++ .../SIMON_APPLE_REMOTE/AppleRemoteSender.h | 110 +++ Firmware/SIMON_APPLE_REMOTE/LICENSE | 674 ++++++++++++++++++ Firmware/SIMON_APPLE_REMOTE/README.txt | 16 + .../SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino | 72 ++ Firmware/SIMON_APPLE_REMOTE/keywords.txt | 9 + 6 files changed, 1017 insertions(+) create mode 100644 Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp create mode 100644 Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.h create mode 100755 Firmware/SIMON_APPLE_REMOTE/LICENSE create mode 100755 Firmware/SIMON_APPLE_REMOTE/README.txt create mode 100644 Firmware/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino create mode 100755 Firmware/SIMON_APPLE_REMOTE/keywords.txt diff --git a/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp b/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp new file mode 100644 index 0000000..ed4b530 --- /dev/null +++ b/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp @@ -0,0 +1,136 @@ +/* + +Apple Remote Sender: +Copyright Casey Callendrello 2008 + +c1 at caseyc dot net + +For more information, see http://www.caseyc.net/home/node/10 + + 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 3 of the License, or + (at your option) any later version. + + 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, see . + + +*/ + + +#include "Arduino.h" +#include "AppleRemoteSender.h" + + +AppleRemoteSender::AppleRemoteSender(int pin) +{ + _irpin = pin; + _remote_id = 0x01; + + //ready the pin + pinMode(_irpin, OUTPUT); + digitalWrite(_irpin, LOW); + + +} + +AppleRemoteSender::AppleRemoteSender(int pin, byte remote_id) +{ + _irpin = pin; + _remote_id = remote_id; + + //ready the pin + pinMode(_irpin, OUTPUT); + digitalWrite(_irpin, LOW); +} + + +void AppleRemoteSender::set_remote_id(byte remote_id) +{ + _remote_id = remote_id; +} + +void AppleRemoteSender::send(byte remote_id, byte key) +{ + //prepare data + long temp = remote_id; + temp = temp << 8; + temp += key; + temp = temp << 16; + temp += APPLE_ID; + + //send preamble + oscWrite(9000); + delayMicroseconds(4500); + + byte bit = 0; + //send data + for(int i = 0; i < 32; i++) + { + bit = temp % 2; + temp = temp >> 1; + //space + oscWrite(560); + + //data + if(bit == 0) + { + delayMicroseconds(560); + } + else + { + delayMicroseconds(1690); + } + } + //end of data header + oscWrite(560); + +} +void AppleRemoteSender::send(byte key) +{ + send(_remote_id, key); +} + + +void AppleRemoteSender::menu(byte remote_id) { send(remote_id, MENU);} +void AppleRemoteSender::menu(){ send(MENU); } + +void AppleRemoteSender::play(byte remote_id){ send(remote_id, PLAY); } +void AppleRemoteSender::play(){ send(PLAY); } + +void AppleRemoteSender::right(byte remote_id){ send(remote_id, RIGHT); } +void AppleRemoteSender::right(){ send(RIGHT); } + +void AppleRemoteSender::left(byte remote_id){ send(remote_id, LEFT); } +void AppleRemoteSender::left(){ send(LEFT); } + +void AppleRemoteSender::up(byte remote_id){ send(remote_id, UP); } +void AppleRemoteSender::up(){ send(UP); } + +void AppleRemoteSender::down(byte remote_id){ send(remote_id, DOWN); } +void AppleRemoteSender::down(){ send(DOWN); } + + + + + +void AppleRemoteSender::oscWrite(int time) +{ + /* + Sends a 38khz carrier pulse + + */ + for(int i = 0; i < (time / 26) - 1; i++) + { + digitalWrite(_irpin, HIGH); + delayMicroseconds(13); + digitalWrite(_irpin, LOW); + delayMicroseconds(13); + } +} diff --git a/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.h b/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.h new file mode 100644 index 0000000..d04073f --- /dev/null +++ b/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.h @@ -0,0 +1,110 @@ +#ifndef AppleRemoteSender_h +#define AppleRemoteSender_h + +/* + +Apple Remote Sender: +Copyright Casey Callendrello 2008 + +Notes: +1) Apple's remotes use the NEC IR protocol, which is better +described here: http://www.sbprojects.com/knowledge/ir/nec.htm +It uses a 38 kHz carrier wave ( hence the OscWrite call) and uses a +"pulse distance" encoding. In other words, the LED is ON for the same +amount of time - it is the duration OFF that matters. + +The protocol header is a 9ms on, followed by 4.5 ms off. A '1' value is +.560 ms on, followed by 1.690 ms off. A '0' value is the same on pulse, +followed by .565 ms off. +The 'end' header is a .560 ms on pulse. + +2) The total data transmitted is 32 bits. + +****** Remote Code ******* +The first byte is the remote ID, +a number between 0 and 255. + +The second byte is the command +Known commands: +0x02: Menu +0x04: Play +0x07: Right +0x08: Left +0x0B: Up +0x0D: Down + +The last two bytes are 0x87EE - which identifies this as an Apple device. + + +*/ + + +/* + + 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 3 of the License, or + (at your option) any later version. + + 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, see . +*/ + + +#include +#include +#include "Arduino.h" + +//suffix that all remotes use. +#define APPLE_ID 0x87EE + +#define MENU 0x02 +#define PLAY 0x04 +#define RIGHT 0x07 +#define LEFT 0x08 +#define UP 0x0B +#define DOWN 0x0D + + +class AppleRemoteSender +{ + public: + AppleRemoteSender(int irpin); + AppleRemoteSender(int irpin, byte remote_id); + + void set_remote_id(byte remote_id); + + void send(byte remote_id, byte key); + void send(byte key); + + void menu(byte remote_id) ; + void menu(); + + void play(byte remote_id); + void play(); + + void right(byte remote_id); + void right(); + + void left(byte remote_id); + void left(); + + void up(byte remote_id); + void up(); + + void down(byte remote_id); + void down(); +private: + long data; + int _irpin; + byte _remote_id; + void oscWrite(int time); +}; + + +#endif diff --git a/Firmware/SIMON_APPLE_REMOTE/LICENSE b/Firmware/SIMON_APPLE_REMOTE/LICENSE new file mode 100755 index 0000000..94a9ed0 --- /dev/null +++ b/Firmware/SIMON_APPLE_REMOTE/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + 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 3 of the License, or + (at your option) any later version. + + 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, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/Firmware/SIMON_APPLE_REMOTE/README.txt b/Firmware/SIMON_APPLE_REMOTE/README.txt new file mode 100755 index 0000000..9fab924 --- /dev/null +++ b/Firmware/SIMON_APPLE_REMOTE/README.txt @@ -0,0 +1,16 @@ +AppleRemoteSender + +Copyright (c) 2008, Casey Callendrello +c1 at caseyc.net // caseyc.net + + +Should be pretty self-explanatory. See the .h file for every method, but the ones your are probably interested in are: + +ars = AppleRemoteSender(pin) + +ars.menu() +ars.play() +ars.right() +ars.left() +ars.up() +ars.down() diff --git a/Firmware/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino b/Firmware/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino new file mode 100644 index 0000000..b0d822f --- /dev/null +++ b/Firmware/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino @@ -0,0 +1,72 @@ +#include "AppleRemoteSender.h" + +int irpin = 15; +byte remote_id = 0x01; + +AppleRemoteSender ars = AppleRemoteSender(irpin, remote_id); + +//Control Buttons +int play = 9; +int menu = 9; // upper left +int next = 2; // upper right +int previous = 12; //lower left +int volUp = 2; // upper Right? +int volDown = 6; // lower right + +// The setup() method runs once, when the sketch starts +void setup() { + // initialize the digital pin as an output: + // pinMode(play, INPUT); + pinMode(menu, INPUT); + pinMode(next, INPUT); + pinMode(previous, INPUT); + pinMode(volUp, INPUT); + pinMode(volDown, INPUT); + digitalWrite(next, HIGH); + digitalWrite(previous, HIGH); + digitalWrite(volUp, HIGH); + digitalWrite(volDown, HIGH); + // digitalWrite(play, HIGH); + digitalWrite(menu, HIGH); + +} + +// the loop() method runs over and over again, +// as long as the Arduino has power + +void loop() +{ + if(digitalRead(menu) == LOW){ + ars.menu(); //Transmit the codes for Play/Pause + ars.right(); + ars.menu(); + ars.right(); + ars.menu(); + ars.right(); + } +// if(digitalRead(play) == LOW){ +// ars.play(); //Transmit the codes for Play/Pause +// ars.play(); +// ars.play(); +// } + else if(digitalRead(next) == LOW){ + ars.right(); //Transmit the codes for Next + ars.right(); + ars.right(); + } + else if(digitalRead(previous) == LOW){ + ars.left(); //Transmit the codes for Previous + ars.left(); + ars.left(); + } + else if(digitalRead(volUp) == LOW){ + ars.up(); //Transmit the codes for Volume Up + ars.up(); + ars.up(); + } + else if(digitalRead(volDown) == LOW){ + ars.down(); //Transmit the codes for Volume Down + ars.down(); + ars.down(); + } +} diff --git a/Firmware/SIMON_APPLE_REMOTE/keywords.txt b/Firmware/SIMON_APPLE_REMOTE/keywords.txt new file mode 100755 index 0000000..02151a9 --- /dev/null +++ b/Firmware/SIMON_APPLE_REMOTE/keywords.txt @@ -0,0 +1,9 @@ +AppleRemoteSender KEYWORD1 +set_remote_id KEYWORD2 +send KEYWORD2 +menu KEYWORD2 +play KEYWORD2 +right KEYWORD2 +left KEYWORD2 +up KEYWORD2 +down KEYWORD2 \ No newline at end of file From 179fccc19a543b33a468ac6f376c04b67b9c3c87 Mon Sep 17 00:00:00 2001 From: Mike S Date: Tue, 28 Jan 2014 21:51:31 -0700 Subject: [PATCH 05/14] Added Ocarina Code --- Firmware/Ocarina/Ocarina.ino | 109 +++++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Firmware/Ocarina/Ocarina.ino diff --git a/Firmware/Ocarina/Ocarina.ino b/Firmware/Ocarina/Ocarina.ino new file mode 100644 index 0000000..0ba61ff --- /dev/null +++ b/Firmware/Ocarina/Ocarina.ino @@ -0,0 +1,109 @@ +/* +Make the Simon Says Game a 4-hole Ocarina (Like in the legend of zelda) + +*/ +// Define the button, LED, and buzzer pins +const int led_UL = 10; //Red +const int led_UR = 3; //Green +const int led_LL = 13; //Blue +const int led_LR = 5; //Yellow + +const int but_UL = 9; +const int but_UR = 2; +const int but_LL = 12; +const int but_LR = 6; + +const int BUZZER1 = 4; +const int BUZZER2 = 7; + +void setup() { + //Setup hardware inputs/outputs. + //Enable pull ups on inputs + pinMode(but_UL, INPUT_PULLUP); + pinMode(but_UR, INPUT_PULLUP); + pinMode(but_LL, INPUT_PULLUP); + pinMode(but_LR, INPUT_PULLUP); + + pinMode(led_UL, OUTPUT); + pinMode(led_UR, OUTPUT); + pinMode(led_LL, OUTPUT); + pinMode(led_LR, OUTPUT); + + pinMode(BUZZER1, OUTPUT); + pinMode(BUZZER2, OUTPUT); +} + +void loop() { + // Start with all buttons pressed - C4 - 262 + if (digitalRead(but_UL) == 0 && digitalRead(but_UR) == 0 && digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { + tone(BUZZER2,262,50); + } + // uncover upper right - D4 - 294 + else if (digitalRead(but_UL) == 0 && digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { + digitalWrite(led_UR, HIGH); + tone(BUZZER2,294,50); + } + // uncover lower right - E4 -330 + else if (digitalRead(but_UL) == 0 && digitalRead(but_UR) == 0 && digitalRead(but_LL) == 0) { + tone(BUZZER2,330,50); + digitalWrite(led_LR, HIGH); + } + // uncover upper left - F4# -370 + else if (digitalRead(but_UR) == 0 && digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { + digitalWrite(led_UL, HIGH); + tone(BUZZER2,370,50); + } + // uncover both right - F4 -349 + else if (digitalRead(but_UL) == 0 && digitalRead(but_LL) == 0) { + digitalWrite(led_UR, HIGH); + digitalWrite(led_LR, HIGH); + tone(BUZZER2,349,50); + } + // uncover both top - G4 -392 + else if (digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { + digitalWrite(led_UR, HIGH); + digitalWrite(led_UL, HIGH); + tone(BUZZER2,392,50); + } + // uncover upper left and lower right - G4# -415 + else if (digitalRead(but_LL) == 0 && digitalRead(but_UR) == 0) { + digitalWrite(led_LR, HIGH); + digitalWrite(led_UL, HIGH); + tone(BUZZER2,415,50); + } + // cover LL only - A4 -440 + else if (digitalRead(but_LL) == 0) { + digitalWrite(led_UR, HIGH); + digitalWrite(led_UL, HIGH); + digitalWrite(led_LR, HIGH); + tone(BUZZER2,440,50); + } + // cover LR only - A4# -466 + else if (digitalRead(but_LR) == 0) { + digitalWrite(led_UR, HIGH); + digitalWrite(led_UL, HIGH); + digitalWrite(led_LL, HIGH); + tone(BUZZER2,466,50); + } + // cover UR only - B4 -494 + else if (digitalRead(but_UR) == 0) { + digitalWrite(led_UL, HIGH); + digitalWrite(led_LL, HIGH); + digitalWrite(led_LR, HIGH); + tone(BUZZER2,494,50); + } + // all open - C5 -523 + else { + digitalWrite(led_UL, HIGH); + digitalWrite(led_UR, HIGH); + digitalWrite(led_LL, HIGH); + digitalWrite(led_LR, HIGH); + tone(BUZZER2,523,50); + } + // Turn off all LEDs + digitalWrite(led_UR, LOW); + digitalWrite(led_UL, LOW); + digitalWrite(led_LL, LOW); + digitalWrite(led_LR, LOW); +} + From b9dfba3067ffeea9a7ad0ba1b388da26c66d60fa Mon Sep 17 00:00:00 2001 From: Mike S Date: Tue, 28 Jan 2014 21:54:25 -0700 Subject: [PATCH 06/14] added comments to Ocarina Code --- Firmware/Ocarina/Ocarina.ino | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Firmware/Ocarina/Ocarina.ino b/Firmware/Ocarina/Ocarina.ino index 0ba61ff..e2c5539 100644 --- a/Firmware/Ocarina/Ocarina.ino +++ b/Firmware/Ocarina/Ocarina.ino @@ -1,8 +1,14 @@ /* Make the Simon Says Game a 4-hole Ocarina (Like in the legend of zelda) +Prof Mike Soltys +University of Colorado +1/28/2014 */ -// Define the button, LED, and buzzer pins + + +// Define the button, LED, and buzzer pins (this is standard for all Simon Says games +// I've labeled mine UL for Upper Left, LR for Lower Left and so on. const int led_UL = 10; //Red const int led_UR = 3; //Green const int led_LL = 13; //Blue @@ -100,6 +106,7 @@ void loop() { digitalWrite(led_LR, HIGH); tone(BUZZER2,523,50); } + // Turn off all LEDs digitalWrite(led_UR, LOW); digitalWrite(led_UL, LOW); From b1756b06227d6d5f36c2db0602f1e9b2a83c84ed Mon Sep 17 00:00:00 2001 From: Mike S Date: Tue, 28 Jan 2014 22:05:14 -0700 Subject: [PATCH 07/14] Comments added to Ocarina code --- Firmware/Ocarina/Ocarina.ino | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/Firmware/Ocarina/Ocarina.ino b/Firmware/Ocarina/Ocarina.ino index e2c5539..dcbba56 100644 --- a/Firmware/Ocarina/Ocarina.ino +++ b/Firmware/Ocarina/Ocarina.ino @@ -40,21 +40,25 @@ void setup() { } void loop() { + // keep doing this over and over again. + // I will start with the most buttons pressed, and move on to the least buttons pressed + // for any combination, i'll play a matching note and light up the LEDs that aren't being pressed. + // Start with all buttons pressed - C4 - 262 if (digitalRead(but_UL) == 0 && digitalRead(but_UR) == 0 && digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { tone(BUZZER2,262,50); } - // uncover upper right - D4 - 294 + // uncover upper right only - D4 - 294 else if (digitalRead(but_UL) == 0 && digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { digitalWrite(led_UR, HIGH); tone(BUZZER2,294,50); } - // uncover lower right - E4 -330 + // uncover lower right only - E4 -330 else if (digitalRead(but_UL) == 0 && digitalRead(but_UR) == 0 && digitalRead(but_LL) == 0) { tone(BUZZER2,330,50); digitalWrite(led_LR, HIGH); } - // uncover upper left - F4# -370 + // uncover upper left only - F4# -370 else if (digitalRead(but_UR) == 0 && digitalRead(but_LL) == 0 && digitalRead(but_LR) == 0) { digitalWrite(led_UL, HIGH); tone(BUZZER2,370,50); @@ -107,7 +111,8 @@ void loop() { tone(BUZZER2,523,50); } - // Turn off all LEDs + // Turn off all LEDs (This will happen so quick before + // the next iteration through the loop, that you'll never notice it_ digitalWrite(led_UR, LOW); digitalWrite(led_UL, LOW); digitalWrite(led_LL, LOW); From 80d1535f029de6c8474d74d4fd468c1d789935ef Mon Sep 17 00:00:00 2001 From: Mike S Date: Thu, 30 Jan 2014 16:18:28 -0700 Subject: [PATCH 08/14] Added Combo Lock Code --- Firmware/Combo/Combo.ino | 87 ++++++++++++++++++++++ Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino | 16 +++- 2 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 Firmware/Combo/Combo.ino diff --git a/Firmware/Combo/Combo.ino b/Firmware/Combo/Combo.ino new file mode 100644 index 0000000..c505561 --- /dev/null +++ b/Firmware/Combo/Combo.ino @@ -0,0 +1,87 @@ +/* + Make the Simon Says Game a 4-hole Ocarina (Like in the legend of zelda) + + Prof Mike Soltys + University of Colorado + 1/28/2014 + */ + + +// Define the button, LED, and buzzer pins (this is standard for all Simon Says games +// I've labeled mine UL for Upper Left, LR for Lower Left and so on. +const int led_UL = 10; //Red +const int led_UR = 3; //Green +const int led_LL = 13; //Blue +const int led_LR = 5; //Yellow + +const int but_UL = 9; +const int but_UR = 2; +const int but_LL = 12; +const int but_LR = 6; + +const int BUZZER1 = 4; +const int BUZZER2 = 7; + +void setup() { + //Setup hardware inputs/outputs. + //Enable pull ups on inputs + pinMode(but_UL, INPUT_PULLUP); + pinMode(but_UR, INPUT_PULLUP); + pinMode(but_LL, INPUT_PULLUP); + pinMode(but_LR, INPUT_PULLUP); + + pinMode(led_UL, OUTPUT); + pinMode(led_UR, OUTPUT); + pinMode(led_LL, OUTPUT); + pinMode(led_LR, OUTPUT); + + pinMode(BUZZER1, OUTPUT); + pinMode(BUZZER2, OUTPUT); +} + +void loop() { + // keep doing this over and over again. + // I will start with the most buttons pressed, and move on to the least buttons pressed + // for any combination, i'll play a matching note and light up the LEDs that aren't being pressed. + + // Start with all buttons pressed - C4 - 262 + int Button=ButtonWait(); + delay(100); + if (Button == 1){ + digitalWrite(led_UL, HIGH); + Button=ButtonWait(); + if (Button==2){ + digitalWrite(led_UR, HIGH); + } + } + delay(1000); + digitalWrite(led_UR, LOW); + digitalWrite(led_UL, LOW); + digitalWrite(led_LL, LOW); + digitalWrite(led_LR, LOW); +} + +int ButtonWait(void){ +while(1 == 1){ + if(digitalRead(but_UL) == 0){ + while (digitalRead(but_UL) != 0) ; + delay(10); + return 1; + } + else if(digitalRead(but_UR) == 0){ + while (digitalRead(but_UR) != 0) ; + delay(10); + return 2; + } + else if(digitalRead(but_LL) == 0){ + while (digitalRead(but_LL) != 0) ; + delay(10); + return 3; + } + else if(digitalRead(but_LR) == 0){ + while (digitalRead(but_LR) != 0) ; + delay(10); + return 4; + } + } +} diff --git a/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino b/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino index 7ae8c2a..1effc7d 100644 --- a/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino +++ b/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino @@ -36,8 +36,9 @@ int buzzer_2 = 7; void setup() { pinMode(ledPin, OUTPUT); - digitalWrite(buttonPin, HIGH); - pinMode(buttonPin, INPUT); + // Note: For the way the circuit is setup, INPUT_PULLUP will result much more + // stability than INPUT + pinMode(buttonPin, INPUT_PULLUP); pinMode(buzzer_1, OUTPUT); pinMode(buzzer_2, OUTPUT); @@ -51,14 +52,21 @@ void loop() int button_state = digitalRead(buttonPin); - if(button_state == 1){ + if(button_state == 0){ digitalWrite(ledPin, HIGH); // set the LED on delay(1000); // wait for a second digitalWrite(ledPin, LOW); // set the LED off // Call the "buzz()" funtion. See below to know what this does. - buzz(); + tone(buzzer_1,400,500); + delay(1000); + tone(buzzer_2,600,500); + delay(1000); + tone(buzzer_1,400,500); + delay(250); + tone(buzzer_2,600,500); + //tone(buzzer_1,500,100); } From d6fffc3e5774d5317ae52a8ac3eae177cf0c5c04 Mon Sep 17 00:00:00 2001 From: Mike S Date: Fri, 31 Jan 2014 11:00:55 -0700 Subject: [PATCH 09/14] Fixed Combo Code --- Firmware/Combo/Combo.ino | 99 +++++++++++++++++++++++++++++----------- 1 file changed, 73 insertions(+), 26 deletions(-) diff --git a/Firmware/Combo/Combo.ino b/Firmware/Combo/Combo.ino index c505561..62195da 100644 --- a/Firmware/Combo/Combo.ino +++ b/Firmware/Combo/Combo.ino @@ -1,5 +1,5 @@ /* - Make the Simon Says Game a 4-hole Ocarina (Like in the legend of zelda) + Code to Prof Mike Soltys University of Colorado @@ -8,7 +8,7 @@ // Define the button, LED, and buzzer pins (this is standard for all Simon Says games -// I've labeled mine UL for Upper Left, LR for Lower Left and so on. +// I've labeled mine UL for Upper Left, LR for Lower Left and so on. const int led_UL = 10; //Red const int led_UR = 3; //Green const int led_LL = 13; //Blue @@ -22,6 +22,13 @@ const int but_LR = 6; const int BUZZER1 = 4; const int BUZZER2 = 7; +// We'll set up variables for each button, so Upper Left is Button 1, +// Upper right is 2, etc. +const int UL = 1; +const int UR = 2; +const int LL = 3; +const int LR = 4; + void setup() { //Setup hardware inputs/outputs. //Enable pull ups on inputs @@ -39,21 +46,42 @@ void setup() { pinMode(BUZZER2, OUTPUT); } +// keep doing this over and over again. void loop() { - // keep doing this over and over again. - // I will start with the most buttons pressed, and move on to the least buttons pressed - // for any combination, i'll play a matching note and light up the LEDs that aren't being pressed. + // this calls the bit of code ButtonWait() which is found below + // the code waits untill a button is pressed, and then tells you which button was pressed + // (1, 2, 3, 4) + int Button = ButtonWait(); - // Start with all buttons pressed - C4 - 262 - int Button=ButtonWait(); - delay(100); - if (Button == 1){ + // check to see if the button was the first one in our sequence (Upper Left) + if (Button == UL){ + // if so, turn on the upper left button digitalWrite(led_UL, HIGH); - Button=ButtonWait(); - if (Button==2){ - digitalWrite(led_UR, HIGH); + // and wait for another button to be pressed + Button = ButtonWait(); + // now check to see if the second button (UR) in our sequence was pressed + if (Button == UR){ + // if so, turn that button on and continue + digitalWrite(led_UR, HIGH); + // play success tone! + tone(BUZZER1,399,1000); + // interesting fact: 399 Hz is the "most plesant" frequency + // http://www.ncbi.nlm.nih.gov/pubmed/503755 + + // if at any point a wrong button is pressed, the code will jump down + // to delay 1000, turn off the LEDs, and restart at the top of void loop() + } + // if the wrong button is pressed, play an unplesant sound + else { + tone(BUZZER1,2000,500); } } + // if the wrong button is pressed, play an unplesant sound + else { + tone(BUZZER1,2000,500); + } + + // wait a second and turn off all LEDS delay(1000); digitalWrite(led_UR, LOW); digitalWrite(led_UL, LOW); @@ -61,27 +89,46 @@ void loop() { digitalWrite(led_LR, LOW); } +// Waits for a button to be pressed, then returns 1-4 to tell what button it was. int ButtonWait(void){ -while(1 == 1){ + // this is always true, so this loop will keep going until it reaches a "return" command + while(1 == 1){ + // Check if the UL button is pressed if(digitalRead(but_UL) == 0){ - while (digitalRead(but_UL) != 0) ; - delay(10); - return 1; + //wait till the user releases the button + while (digitalRead(but_UL) == 0){ + delay(10); + } + // return what button was pressed + return(UL); } + // Check if the UR button is pressed else if(digitalRead(but_UR) == 0){ - while (digitalRead(but_UR) != 0) ; - delay(10); - return 2; - } + //wait till the user releases the button + while (digitalRead(but_UR) == 0){ + delay(10); + } + // return what button was pressed + return(UR); + } + // and so on. else if(digitalRead(but_LL) == 0){ - while (digitalRead(but_LL) != 0) ; - delay(10); - return 3; + while (digitalRead(but_LL) == 0){ + delay(10); + } + return(LL); } else if(digitalRead(but_LR) == 0){ - while (digitalRead(but_LR) != 0) ; - delay(10); - return 4; + while (digitalRead(but_LR) == 0){ + delay(10); + } + return(LR); } + // if we get here, nothing has been pressed, and so we'll restart at the top of + // the loop while (1==1). } } + + + + From 4c567653305cd13ab327ea1396718d3ab00dcc88 Mon Sep 17 00:00:00 2001 From: Mike S Date: Fri, 31 Jan 2014 11:03:56 -0700 Subject: [PATCH 10/14] Commented Combo Code --- Firmware/Combo/Combo.ino | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/Firmware/Combo/Combo.ino b/Firmware/Combo/Combo.ino index 62195da..4498beb 100644 --- a/Firmware/Combo/Combo.ino +++ b/Firmware/Combo/Combo.ino @@ -1,9 +1,11 @@ /* - Code to + Code checks for combination in order. Must press upper left button, then upper right button, + then lower left for success. Any wrong button will result in an unplesant sound, + and the code will reset. Prof Mike Soltys University of Colorado - 1/28/2014 + 1/31/2014 */ @@ -63,13 +65,22 @@ void loop() { if (Button == UR){ // if so, turn that button on and continue digitalWrite(led_UR, HIGH); - // play success tone! - tone(BUZZER1,399,1000); - // interesting fact: 399 Hz is the "most plesant" frequency - // http://www.ncbi.nlm.nih.gov/pubmed/503755 + Button = ButtonWait(); + if (Button == LL){ + // if so, turn that button on and continue + digitalWrite(led_LL, HIGH); + // play success tone! + tone(BUZZER1,399,1000); + // interesting fact: 399 Hz is the "most plesant" frequency + // http://www.ncbi.nlm.nih.gov/pubmed/503755 - // if at any point a wrong button is pressed, the code will jump down - // to delay 1000, turn off the LEDs, and restart at the top of void loop() + // if at any point a wrong button is pressed, the code will jump down + // to delay 1000, turn off the LEDs, and restart at the top of void loop() + } + // if the wrong button is pressed, play an unplesant sound + else { + tone(BUZZER1,2000,500); + } } // if the wrong button is pressed, play an unplesant sound else { @@ -80,7 +91,7 @@ void loop() { else { tone(BUZZER1,2000,500); } - + // wait a second and turn off all LEDS delay(1000); digitalWrite(led_UR, LOW); @@ -132,3 +143,4 @@ int ButtonWait(void){ + From 4b06a03f1a513b37ed76cf3ba408c808b838ceeb Mon Sep 17 00:00:00 2001 From: Toni Klopfenstein Date: Tue, 1 Apr 2014 13:18:48 -0600 Subject: [PATCH 11/14] Updating old firmware --- Firmware/Old-Simon_C/Makefile | 1112 ++++++++++++++-------------- Firmware/Old-Simon_C/Simon.c | 1282 ++++++++++++++++----------------- 2 files changed, 1197 insertions(+), 1197 deletions(-) diff --git a/Firmware/Old-Simon_C/Makefile b/Firmware/Old-Simon_C/Makefile index f949a91..29ea664 100644 --- a/Firmware/Old-Simon_C/Makefile +++ b/Firmware/Old-Simon_C/Makefile @@ -1,556 +1,556 @@ -# Hey Emacs, this is a -*- makefile -*- -#---------------------------------------------------------------------------- -# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. -# -# Released to the Public Domain -# -# Additional material for this makefile was written by: -# Peter Fleury -# Tim Henigan -# Colin O'Flynn -# Reiner Patommel -# Markus Pfaff -# Sander Pool -# Frederik Rouleau -# -#---------------------------------------------------------------------------- -# On command line: -# -# make all = Make software. -# -# make clean = Clean out built project files. -# -# make coff = Convert ELF to AVR COFF. -# -# make extcoff = Convert ELF to AVR Extended COFF. -# -# make program = Download the hex file to the device, using avrdude. -# Please customize the avrdude settings below first! -# -# make debug = Start either simulavr or avarice as specified for debugging, -# with avr-gdb or avr-insight as the front end for debugging. -# -# make filename.s = Just compile filename.c into the assembler code only. -# -# make filename.i = Create a preprocessed source file for use in submitting -# bug reports to the GCC project. -# -# To rebuild project do "make clean" then "make all". -#---------------------------------------------------------------------------- - - - -# MCU name -MCU = atmega328 - - -# Processor frequency. -# This will define a symbol, F_CPU, in all source code files equal to the -# processor frequency. You can then use this symbol in your source code to -# calculate timings. Do NOT tack on a 'UL' at the end, this will be done -# automatically to create a 32-bit value in your source code. -F_CPU = 8000000 - - -# Output format. (can be srec, ihex, binary) -FORMAT = ihex - - -# Target file name (without extension). -TARGET = Simon - - -# List C source files here. (C dependencies are automatically generated.) -SRC = $(TARGET).c - - -# List Assembler source files here. -# Make them always end in a capital .S. Files ending in a lowercase .s -# will not be considered source files but generated files (assembler -# output from the compiler), and will be deleted upon "make clean"! -# Even though the DOS/Win* filesystem matches both .s and .S the same, -# it will preserve the spelling of the filenames, and gcc itself does -# care about how the name is spelled on its command-line. -ASRC = - - -# Optimization level, can be [0, 1, 2, 3, s]. -# 0 = turn off optimization. s = optimize for size. -# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) -OPT = s - - -# Debugging format. -# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. -# AVR Studio 4.10 requires dwarf-2. -# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. -DEBUG = dwarf-2 - - -# List any extra directories to look for include files here. -# Each directory must be seperated by a space. -# Use forward slashes for directory separators. -# For a directory that has spaces, enclose it in quotes. -EXTRAINCDIRS = - - -# Compiler flag to set the C Standard level. -# c89 = "ANSI" C -# gnu89 = c89 plus GCC extensions -# c99 = ISO C99 standard (not yet fully implemented) -# gnu99 = c99 plus GCC extensions -CSTANDARD = -std=gnu99 - - -# Place -D or -U options here -CDEFS = -DF_CPU=$(F_CPU)UL - - -# Place -I options here -CINCS = - - - -#---------------- Compiler Options ---------------- -# -g*: generate debugging information -# -O*: optimization level -# -f...: tuning, see GCC manual and avr-libc documentation -# -Wall...: warning level -# -Wa,...: tell GCC to pass this to the assembler. -# -adhlns...: create assembler listing -CFLAGS = -g$(DEBUG) -CFLAGS += $(CDEFS) $(CINCS) -CFLAGS += -O$(OPT) -CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums -CFLAGS += -Wall -Wstrict-prototypes -CFLAGS += -Wa,-adhlns=$(<:.c=.lst) -CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) -CFLAGS += $(CSTANDARD) - - -#---------------- Assembler Options ---------------- -# -Wa,...: tell GCC to pass this to the assembler. -# -ahlms: create listing -# -gstabs: have the assembler create line number information; note that -# for use in COFF files, additional information about filenames -# and function names needs to be present in the assembler source -# files -- see avr-libc docs [FIXME: not yet described there] -ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs - - -#---------------- Library Options ---------------- -# Minimalistic printf version -PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min - -# Floating point printf version (requires MATH_LIB = -lm below) -PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt - -# If this is left blank, then it will use the Standard printf version. -PRINTF_LIB = -#PRINTF_LIB = $(PRINTF_LIB_MIN) -#PRINTF_LIB = $(PRINTF_LIB_FLOAT) - - -# Minimalistic scanf version -SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min - -# Floating point + %[ scanf version (requires MATH_LIB = -lm below) -SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt - -# If this is left blank, then it will use the Standard scanf version. -SCANF_LIB = -#SCANF_LIB = $(SCANF_LIB_MIN) -#SCANF_LIB = $(SCANF_LIB_FLOAT) - - -MATH_LIB = -lm - - - -#---------------- External Memory Options ---------------- - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# used for variables (.data/.bss) and heap (malloc()). -#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff - -# 64 KB of external RAM, starting after internal RAM (ATmega128!), -# only used for heap (malloc()). -#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff - -EXTMEMOPTS = - - - -#---------------- Linker Options ---------------- -# -Wl,...: tell GCC to pass this to linker. -# -Map: create map file -# --cref: add cross reference to map file -LDFLAGS = -Wl,-Map=$(TARGET).map,--cref -LDFLAGS += $(EXTMEMOPTS) -LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) - - - -#---------------- Programming Options (avrdude serial bootloader) ---------------- - -#"C:\arduino\hardware\tools\avr\bin\avrdude" -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -C"C:\arduino\hardware\tools\avr\etc\avrdude.conf" -#avrdude -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -SERIAL_AVRDUDE = avrdude -#SERIAL_AVRDUDE_CONFIG = "C:\arduino\hardware\tools\avr\etc\avrdude.conf" -SERIAL_AVRDUDE_PORT = COM3 -SERIAL_AVRDUDE_SPEED = 19200 -SERIAL_AVRDUDE_PROGRAMMER = stk500v1 - -SERIAL_AVRDUDE_FLAGS = -p $(MCU) -P $(SERIAL_AVRDUDE_PORT) -c $(SERIAL_AVRDUDE_PROGRAMMER) -b$(SERIAL_AVRDUDE_SPEED) -#SERIAL_AVRDUDE_FLAGS += -C$(SERIAL_AVRDUDE_CONFIG) -SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - - -#---------------- Programming Options (avrdude) ---------------- - -# Programming hardware: alf avr910 avrisp bascom bsd -# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 -# -# Type: avrdude -c ? -# to get a full listing. -AVRDUDE_PROGRAMMER = stk200 -#AVRDUDE_PROGRAMMER = ponyser - -# com1 = serial port. Use lpt1 to connect to parallel port. -AVRDUDE_PORT = lpt1 -#AVRDUDE_PORT = COM1 - -AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex -#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep - - -# Uncomment the following if you want avrdude's erase cycle counter. -# Note that this counter needs to be initialized first using -Yn, -# see avrdude manual. -#AVRDUDE_ERASE_COUNTER = -y - -# Uncomment the following if you do /not/ wish a verification to be -# performed after programming the device. -#AVRDUDE_NO_VERIFY = -V - -# Increase verbosity level. Please use this when submitting bug -# reports about avrdude. See -# to submit bug reports. -#AVRDUDE_VERBOSE = -v -v - -AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) -AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) -AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) -AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) - -#---------------- Programming Options (STK500) ---------------- -# Programming hardware: stk500 (the AVR MKII ISP version) - -STK500 = stk500 - -# Location of STK500.exe - no trailing '\' -STK500_PATH = C:\Program Files\Atmel\AVR Tools\STK500 - -# The STK500 AVR ISP MKII is USB. The USB drivers must already be installed. -# Do this normally by installing AVR Studio. -STK500_PORT = USB - -#-erase chip -Program Flash -Verify Flash -File name -Serial programing(ISP) -STK500_WRITE_FLASH = -e -pf -vf -if$(TARGET).hex -ms - -STK500_FLAGS = -d$(MCU) -c$(STK500_PORT) - -#-Set ISP frequency to 250kHz. Limit is 1/4 of internal osc which is default 1MHz -#Reduce this to 100kHz if you run into flash verification problems in low-voltage systems -STK500_FLAGS += -I250kHz - -#---------------- Debugging Options ---------------- - -# For simulavr only - target MCU frequency. -DEBUG_MFREQ = $(F_CPU) - -# Set the DEBUG_UI to either gdb or insight. -# DEBUG_UI = gdb -DEBUG_UI = insight - -# Set the debugging back-end to either avarice, simulavr. -DEBUG_BACKEND = avarice -#DEBUG_BACKEND = simulavr - -# GDB Init Filename. -GDBINIT_FILE = __avr_gdbinit - -# When using avarice settings for the JTAG -JTAG_DEV = /dev/com1 - -# Debugging port used to communicate between GDB / avarice / simulavr. -DEBUG_PORT = 4242 - -# Debugging host used to communicate between GDB / avarice / simulavr, normally -# just set to localhost unless doing some sort of crazy debugging when -# avarice is running on a different computer. -DEBUG_HOST = localhost - - - -#============================================================================ - - -# Define programs and commands. -SHELL = sh -CC = avr-gcc -OBJCOPY = avr-objcopy -OBJDUMP = avr-objdump -SIZE = avr-size -NM = avr-nm -AVRDUDE = avrdude -REMOVE = rm -f -COPY = cp -WINSHELL = cmd - - -# Define Messages -# English -MSG_ERRORS_NONE = Errors: none -MSG_BEGIN = -------- begin -------- -MSG_END = -------- end -------- -MSG_SIZE_BEFORE = Size before: -MSG_SIZE_AFTER = Size after: -MSG_COFF = Converting to AVR COFF: -MSG_EXTENDED_COFF = Converting to AVR Extended COFF: -MSG_FLASH = Creating load file for Flash: -MSG_EEPROM = Creating load file for EEPROM: -MSG_EXTENDED_LISTING = Creating Extended Listing: -MSG_SYMBOL_TABLE = Creating Symbol Table: -MSG_LINKING = Linking: -MSG_COMPILING = Compiling: -MSG_ASSEMBLING = Assembling: -MSG_CLEANING = Cleaning project: - - - - -# Define all object files. -OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) - -# Define all listing files. -LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) - - -# Compiler flags to generate dependency files. -GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d - - -# Combine all necessary flags and optional flags. -# Add target processor to flags. -ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) -ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) - - - - - -# Default target. -all: begin gccversion sizebefore build sizeafter end - -build: elf hex eep lss sym - -elf: $(TARGET).elf -hex: $(TARGET).hex -eep: $(TARGET).eep -lss: $(TARGET).lss -sym: $(TARGET).sym - - - -# Eye candy. -# AVR Studio 3.x does not check make's exit code but relies on -# the following magic strings to be generated by the compile job. -begin: - @echo - @echo $(MSG_BEGIN) - -end: - @echo $(MSG_END) - @echo - - -# Display size of file. -HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex -#New -ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf -#Old -#ELFSIZE = $(SIZE) -A $(TARGET).elf - -AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) - -sizebefore: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - -sizeafter: - @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ - $(AVRMEM) 2>/dev/null; echo; fi - - - -# Display compiler version information. -gccversion : - @$(CC) --version - - - -# Program the device. -program: $(TARGET).hex $(TARGET).eep - $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) - -program_stk500: $(TARGET).hex $(TARGET).eep - $(STK500_PATH)\$(STK500) $(STK500_FLAGS) $(STK500_WRITE_FLASH) - -program_serial: $(TARGET).hex $(TARGET).eep - $(SERIAL_AVRDUDE) $(SERIAL_AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) - -# Generate avr-gdb config/init file which does the following: -# define the reset signal, load the target file, connect to target, and set -# a breakpoint at main(). -gdb-config: - @$(REMOVE) $(GDBINIT_FILE) - @echo define reset >> $(GDBINIT_FILE) - @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) - @echo end >> $(GDBINIT_FILE) - @echo file $(TARGET).elf >> $(GDBINIT_FILE) - @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) -ifeq ($(DEBUG_BACKEND),simulavr) - @echo load >> $(GDBINIT_FILE) -endif - @echo break main >> $(GDBINIT_FILE) - -debug: gdb-config $(TARGET).elf -ifeq ($(DEBUG_BACKEND), avarice) - @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. - @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ - $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) - @$(WINSHELL) /c pause - -else - @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ - $(DEBUG_MFREQ) --port $(DEBUG_PORT) -endif - @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) - - - - -# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. -COFFCONVERT=$(OBJCOPY) --debugging \ ---change-section-address .data-0x800000 \ ---change-section-address .bss-0x800000 \ ---change-section-address .noinit-0x800000 \ ---change-section-address .eeprom-0x810000 - - -coff: $(TARGET).elf - @echo - @echo $(MSG_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-avr $< $(TARGET).cof - - -extcoff: $(TARGET).elf - @echo - @echo $(MSG_EXTENDED_COFF) $(TARGET).cof - $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof - - - -# Create final output files (.hex, .eep) from ELF output file. -%.hex: %.elf - @echo - @echo $(MSG_FLASH) $@ - $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ - -%.eep: %.elf - @echo - @echo $(MSG_EEPROM) $@ - -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ - --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ - -# Create extended listing file from ELF output file. -%.lss: %.elf - @echo - @echo $(MSG_EXTENDED_LISTING) $@ - $(OBJDUMP) -h -S $< > $@ - -# Create a symbol table from ELF output file. -%.sym: %.elf - @echo - @echo $(MSG_SYMBOL_TABLE) $@ - $(NM) -n $< > $@ - - - -# Link: create ELF output file from object files. -.SECONDARY : $(TARGET).elf -.PRECIOUS : $(OBJ) -%.elf: $(OBJ) - @echo - @echo $(MSG_LINKING) $@ - $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) - - -# Compile: create object files from C source files. -%.o : %.c - @echo - @echo $(MSG_COMPILING) $< - $(CC) -c $(ALL_CFLAGS) $< -o $@ - - -# Compile: create assembler files from C source files. -%.s : %.c - $(CC) -S $(ALL_CFLAGS) $< -o $@ - - -# Assemble: create object files from assembler source files. -%.o : %.S - @echo - @echo $(MSG_ASSEMBLING) $< - $(CC) -c $(ALL_ASFLAGS) $< -o $@ - -# Create preprocessed source for use in sending a bug report. -%.i : %.c - $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ - - -# Target: clean project. -clean: begin clean_list end - -clean_list : - @echo - @echo $(MSG_CLEANING) - $(REMOVE) $(TARGET).hex - $(REMOVE) $(TARGET).eep - $(REMOVE) $(TARGET).cof - $(REMOVE) $(TARGET).elf - $(REMOVE) $(TARGET).map - $(REMOVE) $(TARGET).sym - $(REMOVE) $(TARGET).lss - $(REMOVE) $(OBJ) - $(REMOVE) $(LST) - $(REMOVE) $(SRC:.c=.s) - $(REMOVE) $(SRC:.c=.d) - $(REMOVE) .dep/* - - - -# Include the dependency files. --include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) - - -# Listing of phony targets. -.PHONY : all begin finish end sizebefore sizeafter gccversion \ -build elf hex eep lss sym coff extcoff \ -clean clean_list program debug gdb-config - - - +# Hey Emacs, this is a -*- makefile -*- +#---------------------------------------------------------------------------- +# WinAVR Makefile Template written by Eric B. Weddington, Jörg Wunsch, et al. +# +# Released to the Public Domain +# +# Additional material for this makefile was written by: +# Peter Fleury +# Tim Henigan +# Colin O'Flynn +# Reiner Patommel +# Markus Pfaff +# Sander Pool +# Frederik Rouleau +# +#---------------------------------------------------------------------------- +# On command line: +# +# make all = Make software. +# +# make clean = Clean out built project files. +# +# make coff = Convert ELF to AVR COFF. +# +# make extcoff = Convert ELF to AVR Extended COFF. +# +# make program = Download the hex file to the device, using avrdude. +# Please customize the avrdude settings below first! +# +# make debug = Start either simulavr or avarice as specified for debugging, +# with avr-gdb or avr-insight as the front end for debugging. +# +# make filename.s = Just compile filename.c into the assembler code only. +# +# make filename.i = Create a preprocessed source file for use in submitting +# bug reports to the GCC project. +# +# To rebuild project do "make clean" then "make all". +#---------------------------------------------------------------------------- + + + +# MCU name +MCU = atmega328 + + +# Processor frequency. +# This will define a symbol, F_CPU, in all source code files equal to the +# processor frequency. You can then use this symbol in your source code to +# calculate timings. Do NOT tack on a 'UL' at the end, this will be done +# automatically to create a 32-bit value in your source code. +F_CPU = 8000000 + + +# Output format. (can be srec, ihex, binary) +FORMAT = ihex + + +# Target file name (without extension). +TARGET = Simon + + +# List C source files here. (C dependencies are automatically generated.) +SRC = $(TARGET).c + + +# List Assembler source files here. +# Make them always end in a capital .S. Files ending in a lowercase .s +# will not be considered source files but generated files (assembler +# output from the compiler), and will be deleted upon "make clean"! +# Even though the DOS/Win* filesystem matches both .s and .S the same, +# it will preserve the spelling of the filenames, and gcc itself does +# care about how the name is spelled on its command-line. +ASRC = + + +# Optimization level, can be [0, 1, 2, 3, s]. +# 0 = turn off optimization. s = optimize for size. +# (Note: 3 is not always the best optimization level. See avr-libc FAQ.) +OPT = s + + +# Debugging format. +# Native formats for AVR-GCC's -g are dwarf-2 [default] or stabs. +# AVR Studio 4.10 requires dwarf-2. +# AVR [Extended] COFF format requires stabs, plus an avr-objcopy run. +DEBUG = dwarf-2 + + +# List any extra directories to look for include files here. +# Each directory must be seperated by a space. +# Use forward slashes for directory separators. +# For a directory that has spaces, enclose it in quotes. +EXTRAINCDIRS = + + +# Compiler flag to set the C Standard level. +# c89 = "ANSI" C +# gnu89 = c89 plus GCC extensions +# c99 = ISO C99 standard (not yet fully implemented) +# gnu99 = c99 plus GCC extensions +CSTANDARD = -std=gnu99 + + +# Place -D or -U options here +CDEFS = -DF_CPU=$(F_CPU)UL + + +# Place -I options here +CINCS = + + + +#---------------- Compiler Options ---------------- +# -g*: generate debugging information +# -O*: optimization level +# -f...: tuning, see GCC manual and avr-libc documentation +# -Wall...: warning level +# -Wa,...: tell GCC to pass this to the assembler. +# -adhlns...: create assembler listing +CFLAGS = -g$(DEBUG) +CFLAGS += $(CDEFS) $(CINCS) +CFLAGS += -O$(OPT) +CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums +CFLAGS += -Wall -Wstrict-prototypes +CFLAGS += -Wa,-adhlns=$(<:.c=.lst) +CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) +CFLAGS += $(CSTANDARD) + + +#---------------- Assembler Options ---------------- +# -Wa,...: tell GCC to pass this to the assembler. +# -ahlms: create listing +# -gstabs: have the assembler create line number information; note that +# for use in COFF files, additional information about filenames +# and function names needs to be present in the assembler source +# files -- see avr-libc docs [FIXME: not yet described there] +ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs + + +#---------------- Library Options ---------------- +# Minimalistic printf version +PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min + +# Floating point printf version (requires MATH_LIB = -lm below) +PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt + +# If this is left blank, then it will use the Standard printf version. +PRINTF_LIB = +#PRINTF_LIB = $(PRINTF_LIB_MIN) +#PRINTF_LIB = $(PRINTF_LIB_FLOAT) + + +# Minimalistic scanf version +SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min + +# Floating point + %[ scanf version (requires MATH_LIB = -lm below) +SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt + +# If this is left blank, then it will use the Standard scanf version. +SCANF_LIB = +#SCANF_LIB = $(SCANF_LIB_MIN) +#SCANF_LIB = $(SCANF_LIB_FLOAT) + + +MATH_LIB = -lm + + + +#---------------- External Memory Options ---------------- + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# used for variables (.data/.bss) and heap (malloc()). +#EXTMEMOPTS = -Wl,-Tdata=0x801100,--defsym=__heap_end=0x80ffff + +# 64 KB of external RAM, starting after internal RAM (ATmega128!), +# only used for heap (malloc()). +#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff + +EXTMEMOPTS = + + + +#---------------- Linker Options ---------------- +# -Wl,...: tell GCC to pass this to linker. +# -Map: create map file +# --cref: add cross reference to map file +LDFLAGS = -Wl,-Map=$(TARGET).map,--cref +LDFLAGS += $(EXTMEMOPTS) +LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB) + + + +#---------------- Programming Options (avrdude serial bootloader) ---------------- + +#"C:\arduino\hardware\tools\avr\bin\avrdude" -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F -C"C:\arduino\hardware\tools\avr\etc\avrdude.conf" +#avrdude -PCOM3 -c stk500v1 -patmega168 -b19200 -Uflash:w:Simon-PTH-v1.hex -V -F +SERIAL_AVRDUDE = avrdude +#SERIAL_AVRDUDE_CONFIG = "C:\arduino\hardware\tools\avr\etc\avrdude.conf" +SERIAL_AVRDUDE_PORT = COM3 +SERIAL_AVRDUDE_SPEED = 19200 +SERIAL_AVRDUDE_PROGRAMMER = stk500v1 + +SERIAL_AVRDUDE_FLAGS = -p $(MCU) -P $(SERIAL_AVRDUDE_PORT) -c $(SERIAL_AVRDUDE_PROGRAMMER) -b$(SERIAL_AVRDUDE_SPEED) +#SERIAL_AVRDUDE_FLAGS += -C$(SERIAL_AVRDUDE_CONFIG) +SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +SERIAL_AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + + +#---------------- Programming Options (avrdude) ---------------- + +# Programming hardware: alf avr910 avrisp bascom bsd +# dt006 pavr picoweb pony-stk200 sp12 stk200 stk500 +# +# Type: avrdude -c ? +# to get a full listing. +AVRDUDE_PROGRAMMER = stk200 +#AVRDUDE_PROGRAMMER = ponyser + +# com1 = serial port. Use lpt1 to connect to parallel port. +AVRDUDE_PORT = lpt1 +#AVRDUDE_PORT = COM1 + +AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex +#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep + + +# Uncomment the following if you want avrdude's erase cycle counter. +# Note that this counter needs to be initialized first using -Yn, +# see avrdude manual. +#AVRDUDE_ERASE_COUNTER = -y + +# Uncomment the following if you do /not/ wish a verification to be +# performed after programming the device. +#AVRDUDE_NO_VERIFY = -V + +# Increase verbosity level. Please use this when submitting bug +# reports about avrdude. See +# to submit bug reports. +#AVRDUDE_VERBOSE = -v -v + +AVRDUDE_FLAGS = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER) +AVRDUDE_FLAGS += $(AVRDUDE_NO_VERIFY) +AVRDUDE_FLAGS += $(AVRDUDE_VERBOSE) +AVRDUDE_FLAGS += $(AVRDUDE_ERASE_COUNTER) + +#---------------- Programming Options (STK500) ---------------- +# Programming hardware: stk500 (the AVR MKII ISP version) + +STK500 = stk500 + +# Location of STK500.exe - no trailing '\' +STK500_PATH = C:\Program Files\Atmel\AVR Tools\STK500 + +# The STK500 AVR ISP MKII is USB. The USB drivers must already be installed. +# Do this normally by installing AVR Studio. +STK500_PORT = USB + +#-erase chip -Program Flash -Verify Flash -File name -Serial programing(ISP) +STK500_WRITE_FLASH = -e -pf -vf -if$(TARGET).hex -ms + +STK500_FLAGS = -d$(MCU) -c$(STK500_PORT) + +#-Set ISP frequency to 250kHz. Limit is 1/4 of internal osc which is default 1MHz +#Reduce this to 100kHz if you run into flash verification problems in low-voltage systems +STK500_FLAGS += -I250kHz + +#---------------- Debugging Options ---------------- + +# For simulavr only - target MCU frequency. +DEBUG_MFREQ = $(F_CPU) + +# Set the DEBUG_UI to either gdb or insight. +# DEBUG_UI = gdb +DEBUG_UI = insight + +# Set the debugging back-end to either avarice, simulavr. +DEBUG_BACKEND = avarice +#DEBUG_BACKEND = simulavr + +# GDB Init Filename. +GDBINIT_FILE = __avr_gdbinit + +# When using avarice settings for the JTAG +JTAG_DEV = /dev/com1 + +# Debugging port used to communicate between GDB / avarice / simulavr. +DEBUG_PORT = 4242 + +# Debugging host used to communicate between GDB / avarice / simulavr, normally +# just set to localhost unless doing some sort of crazy debugging when +# avarice is running on a different computer. +DEBUG_HOST = localhost + + + +#============================================================================ + + +# Define programs and commands. +SHELL = sh +CC = avr-gcc +OBJCOPY = avr-objcopy +OBJDUMP = avr-objdump +SIZE = avr-size +NM = avr-nm +AVRDUDE = avrdude +REMOVE = rm -f +COPY = cp +WINSHELL = cmd + + +# Define Messages +# English +MSG_ERRORS_NONE = Errors: none +MSG_BEGIN = -------- begin -------- +MSG_END = -------- end -------- +MSG_SIZE_BEFORE = Size before: +MSG_SIZE_AFTER = Size after: +MSG_COFF = Converting to AVR COFF: +MSG_EXTENDED_COFF = Converting to AVR Extended COFF: +MSG_FLASH = Creating load file for Flash: +MSG_EEPROM = Creating load file for EEPROM: +MSG_EXTENDED_LISTING = Creating Extended Listing: +MSG_SYMBOL_TABLE = Creating Symbol Table: +MSG_LINKING = Linking: +MSG_COMPILING = Compiling: +MSG_ASSEMBLING = Assembling: +MSG_CLEANING = Cleaning project: + + + + +# Define all object files. +OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) + +# Define all listing files. +LST = $(SRC:.c=.lst) $(ASRC:.S=.lst) + + +# Compiler flags to generate dependency files. +GENDEPFLAGS = -MD -MP -MF .dep/$(@F).d + + +# Combine all necessary flags and optional flags. +# Add target processor to flags. +ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS) $(GENDEPFLAGS) +ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS) + + + + + +# Default target. +all: begin gccversion sizebefore build sizeafter end + +build: elf hex eep lss sym + +elf: $(TARGET).elf +hex: $(TARGET).hex +eep: $(TARGET).eep +lss: $(TARGET).lss +sym: $(TARGET).sym + + + +# Eye candy. +# AVR Studio 3.x does not check make's exit code but relies on +# the following magic strings to be generated by the compile job. +begin: + @echo + @echo $(MSG_BEGIN) + +end: + @echo $(MSG_END) + @echo + + +# Display size of file. +HEXSIZE = $(SIZE) --target=$(FORMAT) $(TARGET).hex +#New +ELFSIZE = $(SIZE) --mcu=$(MCU) --format=avr $(TARGET).elf +#Old +#ELFSIZE = $(SIZE) -A $(TARGET).elf + +AVRMEM = avr-mem.sh $(TARGET).elf $(MCU) + +sizebefore: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_BEFORE); $(ELFSIZE); \ + $(AVRMEM) 2>/dev/null; echo; fi + +sizeafter: + @if test -f $(TARGET).elf; then echo; echo $(MSG_SIZE_AFTER); $(ELFSIZE); \ + $(AVRMEM) 2>/dev/null; echo; fi + + + +# Display compiler version information. +gccversion : + @$(CC) --version + + + +# Program the device. +program: $(TARGET).hex $(TARGET).eep + $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM) + +program_stk500: $(TARGET).hex $(TARGET).eep + $(STK500_PATH)\$(STK500) $(STK500_FLAGS) $(STK500_WRITE_FLASH) + +program_serial: $(TARGET).hex $(TARGET).eep + $(SERIAL_AVRDUDE) $(SERIAL_AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) + +# Generate avr-gdb config/init file which does the following: +# define the reset signal, load the target file, connect to target, and set +# a breakpoint at main(). +gdb-config: + @$(REMOVE) $(GDBINIT_FILE) + @echo define reset >> $(GDBINIT_FILE) + @echo SIGNAL SIGHUP >> $(GDBINIT_FILE) + @echo end >> $(GDBINIT_FILE) + @echo file $(TARGET).elf >> $(GDBINIT_FILE) + @echo target remote $(DEBUG_HOST):$(DEBUG_PORT) >> $(GDBINIT_FILE) +ifeq ($(DEBUG_BACKEND),simulavr) + @echo load >> $(GDBINIT_FILE) +endif + @echo break main >> $(GDBINIT_FILE) + +debug: gdb-config $(TARGET).elf +ifeq ($(DEBUG_BACKEND), avarice) + @echo Starting AVaRICE - Press enter when "waiting to connect" message displays. + @$(WINSHELL) /c start avarice --jtag $(JTAG_DEV) --erase --program --file \ + $(TARGET).elf $(DEBUG_HOST):$(DEBUG_PORT) + @$(WINSHELL) /c pause + +else + @$(WINSHELL) /c start simulavr --gdbserver --device $(MCU) --clock-freq \ + $(DEBUG_MFREQ) --port $(DEBUG_PORT) +endif + @$(WINSHELL) /c start avr-$(DEBUG_UI) --command=$(GDBINIT_FILE) + + + + +# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB. +COFFCONVERT=$(OBJCOPY) --debugging \ +--change-section-address .data-0x800000 \ +--change-section-address .bss-0x800000 \ +--change-section-address .noinit-0x800000 \ +--change-section-address .eeprom-0x810000 + + +coff: $(TARGET).elf + @echo + @echo $(MSG_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-avr $< $(TARGET).cof + + +extcoff: $(TARGET).elf + @echo + @echo $(MSG_EXTENDED_COFF) $(TARGET).cof + $(COFFCONVERT) -O coff-ext-avr $< $(TARGET).cof + + + +# Create final output files (.hex, .eep) from ELF output file. +%.hex: %.elf + @echo + @echo $(MSG_FLASH) $@ + $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@ + +%.eep: %.elf + @echo + @echo $(MSG_EEPROM) $@ + -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \ + --change-section-lma .eeprom=0 -O $(FORMAT) $< $@ + +# Create extended listing file from ELF output file. +%.lss: %.elf + @echo + @echo $(MSG_EXTENDED_LISTING) $@ + $(OBJDUMP) -h -S $< > $@ + +# Create a symbol table from ELF output file. +%.sym: %.elf + @echo + @echo $(MSG_SYMBOL_TABLE) $@ + $(NM) -n $< > $@ + + + +# Link: create ELF output file from object files. +.SECONDARY : $(TARGET).elf +.PRECIOUS : $(OBJ) +%.elf: $(OBJ) + @echo + @echo $(MSG_LINKING) $@ + $(CC) $(ALL_CFLAGS) $^ --output $@ $(LDFLAGS) + + +# Compile: create object files from C source files. +%.o : %.c + @echo + @echo $(MSG_COMPILING) $< + $(CC) -c $(ALL_CFLAGS) $< -o $@ + + +# Compile: create assembler files from C source files. +%.s : %.c + $(CC) -S $(ALL_CFLAGS) $< -o $@ + + +# Assemble: create object files from assembler source files. +%.o : %.S + @echo + @echo $(MSG_ASSEMBLING) $< + $(CC) -c $(ALL_ASFLAGS) $< -o $@ + +# Create preprocessed source for use in sending a bug report. +%.i : %.c + $(CC) -E -mmcu=$(MCU) -I. $(CFLAGS) $< -o $@ + + +# Target: clean project. +clean: begin clean_list end + +clean_list : + @echo + @echo $(MSG_CLEANING) + $(REMOVE) $(TARGET).hex + $(REMOVE) $(TARGET).eep + $(REMOVE) $(TARGET).cof + $(REMOVE) $(TARGET).elf + $(REMOVE) $(TARGET).map + $(REMOVE) $(TARGET).sym + $(REMOVE) $(TARGET).lss + $(REMOVE) $(OBJ) + $(REMOVE) $(LST) + $(REMOVE) $(SRC:.c=.s) + $(REMOVE) $(SRC:.c=.d) + $(REMOVE) .dep/* + + + +# Include the dependency files. +-include $(shell mkdir .dep 2>/dev/null) $(wildcard .dep/*) + + +# Listing of phony targets. +.PHONY : all begin finish end sizebefore sizeafter gccversion \ +build elf hex eep lss sym coff extcoff \ +clean clean_list program debug gdb-config + + + diff --git a/Firmware/Old-Simon_C/Simon.c b/Firmware/Old-Simon_C/Simon.c index 110bbf8..2c14726 100644 --- a/Firmware/Old-Simon_C/Simon.c +++ b/Firmware/Old-Simon_C/Simon.c @@ -1,641 +1,641 @@ -/** - * 6-19-2007 - * Copyright 2009, Spark Fun Electronics - * Nathan Seidle - * nathan at sparkfun.com - * - * Released under the Creative Commons Attribution Share-Alike 3.0 License - * http://creativecommons.org/licenses/by-sa/3.0 - * - * Simon Game ported for the ATmega168 - * - * Fixes and cleanup by Joshua Neal - * - * Generates random sequence, plays music, and displays button lights. - * - * Simon tones from Wikipedia - * - A (red, upper left) - 440Hz - 2.272ms - 1.136ms pulse - * - a (green, upper right, an octave higher than A) - 880Hz - 1.136ms, - * 0.568ms pulse - * - D (blue, lower left, a perfect fourth higher than the upper left) - * 587.33Hz - 1.702ms - 0.851ms pulse - * G (yellow, lower right, a perfect fourth higher than the lower left) - - * 784Hz - 1.276ms - 0.638ms pulse - * - * The tones are close, but probably off a bit, but they sound all right. - * - * The old version of SparkFun simon used an ATmega8. An ATmega8 ships - * with a default internal 1MHz oscillator. You will need to set the - * internal fuses to operate at the correct external 16MHz oscillator. - * - * Original Fuses: - * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xE1:m -U hfuse:w:0xD9:m - * - * Command to set to fuses to use external 16MHz: - * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xEE:m -U hfuse:w:0xC9:m - * - * The current version of Simon uses the ATmega168. The external osciallator - * was removed to reduce component count. This version of simon relies on the - * internal default 1MHz osciallator. Do not set the external fuses. - */ - -#include -#include - -/* Uncomment one of the following, corresponding to the board you have. */ -//#define BOARD_REV_6_25_08 -//#define BOARD_REV_4_9_2009 -//#define BOARD_REV_6_3_2009 -#define BOARD_REV_PTH - -#ifdef BOARD_REV_PTH - -#define CHIP_ATMEGA168 - -#define LED_RED (1 << 0) -#define LED_GREEN (1 << 1) -#define LED_BLUE (1 << 2) -#define LED_YELLOW (1 << 3) - -/* LED pin definitions */ -#define LED_RED_PIN 2 -#define LED_RED_PORT PORTB -#define LED_GREEN_PIN 3 -#define LED_GREEN_PORT PORTD -#define LED_BLUE_PIN 5 -#define LED_BLUE_PORT PORTB -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 1 -#define BUTTON_RED_PORT PINB -#define BUTTON_GREEN_PIN 2 -#define BUTTON_GREEN_PORT PIND -#define BUTTON_BLUE_PIN 4 -#define BUTTON_BLUE_PORT PINB -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 4 -#define BUZZER1_PORT PORTD -#define BUZZER2 7 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_PTH */ - - -#ifdef BOARD_REV_6_25_08 - -#define CHIP_ATMEGA168 - -#define LED_RED (1 << 0) -#define LED_GREEN (1 << 1) -#define LED_BLUE (1 << 2) -#define LED_YELLOW (1 << 3) - -/* LED pin definitions */ -#define LED_RED_PIN 3 -#define LED_RED_PORT PORTC -#define LED_GREEN_PIN 2 -#define LED_GREEN_PORT PORTD -#define LED_BLUE_PIN 0 -#define LED_BLUE_PORT PORTC -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 2 -#define BUTTON_RED_PORT PINC -#define BUTTON_GREEN_PIN 5 -#define BUTTON_GREEN_PORT PINC -#define BUTTON_BLUE_PIN 1 -#define BUTTON_BLUE_PORT PINC -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 3 -#define BUZZER1_PORT PORTD -#define BUZZER2 4 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_6_25_08 */ - - -#ifdef BOARD_REV_4_9_2009 - -#define CHIP_ATMEGA168 - -/* LED pin definitions */ -#define LED_BLUE_PIN 5 -#define LED_BLUE_PORT PORTB -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD -#define LED_RED_PIN 2 -#define LED_RED_PORT PORTB -#define LED_GREEN_PIN 2 -#define LED_GREEN_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 0 -#define BUTTON_RED_PORT PINB -#define BUTTON_GREEN_PIN 1 -#define BUTTON_GREEN_PORT PINB -#define BUTTON_BLUE_PIN 7 -#define BUTTON_BLUE_PORT PIND -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 3 -#define BUZZER1_PORT PORTD -#define BUZZER2 4 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_4_9_2009 */ - -#ifdef BOARD_REV_6_3_2009 - -#define CHIP_ATMEGA168 - -#define LED_RED (1 << 0) -#define LED_GREEN (1 << 1) -#define LED_BLUE (1 << 2) -#define LED_YELLOW (1 << 3) - -/* LED pin definitions */ -#define LED_RED_PIN 2 -#define LED_RED_PORT PORTB -#define LED_GREEN_PIN 2 -#define LED_GREEN_PORT PORTD -#define LED_BLUE_PIN 5 -#define LED_BLUE_PORT PORTB -#define LED_YELLOW_PIN 5 -#define LED_YELLOW_PORT PORTD - -/* Button pin definitions */ -#define BUTTON_RED_PIN 0 -#define BUTTON_RED_PORT PINB -#define BUTTON_GREEN_PIN 1 -#define BUTTON_GREEN_PORT PINB -#define BUTTON_BLUE_PIN 7 -#define BUTTON_BLUE_PORT PIND -#define BUTTON_YELLOW_PIN 6 -#define BUTTON_YELLOW_PORT PIND - -/* Buzzer pin definitions */ -#define BUZZER1 3 -#define BUZZER1_PORT PORTD -#define BUZZER2 4 -#define BUZZER2_PORT PORTD - -#endif /* BOARD_REV_6_3_2009 */ - -/* Define game parameters */ -#define MOVES_TO_WIN 14 -#define TIME_LIMIT 3000 /* 3000ms = 3 sec */ - -#define sbi(port_name, pin_number) (port_name |= 1< 256) - { - TIFR0 = (1< 0) { - delay_us(1000); - } -} - -/* Light the given set of LEDs */ -static void set_leds(uint8_t leds) -{ - if ((leds & LED_RED) != 0) { - sbi(LED_RED_PORT, LED_RED_PIN); - } else { - cbi(LED_RED_PORT, LED_RED_PIN); - } - if ((leds & LED_GREEN) != 0) { - sbi(LED_GREEN_PORT, LED_GREEN_PIN); - } else { - cbi(LED_GREEN_PORT, LED_GREEN_PIN); - } - if ((leds & LED_BLUE) != 0) { - sbi(LED_BLUE_PORT, LED_BLUE_PIN); - } else { - cbi(LED_BLUE_PORT, LED_BLUE_PIN); - } - if ((leds & LED_YELLOW) != 0) { - sbi(LED_YELLOW_PORT, LED_YELLOW_PIN); - } else { - cbi(LED_YELLOW_PORT, LED_YELLOW_PIN); - } -} - - -#ifdef BOARD_REV_6_25_08 -static void init_gpio(void) -{ - /* 1 = output, 0 = input */ - DDRB = 0b11111111; - DDRC = 0b00001001; /* LEDs and Buttons */ - DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ - - PORTC = 0b00100110; /* Enable pull-ups on buttons 0,2,3 */ - PORTD = 0b01000000; /* Enable pull-up on button 1 */ -} -#endif /* BOARD_REV_6_25_08 */ - -#ifdef BOARD_REV_4_9_2009 -static void init_gpio(void) -{ - /* 1 = output, 0 = input */ - DDRB = 0b11111100; /* button 2,3 on PB0,1 */ - DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ - - PORTB = 0b00000011; /* Enable pull-ups on buttons 2,3 */ - PORTD = 0b11000000; /* Enable pull-up on button 0,1 */ -} -#endif /* BOARD_REV_4_9_2009 */ - -#ifdef BOARD_REV_PTH -static void init_gpio(void) -{ - /* 1 = output, 0 = input */ - DDRB = 0xFF & ~(1< 70; x--) { - for (y = 0; y < 3; y++) { - sbi(BUZZER2_PORT, BUZZER2); - cbi(BUZZER1_PORT, BUZZER1); - - delay_us(x); - - cbi(BUZZER2_PORT, BUZZER2); - sbi(BUZZER1_PORT, BUZZER1); - - delay_us(x); - } - } -} - -/* Play the winner sound and lights */ -void play_winner(void) -{ - set_leds(LED_GREEN|LED_BLUE); - winner_sound(); - set_leds(LED_RED|LED_YELLOW); - winner_sound(); - set_leds(LED_GREEN|LED_BLUE); - winner_sound(); - set_leds(LED_RED|LED_YELLOW); - winner_sound(); -} - -/* Plays the current contents of the game moves */ -static void play_moves(void) -{ - uint8_t move; - - for (move = 0; move < nmoves; move++) { - toner(moves[move], 150); - delay_ms(150); - } -} - -/* Adds a new random button to the game sequence, by sampling the timer */ -static void add_to_moves(void) -{ - uint8_t new_button; - - /* Use the lower 2 bits of the timer for the random value */ - new_button = 1 << (TCNT2 & 0x3); - - moves[nmoves++] = new_button; -} - -/* Toggle buzzer every buzz_delay_us, for a duration of buzz_length_ms. */ -static void buzz_sound(uint16_t buzz_length_ms, uint16_t buzz_delay_us) -{ - uint32_t buzz_length_us; - - buzz_length_us = buzz_length_ms * (uint32_t)1000; - while (buzz_length_us > buzz_delay_us*2) { - buzz_length_us -= buzz_delay_us*2; - - /* toggle the buzzer at various speeds */ - cbi(BUZZER1_PORT, BUZZER1); - sbi(BUZZER2_PORT, BUZZER2); - delay_us(buzz_delay_us); - - sbi(BUZZER1_PORT, BUZZER1); - cbi(BUZZER2_PORT, BUZZER2); - delay_us(buzz_delay_us); - } -} - - -/* - * Light an LED and play tone - * - * red, upper left: 440Hz - 2.272ms - 1.136ms pulse - * green, upper right: 880Hz - 1.136ms - 0.568ms pulse - * blue, lower left: 587.33Hz - 1.702ms - 0.851ms pulse - * yellow, lower right: 784Hz - 1.276ms - 0.638ms pulse - */ -static void toner(uint8_t which, uint16_t buzz_length_ms) -{ - set_leds(which); - switch (which) { - case LED_RED: - buzz_sound(buzz_length_ms, 1136); - break; - - case LED_GREEN: - buzz_sound(buzz_length_ms, 568); - break; - - case LED_BLUE: - buzz_sound(buzz_length_ms, 851); - break; - - case LED_YELLOW: - buzz_sound(buzz_length_ms, 638); - break; - } - - /* Turn off all LEDs */ - set_leds(0); -} - -/* Show an "attract mode" display while waiting for user to press button. */ -static void attract_mode(void) -{ - while (1) { - set_leds(LED_RED); - delay_ms(100); - if (check_button() != 0x00) - return; - - set_leds(LED_BLUE); - delay_ms(100); - if (check_button() != 0x00) - return; - - set_leds(LED_GREEN); - delay_ms(100); - if (check_button() != 0x00) - return; - - set_leds(LED_YELLOW); - delay_ms(100); - if (check_button() != 0x00) - return; - } -} - - -/* Wait for a button to be pressed. Returns one of led colors (LED_RED, etc.) - * if successful, 0 if timed out */ -static uint8_t wait_for_button(void) -{ - uint16_t time_limit = TIME_LIMIT; - uint8_t released = 0; - uint8_t old_button; - - while (time_limit > 0) { - uint8_t button; - - /* Implement a small bit of debouncing */ - old_button = button; - button = check_button(); - - /* - * Make sure we've seen the previous button - * released before accepting new buttons - */ - if (button == 0) - released = 1; - if (button == old_button && released == 1) { - /* Make sure just one button is pressed */ - if (button == LED_RED || - button == LED_BLUE || - button == LED_GREEN || - button == LED_YELLOW) { - return button; - } - } - - delay_ms(1); - - time_limit--; - } - return 0; /* Timed out */ -} - - - -/* Play the game. Returns 0 if player loses, or 1 if player wins. */ -static int game_mode(void) -{ - nmoves = 0; - while (nmoves < MOVES_TO_WIN) { - uint8_t move; - - /* Add a button to the current moves, then play them back */ - add_to_moves(); - play_moves(); - - /* Then require the player to repeat the sequence. */ - for (move = 0; move < nmoves; move++) { - uint8_t choice = wait_for_button(); - - /* If wait timed out, player loses. */ - if (choice == 0) - return 0; - - toner(choice, 150); - - /* If the choice is incorect, player loses. */ - if (choice != moves[move]) { - return 0; - } - } - - /* Player was correct, delay before playing moves */ - delay_ms(1000); - } - - /* player wins */ - return 1; -} - -int main(void) -{ - - /* Setup IO pins and defaults */ - ioinit(); - - /* Main loop */ - while (1) { - /* Wait for user to start game */ - attract_mode(); - - /* Indicate the start of game play */ - set_leds(LED_RED|LED_GREEN|LED_BLUE|LED_YELLOW); - delay_ms(1000); - set_leds(0); - delay_ms(250); - - if (game_mode() != 0) { - /* Player won, play winner tones */ - play_winner(); - } else { - /* Player lost, play loser tones */ - play_loser(); - } - } - - return(0); -} - +/** + * 6-19-2007 + * Copyright 2009, Spark Fun Electronics + * Nathan Seidle + * nathan at sparkfun.com + * + * Released under the Creative Commons Attribution Share-Alike 3.0 License + * http://creativecommons.org/licenses/by-sa/3.0 + * + * Simon Game ported for the ATmega168 + * + * Fixes and cleanup by Joshua Neal + * + * Generates random sequence, plays music, and displays button lights. + * + * Simon tones from Wikipedia + * - A (red, upper left) - 440Hz - 2.272ms - 1.136ms pulse + * - a (green, upper right, an octave higher than A) - 880Hz - 1.136ms, + * 0.568ms pulse + * - D (blue, lower left, a perfect fourth higher than the upper left) + * 587.33Hz - 1.702ms - 0.851ms pulse + * G (yellow, lower right, a perfect fourth higher than the lower left) - + * 784Hz - 1.276ms - 0.638ms pulse + * + * The tones are close, but probably off a bit, but they sound all right. + * + * The old version of SparkFun simon used an ATmega8. An ATmega8 ships + * with a default internal 1MHz oscillator. You will need to set the + * internal fuses to operate at the correct external 16MHz oscillator. + * + * Original Fuses: + * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xE1:m -U hfuse:w:0xD9:m + * + * Command to set to fuses to use external 16MHz: + * avrdude -p atmega8 -P lpt1 -c stk200 -U lfuse:w:0xEE:m -U hfuse:w:0xC9:m + * + * The current version of Simon uses the ATmega168. The external osciallator + * was removed to reduce component count. This version of simon relies on the + * internal default 1MHz osciallator. Do not set the external fuses. + */ + +#include +#include + +/* Uncomment one of the following, corresponding to the board you have. */ +//#define BOARD_REV_6_25_08 +//#define BOARD_REV_4_9_2009 +//#define BOARD_REV_6_3_2009 +#define BOARD_REV_PTH + +#ifdef BOARD_REV_PTH + +#define CHIP_ATMEGA168 + +#define LED_RED (1 << 0) +#define LED_GREEN (1 << 1) +#define LED_BLUE (1 << 2) +#define LED_YELLOW (1 << 3) + +/* LED pin definitions */ +#define LED_RED_PIN 2 +#define LED_RED_PORT PORTB +#define LED_GREEN_PIN 3 +#define LED_GREEN_PORT PORTD +#define LED_BLUE_PIN 5 +#define LED_BLUE_PORT PORTB +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 1 +#define BUTTON_RED_PORT PINB +#define BUTTON_GREEN_PIN 2 +#define BUTTON_GREEN_PORT PIND +#define BUTTON_BLUE_PIN 4 +#define BUTTON_BLUE_PORT PINB +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 4 +#define BUZZER1_PORT PORTD +#define BUZZER2 7 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_PTH */ + + +#ifdef BOARD_REV_6_25_08 + +#define CHIP_ATMEGA168 + +#define LED_RED (1 << 0) +#define LED_GREEN (1 << 1) +#define LED_BLUE (1 << 2) +#define LED_YELLOW (1 << 3) + +/* LED pin definitions */ +#define LED_RED_PIN 3 +#define LED_RED_PORT PORTC +#define LED_GREEN_PIN 2 +#define LED_GREEN_PORT PORTD +#define LED_BLUE_PIN 0 +#define LED_BLUE_PORT PORTC +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 2 +#define BUTTON_RED_PORT PINC +#define BUTTON_GREEN_PIN 5 +#define BUTTON_GREEN_PORT PINC +#define BUTTON_BLUE_PIN 1 +#define BUTTON_BLUE_PORT PINC +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 3 +#define BUZZER1_PORT PORTD +#define BUZZER2 4 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_6_25_08 */ + + +#ifdef BOARD_REV_4_9_2009 + +#define CHIP_ATMEGA168 + +/* LED pin definitions */ +#define LED_BLUE_PIN 5 +#define LED_BLUE_PORT PORTB +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD +#define LED_RED_PIN 2 +#define LED_RED_PORT PORTB +#define LED_GREEN_PIN 2 +#define LED_GREEN_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 0 +#define BUTTON_RED_PORT PINB +#define BUTTON_GREEN_PIN 1 +#define BUTTON_GREEN_PORT PINB +#define BUTTON_BLUE_PIN 7 +#define BUTTON_BLUE_PORT PIND +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 3 +#define BUZZER1_PORT PORTD +#define BUZZER2 4 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_4_9_2009 */ + +#ifdef BOARD_REV_6_3_2009 + +#define CHIP_ATMEGA168 + +#define LED_RED (1 << 0) +#define LED_GREEN (1 << 1) +#define LED_BLUE (1 << 2) +#define LED_YELLOW (1 << 3) + +/* LED pin definitions */ +#define LED_RED_PIN 2 +#define LED_RED_PORT PORTB +#define LED_GREEN_PIN 2 +#define LED_GREEN_PORT PORTD +#define LED_BLUE_PIN 5 +#define LED_BLUE_PORT PORTB +#define LED_YELLOW_PIN 5 +#define LED_YELLOW_PORT PORTD + +/* Button pin definitions */ +#define BUTTON_RED_PIN 0 +#define BUTTON_RED_PORT PINB +#define BUTTON_GREEN_PIN 1 +#define BUTTON_GREEN_PORT PINB +#define BUTTON_BLUE_PIN 7 +#define BUTTON_BLUE_PORT PIND +#define BUTTON_YELLOW_PIN 6 +#define BUTTON_YELLOW_PORT PIND + +/* Buzzer pin definitions */ +#define BUZZER1 3 +#define BUZZER1_PORT PORTD +#define BUZZER2 4 +#define BUZZER2_PORT PORTD + +#endif /* BOARD_REV_6_3_2009 */ + +/* Define game parameters */ +#define MOVES_TO_WIN 14 +#define TIME_LIMIT 3000 /* 3000ms = 3 sec */ + +#define sbi(port_name, pin_number) (port_name |= 1< 256) + { + TIFR0 = (1< 0) { + delay_us(1000); + } +} + +/* Light the given set of LEDs */ +static void set_leds(uint8_t leds) +{ + if ((leds & LED_RED) != 0) { + sbi(LED_RED_PORT, LED_RED_PIN); + } else { + cbi(LED_RED_PORT, LED_RED_PIN); + } + if ((leds & LED_GREEN) != 0) { + sbi(LED_GREEN_PORT, LED_GREEN_PIN); + } else { + cbi(LED_GREEN_PORT, LED_GREEN_PIN); + } + if ((leds & LED_BLUE) != 0) { + sbi(LED_BLUE_PORT, LED_BLUE_PIN); + } else { + cbi(LED_BLUE_PORT, LED_BLUE_PIN); + } + if ((leds & LED_YELLOW) != 0) { + sbi(LED_YELLOW_PORT, LED_YELLOW_PIN); + } else { + cbi(LED_YELLOW_PORT, LED_YELLOW_PIN); + } +} + + +#ifdef BOARD_REV_6_25_08 +static void init_gpio(void) +{ + /* 1 = output, 0 = input */ + DDRB = 0b11111111; + DDRC = 0b00001001; /* LEDs and Buttons */ + DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ + + PORTC = 0b00100110; /* Enable pull-ups on buttons 0,2,3 */ + PORTD = 0b01000000; /* Enable pull-up on button 1 */ +} +#endif /* BOARD_REV_6_25_08 */ + +#ifdef BOARD_REV_4_9_2009 +static void init_gpio(void) +{ + /* 1 = output, 0 = input */ + DDRB = 0b11111100; /* button 2,3 on PB0,1 */ + DDRD = 0b00111110; /* LEDs, buttons, buzzer, TX/RX */ + + PORTB = 0b00000011; /* Enable pull-ups on buttons 2,3 */ + PORTD = 0b11000000; /* Enable pull-up on button 0,1 */ +} +#endif /* BOARD_REV_4_9_2009 */ + +#ifdef BOARD_REV_PTH +static void init_gpio(void) +{ + /* 1 = output, 0 = input */ + DDRB = 0xFF & ~(1< 70; x--) { + for (y = 0; y < 3; y++) { + sbi(BUZZER2_PORT, BUZZER2); + cbi(BUZZER1_PORT, BUZZER1); + + delay_us(x); + + cbi(BUZZER2_PORT, BUZZER2); + sbi(BUZZER1_PORT, BUZZER1); + + delay_us(x); + } + } +} + +/* Play the winner sound and lights */ +void play_winner(void) +{ + set_leds(LED_GREEN|LED_BLUE); + winner_sound(); + set_leds(LED_RED|LED_YELLOW); + winner_sound(); + set_leds(LED_GREEN|LED_BLUE); + winner_sound(); + set_leds(LED_RED|LED_YELLOW); + winner_sound(); +} + +/* Plays the current contents of the game moves */ +static void play_moves(void) +{ + uint8_t move; + + for (move = 0; move < nmoves; move++) { + toner(moves[move], 150); + delay_ms(150); + } +} + +/* Adds a new random button to the game sequence, by sampling the timer */ +static void add_to_moves(void) +{ + uint8_t new_button; + + /* Use the lower 2 bits of the timer for the random value */ + new_button = 1 << (TCNT2 & 0x3); + + moves[nmoves++] = new_button; +} + +/* Toggle buzzer every buzz_delay_us, for a duration of buzz_length_ms. */ +static void buzz_sound(uint16_t buzz_length_ms, uint16_t buzz_delay_us) +{ + uint32_t buzz_length_us; + + buzz_length_us = buzz_length_ms * (uint32_t)1000; + while (buzz_length_us > buzz_delay_us*2) { + buzz_length_us -= buzz_delay_us*2; + + /* toggle the buzzer at various speeds */ + cbi(BUZZER1_PORT, BUZZER1); + sbi(BUZZER2_PORT, BUZZER2); + delay_us(buzz_delay_us); + + sbi(BUZZER1_PORT, BUZZER1); + cbi(BUZZER2_PORT, BUZZER2); + delay_us(buzz_delay_us); + } +} + + +/* + * Light an LED and play tone + * + * red, upper left: 440Hz - 2.272ms - 1.136ms pulse + * green, upper right: 880Hz - 1.136ms - 0.568ms pulse + * blue, lower left: 587.33Hz - 1.702ms - 0.851ms pulse + * yellow, lower right: 784Hz - 1.276ms - 0.638ms pulse + */ +static void toner(uint8_t which, uint16_t buzz_length_ms) +{ + set_leds(which); + switch (which) { + case LED_RED: + buzz_sound(buzz_length_ms, 1136); + break; + + case LED_GREEN: + buzz_sound(buzz_length_ms, 568); + break; + + case LED_BLUE: + buzz_sound(buzz_length_ms, 851); + break; + + case LED_YELLOW: + buzz_sound(buzz_length_ms, 638); + break; + } + + /* Turn off all LEDs */ + set_leds(0); +} + +/* Show an "attract mode" display while waiting for user to press button. */ +static void attract_mode(void) +{ + while (1) { + set_leds(LED_RED); + delay_ms(100); + if (check_button() != 0x00) + return; + + set_leds(LED_BLUE); + delay_ms(100); + if (check_button() != 0x00) + return; + + set_leds(LED_GREEN); + delay_ms(100); + if (check_button() != 0x00) + return; + + set_leds(LED_YELLOW); + delay_ms(100); + if (check_button() != 0x00) + return; + } +} + + +/* Wait for a button to be pressed. Returns one of led colors (LED_RED, etc.) + * if successful, 0 if timed out */ +static uint8_t wait_for_button(void) +{ + uint16_t time_limit = TIME_LIMIT; + uint8_t released = 0; + uint8_t old_button; + + while (time_limit > 0) { + uint8_t button; + + /* Implement a small bit of debouncing */ + old_button = button; + button = check_button(); + + /* + * Make sure we've seen the previous button + * released before accepting new buttons + */ + if (button == 0) + released = 1; + if (button == old_button && released == 1) { + /* Make sure just one button is pressed */ + if (button == LED_RED || + button == LED_BLUE || + button == LED_GREEN || + button == LED_YELLOW) { + return button; + } + } + + delay_ms(1); + + time_limit--; + } + return 0; /* Timed out */ +} + + + +/* Play the game. Returns 0 if player loses, or 1 if player wins. */ +static int game_mode(void) +{ + nmoves = 0; + while (nmoves < MOVES_TO_WIN) { + uint8_t move; + + /* Add a button to the current moves, then play them back */ + add_to_moves(); + play_moves(); + + /* Then require the player to repeat the sequence. */ + for (move = 0; move < nmoves; move++) { + uint8_t choice = wait_for_button(); + + /* If wait timed out, player loses. */ + if (choice == 0) + return 0; + + toner(choice, 150); + + /* If the choice is incorect, player loses. */ + if (choice != moves[move]) { + return 0; + } + } + + /* Player was correct, delay before playing moves */ + delay_ms(1000); + } + + /* player wins */ + return 1; +} + +int main(void) +{ + + /* Setup IO pins and defaults */ + ioinit(); + + /* Main loop */ + while (1) { + /* Wait for user to start game */ + attract_mode(); + + /* Indicate the start of game play */ + set_leds(LED_RED|LED_GREEN|LED_BLUE|LED_YELLOW); + delay_ms(1000); + set_leds(0); + delay_ms(250); + + if (game_mode() != 0) { + /* Player won, play winner tones */ + play_winner(); + } else { + /* Player lost, play loser tones */ + play_loser(); + } + } + + return(0); +} + From cbe1f52fed44ac514710c8e2771444383a19e368 Mon Sep 17 00:00:00 2001 From: Toni Klopfenstein Date: Tue, 1 Apr 2014 14:02:09 -0600 Subject: [PATCH 12/14] Organizing new code --- .../{ => Additional Experiments}/Combo/Combo.ino | 0 .../Ocarina/Ocarina.ino | 0 Firmware/Additional Experiments/README.md | 1 + .../SIMON_1_BLINK/SIMON_1_BLINK.ino | 0 .../SIMON_1_BLINK/applet/HardwareSerial.cpp.o | Bin .../SIMON_1_BLINK/applet/Print.cpp.o | Bin .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp | 0 .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep | 0 .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf | Bin .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex | 0 .../SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o | Bin .../SIMON_1_BLINK/applet/WInterrupts.c.o | Bin .../SIMON_1_BLINK/applet/WMath.cpp.o | Bin .../SIMON_1_BLINK/applet/core.a | Bin .../SIMON_1_BLINK/applet/pins_arduino.c.o | Bin .../SIMON_1_BLINK/applet/wiring.c.o | Bin .../SIMON_1_BLINK/applet/wiring_analog.c.o | Bin .../SIMON_1_BLINK/applet/wiring_digital.c.o | Bin .../SIMON_1_BLINK/applet/wiring_pulse.c.o | Bin .../SIMON_1_BLINK/applet/wiring_shift.c.o | Bin .../SIMON_2_BUTTON/SIMON_2_BUTTON.ino | 0 .../SIMON_2_BUTTON/applet/HardwareSerial.cpp.o | Bin .../SIMON_2_BUTTON/applet/Print.cpp.o | Bin .../SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp | 0 .../SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep | 0 .../SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf | Bin .../SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex | 0 .../SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o | Bin .../SIMON_2_BUTTON/applet/WInterrupts.c.o | Bin .../SIMON_2_BUTTON/applet/WMath.cpp.o | Bin .../SIMON_2_BUTTON/applet/core.a | Bin .../SIMON_2_BUTTON/applet/pins_arduino.c.o | Bin .../SIMON_2_BUTTON/applet/simon.h | 0 .../SIMON_2_BUTTON/applet/wiring.c.o | Bin .../SIMON_2_BUTTON/applet/wiring_analog.c.o | Bin .../SIMON_2_BUTTON/applet/wiring_digital.c.o | Bin .../SIMON_2_BUTTON/applet/wiring_pulse.c.o | Bin .../SIMON_2_BUTTON/applet/wiring_shift.c.o | Bin .../SIMON_3_BUZZER/SIMON_3_BUZZER.ino | 0 .../SIMON_3_BUZZER/applet/HardwareSerial.cpp.o | Bin .../SIMON_3_BUZZER/applet/Print.cpp.o | Bin .../SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp | 0 .../SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep | 0 .../SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf | Bin .../SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex | 0 .../SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o | Bin .../SIMON_3_BUZZER/applet/WInterrupts.c.o | Bin .../SIMON_3_BUZZER/applet/WMath.cpp.o | Bin .../SIMON_3_BUZZER/applet/core.a | Bin .../SIMON_3_BUZZER/applet/pins_arduino.c.o | Bin .../SIMON_3_BUZZER/applet/wiring.c.o | Bin .../SIMON_3_BUZZER/applet/wiring_analog.c.o | Bin .../SIMON_3_BUZZER/applet/wiring_digital.c.o | Bin .../SIMON_3_BUZZER/applet/wiring_pulse.c.o | Bin .../SIMON_3_BUZZER/applet/wiring_shift.c.o | Bin .../SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino | 0 .../SIMON_APPLE_REMOTE/AppleRemoteSender.cpp | 0 .../SIMON_APPLE_REMOTE/AppleRemoteSender.h | 0 .../SIMON_APPLE_REMOTE/LICENSE | 0 .../SIMON_APPLE_REMOTE/README.txt | 0 .../SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino | 0 .../SIMON_APPLE_REMOTE/keywords.txt | 0 62 files changed, 1 insertion(+) rename Firmware/{ => Additional Experiments}/Combo/Combo.ino (100%) rename Firmware/{ => Additional Experiments}/Ocarina/Ocarina.ino (100%) create mode 100644 Firmware/Additional Experiments/README.md rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/SIMON_1_BLINK.ino (100%) rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/HardwareSerial.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/Print.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/WInterrupts.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/WMath.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/core.a (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/pins_arduino.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/wiring.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/wiring_analog.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/wiring_digital.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/wiring_pulse.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_1_BLINK/applet/wiring_shift.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/SIMON_2_BUTTON.ino (100%) rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/Print.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/WInterrupts.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/WMath.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/core.a (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/pins_arduino.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/simon.h (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/wiring.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/wiring_analog.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/wiring_digital.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/wiring_pulse.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_2_BUTTON/applet/wiring_shift.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/SIMON_3_BUZZER.ino (100%) rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/Print.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/WInterrupts.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/WMath.cpp.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/core.a (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/pins_arduino.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/wiring.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/wiring_analog.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/wiring_digital.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/wiring_pulse.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_3_BUZZER/applet/wiring_shift.c.o (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino (100%) rename Firmware/{ => Additional Experiments}/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp (100%) rename Firmware/{ => Additional Experiments}/SIMON_APPLE_REMOTE/AppleRemoteSender.h (100%) rename Firmware/{ => Additional Experiments}/SIMON_APPLE_REMOTE/LICENSE (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_APPLE_REMOTE/README.txt (100%) mode change 100755 => 100644 rename Firmware/{ => Additional Experiments}/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino (100%) rename Firmware/{ => Additional Experiments}/SIMON_APPLE_REMOTE/keywords.txt (100%) mode change 100755 => 100644 diff --git a/Firmware/Combo/Combo.ino b/Firmware/Additional Experiments/Combo/Combo.ino similarity index 100% rename from Firmware/Combo/Combo.ino rename to Firmware/Additional Experiments/Combo/Combo.ino diff --git a/Firmware/Ocarina/Ocarina.ino b/Firmware/Additional Experiments/Ocarina/Ocarina.ino similarity index 100% rename from Firmware/Ocarina/Ocarina.ino rename to Firmware/Additional Experiments/Ocarina/Ocarina.ino diff --git a/Firmware/Additional Experiments/README.md b/Firmware/Additional Experiments/README.md new file mode 100644 index 0000000..3ca097d --- /dev/null +++ b/Firmware/Additional Experiments/README.md @@ -0,0 +1 @@ +These are additional experiments written by SparkFun customer Mike Soltys. diff --git a/Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino b/Firmware/Additional Experiments/SIMON_1_BLINK/SIMON_1_BLINK.ino similarity index 100% rename from Firmware/SIMON_1_BLINK/SIMON_1_BLINK.ino rename to Firmware/Additional Experiments/SIMON_1_BLINK/SIMON_1_BLINK.ino diff --git a/Firmware/SIMON_1_BLINK/applet/HardwareSerial.cpp.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/HardwareSerial.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/HardwareSerial.cpp.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/HardwareSerial.cpp.o diff --git a/Firmware/SIMON_1_BLINK/applet/Print.cpp.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/Print.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/Print.cpp.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/Print.cpp.o diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.eep diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.elf diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.hex diff --git a/Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/SIMON_1_BLINK.cpp.o diff --git a/Firmware/SIMON_1_BLINK/applet/WInterrupts.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/WInterrupts.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/WInterrupts.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/WInterrupts.c.o diff --git a/Firmware/SIMON_1_BLINK/applet/WMath.cpp.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/WMath.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/WMath.cpp.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/WMath.cpp.o diff --git a/Firmware/SIMON_1_BLINK/applet/core.a b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/core.a old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/core.a rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/core.a diff --git a/Firmware/SIMON_1_BLINK/applet/pins_arduino.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/pins_arduino.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/pins_arduino.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/pins_arduino.c.o diff --git a/Firmware/SIMON_1_BLINK/applet/wiring.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/wiring.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring.c.o diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_analog.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_analog.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/wiring_analog.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_analog.c.o diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_digital.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_digital.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/wiring_digital.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_digital.c.o diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_pulse.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_pulse.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/wiring_pulse.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_pulse.c.o diff --git a/Firmware/SIMON_1_BLINK/applet/wiring_shift.c.o b/Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_shift.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_1_BLINK/applet/wiring_shift.c.o rename to Firmware/Additional Experiments/SIMON_1_BLINK/applet/wiring_shift.c.o diff --git a/Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.ino b/Firmware/Additional Experiments/SIMON_2_BUTTON/SIMON_2_BUTTON.ino similarity index 100% rename from Firmware/SIMON_2_BUTTON/SIMON_2_BUTTON.ino rename to Firmware/Additional Experiments/SIMON_2_BUTTON/SIMON_2_BUTTON.ino diff --git a/Firmware/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/HardwareSerial.cpp.o diff --git a/Firmware/SIMON_2_BUTTON/applet/Print.cpp.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/Print.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/Print.cpp.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/Print.cpp.o diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.eep diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.elf diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.hex diff --git a/Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/SIMON_2_BUTTON.cpp.o diff --git a/Firmware/SIMON_2_BUTTON/applet/WInterrupts.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/WInterrupts.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/WInterrupts.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/WInterrupts.c.o diff --git a/Firmware/SIMON_2_BUTTON/applet/WMath.cpp.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/WMath.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/WMath.cpp.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/WMath.cpp.o diff --git a/Firmware/SIMON_2_BUTTON/applet/core.a b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/core.a old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/core.a rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/core.a diff --git a/Firmware/SIMON_2_BUTTON/applet/pins_arduino.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/pins_arduino.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/pins_arduino.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/pins_arduino.c.o diff --git a/Firmware/SIMON_2_BUTTON/applet/simon.h b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/simon.h old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/simon.h rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/simon.h diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/wiring.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring.c.o diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_analog.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_analog.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/wiring_analog.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_analog.c.o diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_digital.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_digital.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/wiring_digital.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_digital.c.o diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_pulse.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_pulse.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/wiring_pulse.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_pulse.c.o diff --git a/Firmware/SIMON_2_BUTTON/applet/wiring_shift.c.o b/Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_shift.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_2_BUTTON/applet/wiring_shift.c.o rename to Firmware/Additional Experiments/SIMON_2_BUTTON/applet/wiring_shift.c.o diff --git a/Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino b/Firmware/Additional Experiments/SIMON_3_BUZZER/SIMON_3_BUZZER.ino similarity index 100% rename from Firmware/SIMON_3_BUZZER/SIMON_3_BUZZER.ino rename to Firmware/Additional Experiments/SIMON_3_BUZZER/SIMON_3_BUZZER.ino diff --git a/Firmware/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/HardwareSerial.cpp.o diff --git a/Firmware/SIMON_3_BUZZER/applet/Print.cpp.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/Print.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/Print.cpp.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/Print.cpp.o diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.eep diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.elf diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.hex diff --git a/Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/SIMON_3_BUZZER.cpp.o diff --git a/Firmware/SIMON_3_BUZZER/applet/WInterrupts.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/WInterrupts.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/WInterrupts.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/WInterrupts.c.o diff --git a/Firmware/SIMON_3_BUZZER/applet/WMath.cpp.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/WMath.cpp.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/WMath.cpp.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/WMath.cpp.o diff --git a/Firmware/SIMON_3_BUZZER/applet/core.a b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/core.a old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/core.a rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/core.a diff --git a/Firmware/SIMON_3_BUZZER/applet/pins_arduino.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/pins_arduino.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/pins_arduino.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/pins_arduino.c.o diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/wiring.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring.c.o diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_analog.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_analog.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/wiring_analog.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_analog.c.o diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_digital.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_digital.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/wiring_digital.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_digital.c.o diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_pulse.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_pulse.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/wiring_pulse.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_pulse.c.o diff --git a/Firmware/SIMON_3_BUZZER/applet/wiring_shift.c.o b/Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_shift.c.o old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_3_BUZZER/applet/wiring_shift.c.o rename to Firmware/Additional Experiments/SIMON_3_BUZZER/applet/wiring_shift.c.o diff --git a/Firmware/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino b/Firmware/Additional Experiments/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino similarity index 100% rename from Firmware/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino rename to Firmware/Additional Experiments/SIMON_4_MrRoboto/SIMON_4_MrRoboto.ino diff --git a/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp b/Firmware/Additional Experiments/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp similarity index 100% rename from Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp rename to Firmware/Additional Experiments/SIMON_APPLE_REMOTE/AppleRemoteSender.cpp diff --git a/Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.h b/Firmware/Additional Experiments/SIMON_APPLE_REMOTE/AppleRemoteSender.h similarity index 100% rename from Firmware/SIMON_APPLE_REMOTE/AppleRemoteSender.h rename to Firmware/Additional Experiments/SIMON_APPLE_REMOTE/AppleRemoteSender.h diff --git a/Firmware/SIMON_APPLE_REMOTE/LICENSE b/Firmware/Additional Experiments/SIMON_APPLE_REMOTE/LICENSE old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_APPLE_REMOTE/LICENSE rename to Firmware/Additional Experiments/SIMON_APPLE_REMOTE/LICENSE diff --git a/Firmware/SIMON_APPLE_REMOTE/README.txt b/Firmware/Additional Experiments/SIMON_APPLE_REMOTE/README.txt old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_APPLE_REMOTE/README.txt rename to Firmware/Additional Experiments/SIMON_APPLE_REMOTE/README.txt diff --git a/Firmware/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino b/Firmware/Additional Experiments/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino similarity index 100% rename from Firmware/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino rename to Firmware/Additional Experiments/SIMON_APPLE_REMOTE/SIMON_APPLE_REMOTE.ino diff --git a/Firmware/SIMON_APPLE_REMOTE/keywords.txt b/Firmware/Additional Experiments/SIMON_APPLE_REMOTE/keywords.txt old mode 100755 new mode 100644 similarity index 100% rename from Firmware/SIMON_APPLE_REMOTE/keywords.txt rename to Firmware/Additional Experiments/SIMON_APPLE_REMOTE/keywords.txt From 3d437a4b811e650398ad516ac6fdf730e487514c Mon Sep 17 00:00:00 2001 From: Jim Gallaher Date: Wed, 14 Jan 2015 23:51:37 -0600 Subject: [PATCH 13/14] fix eagle software link in readme --- Hardware/README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Hardware/README.md b/Hardware/README.md index f1b63c0..b470fd8 100644 --- a/Hardware/README.md +++ b/Hardware/README.md @@ -2,7 +2,7 @@ The .sch and .brd files hare are Eagle CAD schematic and PCB design files. -These files were created with Eagle 5.1.0, you'll need Eagle 5.0 or later to open them up. There is a free, lite, version of Eagle available from [cadsoftusa.com](cadsoftusa.com). +These files were created with Eagle 5.1.0, you'll need Eagle 5.0 or later to open them up. There is a free, lite, version of Eagle available from [cadsoftusa.com](http://www.cadsoftusa.com/download-eagle/freeware). # License @@ -11,4 +11,4 @@ This product is open source! These Eagle files are released under the Creative C Please use, reuse, and modify these files as you see fit. Please maintain attribution and release anything derivative under the same license. -- Your friends at SparkFun. \ No newline at end of file +- Your friends at SparkFun. From 85f589a34ead6a3c4e68245e96323cd3dc4de3fa Mon Sep 17 00:00:00 2001 From: Jim Gallaher Date: Wed, 14 Jan 2015 23:58:46 -0600 Subject: [PATCH 14/14] fix link sytanx in readme --- Hardware/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Hardware/README.md b/Hardware/README.md index b470fd8..e8e18cf 100644 --- a/Hardware/README.md +++ b/Hardware/README.md @@ -2,7 +2,7 @@ The .sch and .brd files hare are Eagle CAD schematic and PCB design files. -These files were created with Eagle 5.1.0, you'll need Eagle 5.0 or later to open them up. There is a free, lite, version of Eagle available from [cadsoftusa.com](http://www.cadsoftusa.com/download-eagle/freeware). +These files were created with Eagle 5.1.0, you'll need Eagle 5.0 or later to open them up. There is a free, lite, version of Eagle available from ([cadsoftusa.com](http://www.cadsoftusa.com/download-eagle/freeware)). # License