To make reading easier, just copy the text and paste it into your IDE.
Controller64_TX03
for C64 Esplora-based BT project
/*
Controller64_TX03
Adding D3 as an INPUT
for ZAXXON, reverses UP/DOWN action
It Works!! 2019.03.19
Controller64_TX02
It Works 2018.12.19
At least, it's a go as far as transmitting
accumulated bits in controlByte AND
seeing it sorted on the receiver end
Controller64_TX
It Works 2018.12.17
it's transmitting "Accumulator"
≡≡ I think this needs to work w/ SoftwareSerial. ≡≡
For Y to transition between L and R,
it passes through deadband where it gets Zero'd.
For X to transition between U and D,
it passes through deadband where it gets Zero'd.
If the Esplora can be rocked fast enough where
the deadband isn't read, skipped, then that could result a problem.
I tried it out and didn't see a U with D or a L with an R.
This may be only a _remote_ possibility.
Accel_LEDs04 Tests Successfully (!!) with
O.C. Interface connected to C64. 2018.12.16
Next Step -- Bluetooth TX/RX
(O.C. Interface connected to a Pro-Mini on the
RX/C64 side)
Two sketches, one for the TX/Esplora and one
for the RX/ProMini:
TX - accelerometer survey into variable,
"controlByte", transmit it [Controller64_TX]
RX - receive the variable, disassemble it,
plug values into PORTB (??) [Controller64_RX
accumulaor --
x x x F L D R U
≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡
Accel_LEDs04
PORTB except Fire/PB
It Works! 2018.12.14
Accel_LEDs03
using port manipulation
left down is 8 PB4
right down is 16 PB2
nose up is 15 PB1
nose down is 14 PB3
fire is 7 PE6 <
PORTB --
x x x L D R U x
It Works! 2018.12.14 Y_AXIS is not PORTB'd
------------------------------
Accel_LEDs02b
------------------------------
Accel_LEDs02
"8" for initial accel_UP output to reed relay
output to reed relay coil via 10Ω
it works! 2018.12.12,
but I think I don't like the looks of the reed action
LED results look 'bouncy'
*/
#include <Esplora.h>
#include <SoftwareSerial.h>
SoftwareSerial bttx(3,11); // RX, TX
const byte Fout = 7;
byte fireSW;
byte controlByte = 0;
byte upisup;
void setup()
{
//Serial.begin(19200);
bttx.begin(9600); // initialize serial communications with your computer
pinMode(3,INPUT_PULLUP); // use shunt to SEL UP/DOWN action
}
void loop()
{
int xAxis = Esplora.readAccelerometer(X_AXIS); // read the X axis
int yAxis = Esplora.readAccelerometer(Y_AXIS); // read the Y axis
// ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡
if ((yAxis <= 90) && (yAxis >= -5)) // yAxis NEUTRAL 100, -20
{
// xxxFLDRU
controlByte &= B11111010;
}
upisup = digitalRead(3);
if (yAxis > 90)
{
// xxxFLDRU
if(upisup == HIGH)
{
controlByte |= B00000001;
}
else
{
controlByte |= B00000100;
}
}
if (yAxis < -5)
{
// xxxFLDRU
if (upisup == HIGH)
{
controlByte |= B00000100;
}
else
{
controlByte |= B00000001;
}
}
// ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡
if ((xAxis <= 45) && (xAxis >= -35)) // xAxis NEUTRAL 65, -55
{
// xxxFLDRU
controlByte &= B11110101; //
}
if (xAxis > 45) // Left is Down
{
// xxxFLDRU
controlByte |= B00001000;
}
if (xAxis < -35) // Right is Down
{
// xxxFLDRU
controlByte |= B00000010;
}
// ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡
fireSW = Esplora.readButton(SWITCH_RIGHT);
if (fireSW == LOW)
{
// xxxFLDRU
controlByte |= B00010000;
}
else
{
// xxxFLDRU
controlByte &= B11101111;
}
//Serial.println(controlByte);
bttx.write(controlByte);
delay(25); // not sure what value to use here
// if it's too fast then the receiver
// buffer may lag (overflow)
}
Controller64_RX02
for C64 Esplora-based BT project
/*
Controller64_RX02
Adding in: sort for all points "FLDRU"
≡ ≡ ≡ May switch to Teensy3.2 for its "no conflict" PORTD ≡ ≡ ≡
≡ ≡ ≡ digitalWriting FLDRU might result 'jitter' ≡ ≡ ≡
Controller64_RX
It Works! 2018.12.19
Receives controlByte from the Esplora
lights up "13" when the Esplora Fire/PB
is active.
*/
#include <SoftwareSerial.h>
SoftwareSerial bt(2,4); // RX, TX
byte controlByte; // xxxFLDRU
const byte Fpin = 5;
const byte Lpin = 6;
const byte Dpin = 7;
const byte Rpin = 8;
const byte Upin = 9;
// ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡ ≡
void setup()
{
//Serial.begin(19200);
bt.begin(9600);
pinMode(13,OUTPUT);
for (byte idx = 5; idx < 10; idx ++)
{
pinMode(idx, OUTPUT);
}
}
void loop()
{
if (bt.available() > 0)
{
controlByte = bt.read();
//Serial.println(controlByte,BIN);
// xxxFLDRU
if ((controlByte & B00010000) > 0) // look for Fire/pb
{
digitalWrite(5,HIGH);
}
else
{
digitalWrite(5,LOW);
}
// xxxFLDRU
if ((controlByte & B00001000) > 0) // look for Fire/pb
{
digitalWrite(6,HIGH);
}
else
{
digitalWrite(6,LOW);
}
// xxxFLDRU
if ((controlByte & B00000100) > 0) // look for Fire/pb
{
digitalWrite(7,HIGH);
}
else
{
digitalWrite(7,LOW);
}
// xxxFLDRU
if ((controlByte & B00000010) > 0) // look for Fire/pb
{
digitalWrite(8,HIGH);
}
else
{
digitalWrite(8,LOW);
}
// xxxFLDRU
if ((controlByte & B00000001) > 0) // look for Fire/pb
{
digitalWrite(9,HIGH);
}
else
{
digitalWrite(9,LOW);
}
}
}
pbmicros_varDuty_01c
NON-BLOCKING, NO delay()
variable duty, fixed frequency
// pbmicros_varDuty_01c
//
// same as pbmicros_varDuty_01b
// BUT uses Port Manipulation
instead of digitalWrite
// roundabout 1.84 kc
// no big improvement in jitter
// source seems to be consequence
of period (Off) termination ??
// pb clicks to one of 5 pulse widths
unsigned long markTime;
unsigned long elapsedTime;
unsigned long lockoutmark; //
pb-related
const unsigned long debounceTime =
300000; // debounceTime
const unsigned long pulseTime [] = {5,75,100,300,400};
// ON duration
const unsigned long period = 500;
// total time, ON & OFF
byte speedindex; //
blinkSpeed[speedindex]
boolean lockout; // if true then PB
is not checked
byte pbstate;
const byte pbpin = 2;
boolean ledstate;
const byte ledpin = 3;
boolean pulsing;
void setup ()
{
pinMode(pbpin,INPUT_PULLUP);
pinMode(ledpin,OUTPUT);
digitalWrite(ledpin,HIGH);
speedindex = 0;
lockout = false;
markTime = micros(); // get
start of period to time (Pulse/HIGH; what's left/LOW)
pulsing = true;
}
void loop ()
{
elapsedTime = micros(); //
grab the current "system time"
if (lockout == false) // ok
to read
{
pbstate =
digitalRead(pbpin);
if (pbstate ==
0) // pb made active
{
lockoutmark = micros(); // record micros when pb went LOW
speedindex++;
lockout =
true;
// new
pulse initiated
markTime =
micros();
//digitalWrite(ledpin,HIGH);
PORTD =
PORTD | B00001000;
pulsing =
true;
}
if (speedindex > 4)
{
speedindex
= 0;
}
}
elapsedTime = micros();
// grab the current "system time"
if ((lockout == true) &&
((elapsedTime - lockoutmark) >= debounceTime))
{
lockout = false; //
lockout done, threshold met
}
elapsedTime = micros();
// grab the current "system time"
// find end of Pulse time
if (((elapsedTime - markTime)
>= pulseTime[speedindex]) && (pulsing == true)) //
{
//digitalWrite(ledpin,LOW);
PORTD = PORTD |
B11110111;
markTime = micros();
elapsedTime =
micros(); // grab the current "system time"
pulsing = false;
}
// find end of cycle
if (((elapsedTime - markTime)
>= (period - pulseTime[speedindex])
&& (pulsing == false)))
{
//digitalWrite(ledpin,HIGH);
PORTD = PORTD |
B00001000;;
markTime =
micros();
elapsedTime =
micros(); // grab the current "system time"
pulsing = true;
}
}
pbmillisRoutines_01
NON-BLOCKING, NO delay()
blink patterns, 4 LEDs
/*
1 pushbutton and 4 LEDs
LED blink patterns selected with pushbutton actuation
*/
//
// pbmillisRoutines_01
//
// Working
// 2016.09.05
//
// pattern remains active if held down
//
unsigned long markTime;
unsigned long elapsedTime;
unsigned long lockoutmark; // pb-related
const unsigned long debounceTime = 500; // debounceTime
byte pinsArray [4] = {8,9,10,11};
const byte frame [] = {B00000011, B00001100,
B00000101, B00001010,
B00000110, B00001001,
B00000000, B11111111,
B00000001, B00000010, B00000100, B00001000,
B00000000, B00000001, B00000011, B00000111,
B00001111, B00001110, B00001100, B00001000};
const byte routinePlan [6][2] = {0,1, // first, last
2,3, // first, last
4,5, // first, last
6,7, // first, last
8,11, // first, last
12,19};
byte first;
byte last;
byte routineIndex = 0;
byte iteration = 0;
const unsigned long blinkSpeed = 500;
byte pbstate;
boolean lockout; // if true then PB doesn't get checked
boolean tripped; // pb hit, prep Update for new pointers etc.
const byte pbpin = 2;
byte index; // general application, utility
void setup ()
{
//Serial.begin(9600);
pinMode(pbpin,INPUT_PULLUP);
for(index=0; index<4; index ++)
{
pinMode(pinsArray[index],OUTPUT);
digitalWrite(pinsArray[index],LOW);
}
routineIndex = 0;
lockout = false;
markTime = millis();
tripped = true;
Update();
}
void loop ()
{
elapsedTime = millis();
if(lockout == false) // ok to read
{
pbstate = digitalRead(pbpin);
if (pbstate == 0) // pb made active
{
lockoutmark = millis(); // record millis when pb went LOW
routineIndex++;
lockout = true;
tripped = true;
if(routineIndex > 5) // rollover
{
routineIndex = 0;
}
}
}
if(tripped == true)
{
Update(); // brings a 'tripped' with it
}
elapsedTime = millis();
if ((lockout == true) && ((elapsedTime - lockoutmark) >= debounceTime))
{
lockout = false; // lockout done, threshold met
}
elapsedTime = millis();
if((elapsedTime - markTime) >= blinkSpeed) // determine whether Update() is due
{
markTime = millis(); // new mark
Update();
}
}
void Update ()
{
if(tripped == true) // if tripped == false then we got here because IT'S TIME
{
// new line, new frame
first = routinePlan[routineIndex][0];
last = routinePlan[routineIndex][1];
tripped = false;
iteration = 0;
}
if ((iteration + first) > last)
{
iteration = 0;
}
byte bitmask = 1;
for(byte progress = 0; progress < 4; progress++)
{
if((frame[iteration + first] & bitmask) == 0)
{
digitalWrite(pinsArray[progress],LOW);
}
else
{
digitalWrite(pinsArray[progress],HIGH);
}
bitmask = bitmask * 2;
}
iteration++;
elapsedTime = millis();
}
pbmillis3Speeds_01
NON-BLOCKING, NO delay()
/*
1 pushbutton, 1 LED
1 pushbutton switch affecting 1 LED's blink rate
*/
// pbmillis3Speeds_01
// pb/input is accurate
//
// works 2016.09.03
//
// if the pb is kept active then
// the speeds get cycled
//
//
unsigned long markTime;
unsigned long elapsedTime;
unsigned long lockoutmark; // pb-related
const unsigned long debounceTime = 250; // debounceTime
const unsigned long blinkSpeed [3] = {50,200,1000};
byte speedchoice; // blinkSpeed[speedchoice]
boolean lockout; // if true then PB is not checked
byte pbstate;
const byte pbpin = 2;
boolean ledstate;
const byte ledpin = 13;
void setup ()
{
pinMode(pbpin,INPUT_PULLUP);
pinMode(ledpin,OUTPUT);
digitalWrite(ledpin,LOW);
speedchoice = 0;
lockout = false;
markTime = millis();
}
void loop ()
{
elapsedTime = millis();
if(lockout == false) // ok to read
{
pbstate = digitalRead(pbpin);
if (pbstate == 0) // pb made active
{
lockoutmark = millis(); // record millis when pb went LOW
speedchoice++;
lockout = true;
}
if(speedchoice > 2)
{
speedchoice = 0;
}
elapsedTime = millis();
}
elapsedTime = millis();
if ((lockout == true) && ((elapsedTime - lockoutmark) >= debounceTime))
{
lockout = false; // lockout done, threshold met
}
elapsedTime = millis();
if((elapsedTime - markTime) >= blinkSpeed[speedchoice]) //
{
markTime = millis(); // new mark
ledstate = !ledstate;
if (ledstate == true)
{
digitalWrite(ledpin,HIGH);
}
else
{
digitalWrite(ledpin,LOW);
}
}
}
pb_timer_4pb_01
NON-BLOCKING, NO delay()
// pb_timer_4pb_01
//
// looks like it works 2017.07.02 20h42
/*
Four pushbuttons, each initiates its own countdown timer -- turning its LED on for 30 seconds.
Actuating a pushbutton during a timing cycle aborts that cycle.
All in 'non-blocking' code.
*/
unsigned long markTime1;
unsigned long markTime2;
unsigned long markTime3;
unsigned long markTime4;
unsigned long elapsedTime;
unsigned long lockoutmark; // pb-related
const unsigned long debounceTime = 400; // debounceTime
const byte T1 = 8;
const byte T2 = 9;
const byte T3 = 10;
const byte T4 = 11;
const unsigned long testTime = 30000; // 30 sec.
boolean lockout; // if true then PB doesn't get checked
boolean tripped; // pb hit, prep Update for new pointers etc.
const byte pb1pin = 2;
byte pb1state;
boolean engaged1;
const byte pb2pin = 3;
byte pb2state;
boolean engaged2;
const byte pb3pin = 4;
byte pb3state;
boolean engaged3;
const byte pb4pin = 5;
byte pb4state;
boolean engaged4;
// ------------------------------------
void setup ()
{
//Serial.begin(9600);
pinMode(pb1pin,INPUT_PULLUP);
pinMode(pb2pin,INPUT_PULLUP);
pinMode(pb3pin,INPUT_PULLUP);
pinMode(pb4pin,INPUT_PULLUP);
pinMode(T1, OUTPUT);
pinMode(T2, OUTPUT);
pinMode(T3, OUTPUT);
pinMode(T4, OUTPUT);
lockout = false;
tripped = true;
engaged1 = false;
engaged2 = false;
engaged3 = false;
engaged4 = false;
markTime1 = millis();
markTime2 = millis();
markTime3 = millis();
markTime4 = millis();
}
void loop ()
{
elapsedTime = millis();
if(lockout == false) // ok to read
{
pb1state = digitalRead(pb1pin);
pb2state = digitalRead(pb2pin);
pb3state = digitalRead(pb3pin);
pb4state = digitalRead(pb4pin);
if ((pb1state == 0) || (pb2state == 0) || (pb3state == 0) || (pb4state == 0)) // a pb was activated
{
lockoutmark = millis(); // record millis when a PB went LOW
lockout = true;
tripped = true;
if (pb1state == 0)
{
if (engaged1 == true)
{
digitalWrite(T1, LOW);
engaged1 = false;
}
else
{
digitalWrite(T1, HIGH);
markTime1 = millis();
engaged1 = true;
}
}
if (pb2state == 0)
{
if (engaged2 == true)
{
digitalWrite(T2, LOW);
engaged2 = false;
}
else
{
digitalWrite(T2, HIGH);
markTime2 = millis();
engaged2 = true;
}
}
if (pb3state == 0)
{
if (engaged3 == true)
{
digitalWrite(T3, LOW);
engaged3 = false;
}
else
{
digitalWrite(T3, HIGH);
markTime3 = millis();
engaged3 = true;
}
}
if (pb4state == 0)
{
if (engaged4 == true)
{
digitalWrite(T4, LOW);
engaged4 = false;
}
else
{
digitalWrite(T4, HIGH);
markTime4 = millis();
engaged4 = true;
}
}
}
}
// -------------------------------------------------
elapsedTime = millis();
if ((lockout == true) && ((elapsedTime - lockoutmark) >= debounceTime))
{
lockout = false; // lockout done, threshold met
tripped = false;
}
// ----------------------------------------------------
if (engaged1 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime1) >= testTime) // is it soup yet?
{
digitalWrite(T1,LOW);
engaged1 = false;
}
}
if (engaged2 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime2) >= testTime) // is it soup yet?
{
digitalWrite(T2,LOW);
engaged2 = false;
}
}
if (engaged3 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime3) >= testTime) // is it soup yet?
{
digitalWrite(T3,LOW);
engaged3 = false;
}
}
if (engaged4 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime4) >= testTime) // is it soup yet?
{
digitalWrite(T4,LOW);
engaged4 = false;
}
}
}
lightstring03
// lightstring03
// for LED christmas light strings and so on
// needs work, but it works
// '03: renamed gradualfadefast to fadeslow
// adding fadefast
// adding fastblinker
// OK 20DEC2014
byte MOC_logic = 3; // alias output
int Intensity; // conduction angle
int startPosition; // delay time till start
int index = 0;
volatile boolean zeroCrossed = false; // Flag
byte scenario = 0; // which pattern
byte iteration = 0; // iterations
void setup()
{
pinMode(MOC_logic, OUTPUT);
attachInterrupt(0,cueStart,RISING); // Ext_Int on D2
}
// ***** ***** ***** ***** //
void loop ()
{
if (zeroCrossed == true)
{
enableOutput();
}
}
// ***** ***** ***** ***** //
// ----- The Interrupt -----
void cueStart ()
{
zeroCrossed = true; // !!!
}
// ---- ---- ---- ---- -----
// ---- ---- ---- ---- -----
void enableOutput ()
{
// scenario 0 fadeslow
// scenario 1 blinks
// scenario 2 solid on
if (scenario == 0) // fadeslow
{
fadeslow();
optohandler();
index++;
if (index > 367)
{
iteration ++;
index = 0;
}
if (iteration == 5)
{
scenario = 1; // the next scenario #
iteration = 0;
}
}
else if (scenario == 1) // blinks
{
blinker();
optohandler();
index++;
if (index > 60)
{
iteration ++;
index = 0;
}
if (iteration == 10)
{
scenario = 2; // the next scenario #
iteration = 0; // reset
}
}
else if (scenario == 2) // fadefast
{
fadefast();
optohandler();
index++;
if (index > 186)
{
iteration ++;
index = 0;
}
if (iteration == 9)
{
scenario = 3; // the next scenario #
iteration = 0;
}
}
else if (scenario == 3) // fastblinks
{
fastblinker();
optohandler();
index++;
if (index > 30)
{
iteration ++;
index = 0;
}
if (iteration == 10)
{
scenario = 0; // the next scenario #
iteration = 0; // reset
}
}
}
// ----------------------------
void blinker ()
{
if (index < 30) // dot
{Intensity = 7000;}
else if ((index >= 30) && (index < 60)) //
{Intensity = 0;}
}
// ----------------------------
void fadeslow () // gradual fast ramp
{
if (index < 6)
{Intensity = 6000;}
else if ((index >= 6) && (index <= 11))
{Intensity = 5850;}
else if ((index >= 12) && (index <= 17))
{Intensity = 5700;}
else if ((index >= 18) && (index <= 23))
{Intensity = 5550;}
else if ((index >= 24) && (index <= 29))
{Intensity = 5400;}
else if ((index >= 30) && (index <= 35))
{Intensity = 5250;}
else if ((index >= 36) && (index <= 41))
{Intensity = 5100;}
else if ((index >= 42) && (index <= 47))
{Intensity = 4950;}
else if ((index >= 48) && (index <= 53))
{Intensity = 4800;}
else if ((index >= 54) && (index <= 59))
{Intensity = 4650;}
else if ((index >= 60) && (index <= 65))
{Intensity = 4500;}
else if ((index >= 66) && (index <= 71))
{Intensity = 4350;}
else if ((index >= 72) && (index <= 77))
{Intensity = 4200;}
else if ((index >= 78) && (index <= 83))
{Intensity = 4050;}
else if ((index >= 84) && (index <= 89))
{Intensity = 3900;}
else if ((index >= 90) && (index <= 95))
{Intensity = 3750;}
else if ((index >= 96) && (index <= 101))
{Intensity = 3500;}
else if ((index >= 102) && (index <= 107))
{Intensity = 3350;}
else if ((index >= 108) && (index <= 113))
{Intensity = 3200;}
else if ((index >= 114) && (index <= 119))
{Intensity = 3050;}
else if ((index >= 120) && (index <= 125)) //
{Intensity = 2900;}
else if ((index >= 126) && (index <= 131))
{Intensity = 2750;}
else if ((index >= 132) && (index <= 137))
{Intensity = 2600;}
else if ((index >= 138) && (index <= 143))
{Intensity = 2450;}
else if ((index >= 144) && (index <= 149))
{Intensity = 2300;}
else if ((index >= 150) && (index <= 155))
{Intensity = 2150;}
else if ((index >= 156) && (index <= 161))
{Intensity = 2000;}
else if ((index >= 162) && (index <= 167))
{Intensity = 1850;}
else if ((index >= 168) && (index <= 173))
{Intensity = 1700;}
else if ((index >= 174) && (index <= 179))
{Intensity = 1550;}
else if ((index >= 176) && (index <= 181))
{Intensity = 1400;}
else if ((index >= 182) && (index <= 187))
{Intensity = 1250;} // ** midpt **
// ramp back down
else if ((index >= 188) && (index <= 193))
{Intensity = 1400;}
else if ((index >= 194) && (index <= 199))
{Intensity = 1550;}
else if ((index >= 200) && (index <= 205))
{Intensity = 1700;}
else if ((index >= 206) && (index <= 211))
{Intensity = 1850;}
else if ((index >= 212) && (index <= 217))
{Intensity = 2000;}
else if ((index >= 218) && (index <= 223))
{Intensity = 2150;}
else if ((index >= 224) && (index <= 229))
{Intensity = 2300;}
else if ((index >= 230) && (index <= 235))
{Intensity = 2450;}
else if ((index >= 236) && (index <= 241))
{Intensity = 2600;}
else if ((index >= 242) && (index <= 247))
{Intensity = 2750;}
else if ((index >= 248) && (index <= 253))
{Intensity = 2900;}
else if ((index >= 254) && (index <= 259))
{Intensity = 3050;}
else if ((index >= 260) && (index <= 265))
{Intensity = 3200;}
else if ((index >= 266) && (index <= 271))
{Intensity = 3350;}
else if ((index >= 272) && (index <= 277))
{Intensity = 3500;}
else if ((index >= 278) && (index <= 283))
{Intensity = 3750;}
else if ((index >= 284) && (index <= 289))
{Intensity = 3900;}
else if ((index >= 290) && (index <= 295))
{Intensity = 4050;}
else if ((index >= 296) && (index <= 301))
{Intensity = 4200;}
else if ((index >= 302) && (index <= 307))
{Intensity = 4350;}
else if ((index >= 308) && (index <= 313))
{Intensity = 4500;}
else if ((index >= 314) && (index <= 319))
{Intensity = 4650;}
else if ((index >= 320) && (index <= 325))
{Intensity = 4800;}
else if ((index >= 326) && (index <= 331))
{Intensity = 4950;}
else if ((index >= 332) && (index <= 337))
{Intensity = 5100;}
else if ((index >= 338) && (index <= 343))
{Intensity = 5250;}
else if ((index >= 344) && (index <= 349))
{Intensity = 5400;}
else if ((index >= 350) && (index <= 355))
{Intensity = 5550;}
else if ((index >= 356) && (index <= 361))
{Intensity = 5700;}
else
{Intensity = 5850;} // index 362-367
}
// ----------------------------
void optohandler ()
{
if (Intensity == 0) // OFF = (Intensity = 0)
{
delay (1); // so same rise & dbl trig
}
else
{
startPosition = (8000 - Intensity); // "delay angle"
delayMicroseconds (startPosition);
digitalWrite(MOC_logic, HIGH);
delayMicroseconds (Intensity); // "conduction angle"
digitalWrite(MOC_logic, LOW);
}
zeroCrossed = false; // Reset
}
//-------------------------------
void fadefast () // gradual fast ramp
{
if (index < 3)
{Intensity = 6000;}
else if ((index >= 4) && (index <= 6))
{Intensity = 5850;}
else if ((index >= 7) && (index <= 9))
{Intensity = 5700;}
else if ((index >= 10) && (index <= 12))
{Intensity = 5550;}
else if ((index >= 13) && (index <= 15))
{Intensity = 5400;}
else if ((index >= 16) && (index <= 18))
{Intensity = 5250;}
else if ((index >= 19) && (index <= 21))
{Intensity = 5100;}
else if ((index >= 22) && (index <= 24))
{Intensity = 4950;}
else if ((index >= 25) && (index <= 27))
{Intensity = 4800;}
else if ((index >= 28) && (index <= 30))
{Intensity = 4650;}
else if ((index >= 31) && (index <= 33))
{Intensity = 4500;}
else if ((index >= 34) && (index <= 36))
{Intensity = 4350;}
else if ((index >= 37) && (index <= 39))
{Intensity = 4200;}
else if ((index >= 40) && (index <= 42))
{Intensity = 4050;}
else if ((index >= 43) && (index <= 45))
{Intensity = 3900;}
else if ((index >= 46) && (index <= 48))
{Intensity = 3750;}
else if ((index >= 49) && (index <= 51))
{Intensity = 3500;}
else if ((index >= 52) && (index <= 54))
{Intensity = 3350;}
else if ((index >= 55) && (index <= 57))
{Intensity = 3200;}
else if ((index >= 58) && (index <= 60))
{Intensity = 3050;}
else if ((index >= 61) && (index <= 63)) //
{Intensity = 2900;}
else if ((index >= 64) && (index <= 66))
{Intensity = 2750;}
else if ((index >= 67) && (index <= 69))
{Intensity = 2600;}
else if ((index >= 70) && (index <= 72))
{Intensity = 2450;}
else if ((index >= 73) && (index <= 75))
{Intensity = 2300;}
else if ((index >= 76) && (index <= 78))
{Intensity = 2150;}
else if ((index >= 79) && (index <= 81))
{Intensity = 2000;}
else if ((index >= 82) && (index <= 84))
{Intensity = 1850;}
else if ((index >= 85) && (index <= 87))
{Intensity = 1700;}
else if ((index >= 88) && (index <= 90))
{Intensity = 1550;}
else if ((index >= 91) && (index <= 93))
{Intensity = 1400;}
else if ((index >= 94) && (index <= 96))
{Intensity = 1250;} // ** midpt **
// ramp back down
else if ((index >= 97) && (index <= 99))
{Intensity = 1400;}
else if ((index >= 100) && (index <= 102))
{Intensity = 1550;}
else if ((index >= 103) && (index <= 105))
{Intensity = 1700;}
else if ((index >= 106) && (index <= 108))
{Intensity = 1850;}
else if ((index >= 109) && (index <= 111))
{Intensity = 2000;}
else if ((index >= 112) && (index <= 114))
{Intensity = 2150;}
else if ((index >= 115) && (index <= 117))
{Intensity = 2300;}
else if ((index >= 118) && (index <= 120))
{Intensity = 2450;}
else if ((index >= 121) && (index <= 123))
{Intensity = 2600;}
else if ((index >= 124) && (index <= 126))
{Intensity = 2750;}
else if ((index >= 127) && (index <= 129))
{Intensity = 2900;}
else if ((index >= 130) && (index <= 132))
{Intensity = 3050;}
else if ((index >= 133) && (index <= 135))
{Intensity = 3200;}
else if ((index >= 136) && (index <= 138))
{Intensity = 3350;}
else if ((index >= 139) && (index <= 141))
{Intensity = 3500;}
else if ((index >= 142) && (index <= 144))
{Intensity = 3750;}
else if ((index >= 145) && (index <= 147))
{Intensity = 3900;}
else if ((index >= 148) && (index <= 150))
{Intensity = 4050;}
else if ((index >= 151) && (index <= 153))
{Intensity = 4200;}
else if ((index >= 154) && (index <= 156))
{Intensity = 4350;}
else if ((index >= 157) && (index <= 159))
{Intensity = 4500;}
else if ((index >= 160) && (index <= 162))
{Intensity = 4650;}
else if ((index >= 163) && (index <= 165))
{Intensity = 4800;}
else if ((index >= 166) && (index <= 168))
{Intensity = 4950;}
else if ((index >= 169) && (index <= 171))
{Intensity = 5100;}
else if ((index >= 172) && (index <= 174))
{Intensity = 5250;}
else if ((index >= 175) && (index <= 177))
{Intensity = 5400;}
else if ((index >= 178) && (index <= 180))
{Intensity = 5550;}
else if ((index >= 181) && (index <= 183))
{Intensity = 5700;}
else
{Intensity = 5850;} // index 184-186
}
void fastblinker ()
{
if (index < 15) // dot
{Intensity = 7000;}
else if ((index >= 15) && (index < 30)) //
{Intensity = 0;}
}
echopper_PBs_04
// echopper_PBs_04
//
// External Interrupt on D2 !!
//
// Commented out Display_It and its calls 062412
// Levels = 7 ? ? ?
byte speed_idx = 0; //
byte currentLevel = 0; // comparison
byte newLevel = 0; // comparison
byte Accel_Btn = 4; // alias - Accelerate btn
byte Decel_Btn = 5; // alias - Decelerate btn
byte Zeropwr = 6; // alias - "kill" button
byte motorpin = 11; // pin alias, PWM to gate/MOT
byte Level [6] = {0,20,40,100,175,250};
// Consider incl a Level between 40 and 100, which is a jump.
// byte Level [7] = {0,25,50,75,100,150,250}; ? ? ?
volatile boolean Detect = false; // Interrupt Note
void setup()
{
pinMode(motorpin, OUTPUT);
pinMode(Zeropwr, INPUT);
pinMode(Accel_Btn, INPUT);
pinMode(Decel_Btn, INPUT);
//Serial.begin(9600);
attachInterrupt(0,Activity,RISING); // Ext_Int on D2
}
void loop()
{
if (Detect == true)
{
Decode();
}
if (currentLevel != newLevel)
{
analogWrite(motorpin,Level[speed_idx]);
currentLevel = newLevel;
}
}
void Activity() // this is the Interrupt !
{
Detect = true;
}
void Decode()
{
Detect = false; // clear out "Detect"
if (digitalRead(Zeropwr) == HIGH)
{
speed_idx = 0;
newLevel = 0;
//Display_it();
}
else if (digitalRead(Accel_Btn) == HIGH)
{
Accelerate();
}
else if (digitalRead(Decel_Btn) == HIGH) // Activity detected wasn't Zeropwr or Accel_Btn
{
Decelerate(); // default = (A' & Z')
}
}
void Accelerate()
{
if (speed_idx < 5)
{
speed_idx ++;
}
newLevel = Level[speed_idx];
//Display_it();
}
void Decelerate()
{
if (speed_idx >= 1)
{
speed_idx --;
}
newLevel = Level[speed_idx];
//Display_it();
}
time two events
/*
two PB switches, two LEDs
push a button and its associated LED lights for 30 seconds
pushing the button during the timing sequence cancels the operation
(only for the one, not the other)
pushing either PB lockouts out both for the debounce time (400msec)
possibly dial back on that for more responsivity
*/
// pb_timer_2pb_01
//
// 2 buttons with cancel option
//
// looks like it works 2017.07.02
//
unsigned long markTime1;
unsigned long markTime2;
unsigned long elapsedTime;
unsigned long lockoutmark; // pb-related
const unsigned long debounceTime = 400; // debounceTime
const byte T1 = 8;
const byte T2 = 11;
//const byte T3 = 10;
//const byte T4 = 11;
const unsigned long testTime = 30000; // 30 sec.
boolean lockout; // if true then PB doesn't get checked
boolean tripped; // pb hit, prep Update for new pointers etc.
const byte pb1pin = 2;
byte pb1state;
boolean engaged1;
const byte pb2pin = 3;
byte pb2state;
boolean engaged2;
void setup ()
{
//Serial.begin(9600);
pinMode(pb1pin,INPUT_PULLUP);
pinMode(pb2pin,INPUT_PULLUP);
pinMode(T1, OUTPUT);
pinMode(T2, OUTPUT);
//pinMode(T3, OUTPUT);
//pinMode(T4, OUTPUT);
lockout = false;
tripped = true;
engaged1 = false;
engaged2 = false;
markTime1 = millis();
markTime2 = millis();
}
void loop ()
{
elapsedTime = millis();
if(lockout == false) // ok to read
{
pb1state = digitalRead(pb1pin);
pb2state = digitalRead(pb2pin);
if (pb1state == 0) // pb made active
{
lockoutmark = millis(); // record millis when pb went LOW
lockout = true;
tripped = true;
if (engaged1 == true)
{
digitalWrite(T1, LOW);
engaged1 = false;
}
else
{
digitalWrite(T1, HIGH);
markTime1 = millis();
engaged1 = true;
}
}
if (pb2state == 0) // pb made active
{
lockoutmark = millis(); // record millis when pb went LOW
lockout = true;
tripped = true;
if (engaged2 == true)
{
digitalWrite(T2, LOW);
engaged2 = false;
}
else
{
digitalWrite(T2, HIGH);
markTime2 = millis();
engaged2 = true;
}
}
}
// -------------------------------------------------
elapsedTime = millis();
if ((lockout == true) && ((elapsedTime - lockoutmark) >= debounceTime))
{
lockout = false; // lockout done, threshold met
tripped = false;
}
// ----------------------------------------------------
if (engaged1 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime1) >= testTime) // determine whether an Update() is due
{
digitalWrite(T1,LOW);
engaged1 = false;
}
}
if (engaged2 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime2) >= testTime) // determine whether an Update() is due
{
digitalWrite(T2,LOW);
engaged2 = false;
}
}
}
time four events
(as above, expanded to 4 stations
// pb_timer_4pb_01
//
// GO FOR 4 !!
// looks like it works 2017.07.02 20h42
//
unsigned long markTime1;
unsigned long markTime2;
unsigned long markTime3;
unsigned long markTime4;
unsigned long elapsedTime;
unsigned long lockoutmark; // pb-related
const unsigned long debounceTime = 400; // debounceTime
const byte T1 = 8;
const byte T2 = 9;
const byte T3 = 10;
const byte T4 = 11;
const unsigned long testTime = 30000; // 30 sec.
boolean lockout; // if true then PB doesn't get checked
boolean tripped; // pb hit, prep Update for new pointers etc.
const byte pb1pin = 2;
byte pb1state;
boolean engaged1;
const byte pb2pin = 3;
byte pb2state;
boolean engaged2;
const byte pb3pin = 4;
byte pb3state;
boolean engaged3;
const byte pb4pin = 5;
byte pb4state;
boolean engaged4;
// ------------------------------------
void setup ()
{
//Serial.begin(9600);
pinMode(pb1pin,INPUT_PULLUP);
pinMode(pb2pin,INPUT_PULLUP);
pinMode(pb3pin,INPUT_PULLUP);
pinMode(pb4pin,INPUT_PULLUP);
pinMode(T1, OUTPUT);
pinMode(T2, OUTPUT);
pinMode(T3, OUTPUT);
pinMode(T4, OUTPUT);
lockout = false;
tripped = true;
engaged1 = false;
engaged2 = false;
engaged3 = false;
engaged4 = false;
markTime1 = millis();
markTime2 = millis();
markTime3 = millis();
markTime4 = millis();
}
void loop ()
{
elapsedTime = millis();
if(lockout == false) // ok to read
{
pb1state = digitalRead(pb1pin);
pb2state = digitalRead(pb2pin);
pb3state = digitalRead(pb3pin);
pb4state = digitalRead(pb4pin);
if ((pb1state == 0) || (pb2state == 0) || (pb3state == 0) || (pb4state == 0)) // a pb was activated
{
lockoutmark = millis(); // record millis when a PB went LOW
lockout = true;
tripped = true;
if (pb1state == 0)
{
if (engaged1 == true)
{
digitalWrite(T1, LOW);
engaged1 = false;
}
else
{
digitalWrite(T1, HIGH);
markTime1 = millis();
engaged1 = true;
}
}
if (pb2state == 0)
{
if (engaged2 == true)
{
digitalWrite(T2, LOW);
engaged2 = false;
}
else
{
digitalWrite(T2, HIGH);
markTime2 = millis();
engaged2 = true;
}
}
if (pb3state == 0)
{
if (engaged3 == true)
{
digitalWrite(T3, LOW);
engaged3 = false;
}
else
{
digitalWrite(T3, HIGH);
markTime3 = millis();
engaged3 = true;
}
}
if (pb4state == 0)
{
if (engaged4 == true)
{
digitalWrite(T4, LOW);
engaged4 = false;
}
else
{
digitalWrite(T4, HIGH);
markTime4 = millis();
engaged4 = true;
}
}
}
}
// -------------------------------------------------
elapsedTime = millis();
if ((lockout == true) && ((elapsedTime - lockoutmark) >= debounceTime))
{
lockout = false; // lockout done, threshold met
tripped = false;
}
// ----------------------------------------------------
if (engaged1 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime1) >= testTime) // is it soup yet?
{
digitalWrite(T1,LOW);
engaged1 = false;
}
}
if (engaged2 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime2) >= testTime) // is it soup yet?
{
digitalWrite(T2,LOW);
engaged2 = false;
}
}
if (engaged3 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime3) >= testTime) // is it soup yet?
{
digitalWrite(T3,LOW);
engaged3 = false;
}
}
if (engaged4 == true)
{
elapsedTime = millis();
if((elapsedTime - markTime4) >= testTime) // is it soup yet?
{
digitalWrite(T4,LOW);
engaged4 = false;
}
}
}
No comments:
Post a Comment