// RHD's TTL Color Selector
// Programming by Matt "Sigurthr" Giordano 08/13/2014
// www.SigurthrEnterprises.com
// Sigurthr@SigurthrEnterprises.com
// ATTiny85 Physical Pinout - innermost designation is code addressable
// _______
// Reset _| |_| |_ Vcc
// ADC3 Pin3 3 _| |_ 2 Pin2 ADC1
// ADC2 Pin4 A2 _| ATT85 |_ 1 Pin1 Digital-1
// Gnd _| |_ 0 Pin0 Digital-0
// |_______|
#include <EEPROM.h> // include the EEPROM Memory library
boolean pinOptions[7][3] = { // Array of pin combinations (1 = on, 0 = off)
{1,1,1},
{1,0,0},
{1,1,0},
{0,1,0},
{0,1,1},
{0,0,1},
{1,0,1}
};
byte PressDetects = 0;
byte ButtonPin = 3; // see pinout
byte ColorOnePin = 0; // see pinout
byte ColorTwoPin = 1; // see pinout
byte ColorThreePin = 2; // see pinout
byte MemVar;
byte ButtonPinState;
byte ColorChoice;
byte MemoryLocation = 1;
byte TriggerCount = 10; // threshold for debounce
================================
======start of new stuff========
================================
int RandomVar;
int RandomVarNew;
int GenerateRandom;
===============================
=======end of new stuff========
===============================
void setup (){ // this subroutine runs once upon startup
MemVar = EEPROM.read(MemoryLocation); // read EEPROM on power on
pinMode (0, OUTPUT); // set pin 0 to output
pinMode (1, OUTPUT); // set pin 1 to output
pinMode (2, OUTPUT); // set pin 2 to output
pinMode (3, INPUT); // set pin 3 to input
================================
======start of new stuff========
================================
if (MemVar == 8){
RandomVar = EEPROM.read(MemoryLocation);
RandomVar = 9999 * RandomVar
// does this language allow use of string functions on an int?
// the following fuction is surely incorrect syntax
RandomVarNew = int( left(RandomVar, 3) & right(RandomVar, 3) )
EEPROM.write(RandomVar, RandomVarNew); // Write new number
ColorChoice = (RandomVarNew % 7) + 1;
}
===============================
=======end of new stuff========
===============================
}
void loop(){ // this subroutine runs continuously after setup finishes
ButtonPinState = digitalRead(ButtonPin); // read ButtonPin to ButtonPinState
if (MemVar == 0 || 255){ // first time an EEPROM is read it reads as 255
MemVar = 1;
}
if (ButtonPinState == HIGH){ // when ButtonPinState is HIGH...
++ PressDetects; // increment detection variable
}
if (PressDetects >= TriggerCount) { // when threshold is exceeded...
++ MemVar; // increment memory variable
PressDetects = 0; // reset button detector
if (MemVar >= 9){ // on 9th button press...
MemVar = 1; // reset color
}
if (MemVar == 8){ // on 8th button press...
================================
======start of new stuff========
================================
GenerateRandom = random(100000, 999999);
ColorChoice = (GenerateRandom % 7) + 1; // I think this is how you do modulus?
EEPROM.write(RandomVar, GenerateRandom); // Write initial psuedu random number
===============================
=======end of new stuff========
===============================
}
EEPROM.write(MemoryLocation, MemVar); // write color to memory
}
if (MemVar != 8){ // prevents ColorChoice from being set to 8 (invalid)
ColorChoice = MemVar;
}
digitalWrite(ColorOnePin, pinOptions[ColorChoice-1][0]);
digitalWrite(ColorTwoPin, pinOptions[ColorChoice-1][1]);
digitalWrite(ColorThreePin, pinOptions[ColorChoice-1][2]);
}