View difference between Paste ID: 3Vyc9Htb and ZWgLJyKb
SHOW: | | - or go back to the newest paste.
1
//
2-
// Teeces V3 Sketch for Arduino Pro Mini with 2 chains
2+
// Teeces V3.1 Sketch for Arduino Pro Micro with 2 chains
3
// with John V's PSI slide method (using the standard PSI LED pattern)
4
// Boards should be hooked up like this...
5
// RLD OUT1 -> Rear PSI
6
// RLD OUT2 -> FLD -> FLD -> Front PSI
7
// Note: RLD OUT2 is only on the newer v3.1 boards. If you have an earlier v3.0 board
8
// you can use Arduino pins 9, 8 and 7 and +5 and GND for the front chain.
9-
// If you're using an Arduino Pro Micro instead of a Pro Mini, you'll need to
9+
// If you're using an Arduino Pro Mini instead of a Pro Micro, you'll need to
10
// adjust the LedControl lines.
11
//
12
13
#include <LedControl.h>
14
#undef round 
15
16
class PSI
17
{
18
  int stage; //0 thru 4
19
  int inc;
20
  int stageDelay[5];
21
  int cols[5];
22
23
  unsigned long timeLast;
24
  int device;
25
26
  public:
27
  
28
  PSI(int _delay1, int _delay2, int _device)
29
  {
30
    device=_device;
31
    
32
    stage=0;
33
    timeLast=0;
34
    inc=1;
35
    
36
    cols[0] = B11000000;
37
    cols[1] = B11100000;
38
    cols[2] = B01100000;
39
    cols[3] = B01110000;
40
    cols[4] = B00110000;
41
    
42
    stageDelay[0] = _delay1 - 300;
43
    stageDelay[1] = 100;
44
    stageDelay[2] = 100;
45
    stageDelay[3] = 100;
46
    stageDelay[4] = _delay2 - 300;
47
  }
48
  
49
  void Animate(unsigned long elapsed, LedControl control)
50
  {
51
    if ((elapsed - timeLast) < stageDelay[stage]) return;
52
    
53
    timeLast = elapsed;
54
    stage+=inc;
55
56
    if (stage>4 || stage<0 )
57
    {
58
      inc *= -1;
59
      stage+=inc*2;
60
    }
61
    
62
    for (int row=0; row<4; row++)
63
      control.setRow(device,row,cols[stage]);
64
  }
65
};
66
67
PSI psiFront=PSI(2500, 1700, 2); //2000 ms on red, 1000 ms on blue.  device is 2
68
PSI psiRear =PSI(1700, 2500, 3); //1000 ms on yellow, 2000 ms on green.  device is 3
69-
LedControl lc=LedControl(12,11,10,4); //rear chain when using Arduino Pro Mini
69+
LedControl lc=LedControl(14,16,10,4); //rear chain
70-
//LedControl lc=LedControl(14,16,10,4); //rear chain when using Arduino Pro Micro
70+
71
72
void setup()
73
{
74
  for(int dev=0;dev<lc.getDeviceCount();dev++)
75
  {
76
    lc.shutdown(dev, false); //take the device out of shutdown (power save) mode
77
    lc.clearDisplay(dev);
78
  }
79
  for(int dev=0;dev<lc2.getDeviceCount();dev++)
80
  {
81
    lc2.shutdown(dev, false); //take the device out of shutdown (power save) mode
82
    lc2.clearDisplay(dev);
83
  }
84
85
  lc.setIntensity(0, 7); //RLD (RLD brightness is 7 by default. change to 15 for blinding bright)
86-
  lc.setIntensity(0, 7); //RLD
86+
87
  lc.setIntensity(2, 7); //RLD
88
  lc.setIntensity(3, 15); //Rear PSI
89
  
90
  lc2.setIntensity(0, 5);  //FLD (FLD brightness is 5 by default. change to 15 for blinding bright)
91-
  lc2.setIntensity(0, 5);  //FLD
91+
92
  lc2.setIntensity(2, 15); //Front PSI
93
  
94
//  pinMode(13, OUTPUT);
95
//  digitalWrite(13, HIGH);
96
97
  //HP lights on constant
98
  lc.setRow(3,4,255); //rear psi
99
  lc2.setRow(2,4,255); //front psi
100
  
101
  pinMode(17, OUTPUT);  // Set RX LED as an output
102
  
103
}
104
105
void loop()
106
{
107
  unsigned long timeNew= millis();
108
  psiFront.Animate(timeNew, lc2);
109
  psiRear.Animate(timeNew, lc);
110
  animateLogic(timeNew);
111
  microPSI(timeNew);
112-
  //microPSI(timeNew);
112+
113
114
void animateLogic(unsigned long elapsed)
115
{
116
  static unsigned long timeLast=0;
117
  if ((elapsed - timeLast) < 200) return;
118
  timeLast = elapsed; 
119
120
  for (int dev=0; dev<3; dev++)
121
    for (int row=0; row<6; row++)
122
      lc.setRow(dev,row,random(0,256));
123
  for (int dev=0; dev<2; dev++)
124
    for (int row=0; row<6; row++)
125
      lc2.setRow(dev,row,random(0,256));      
126
}
127
128
int RXLED = 17; 
129
int ledState = LOW;
130
131
void microPSI(unsigned long elapsed)
132-
/*void microPSI(unsigned long elapsed)
132+
133
  //blink the ProMicro's TX and RX LEDs back and forth
134
  static unsigned long timeLast=0;
135
  if ((elapsed - timeLast) < 2000) return;
136
    timeLast = elapsed; 
137
    // if the LED is off turn it on and vice-versa:
138
    if (ledState == LOW) {
139
      ledState = HIGH;
140
      digitalWrite(17, HIGH);   // set the LED on
141
      TXLED1; //TX LED is not tied to a normally controlled pin
142
    }
143
    else {
144
      ledState = LOW;
145
      digitalWrite(17, LOW);    // set the LED off
146
      TXLED0;
147
    }
148
  //}
149
}