A simple program to cycle a chain of shiftbrites through RGB,MCY,W using mbed.

Dependencies:   mbed

Committer:
bh27
Date:
Mon Mar 21 23:03:28 2011 +0000
Revision:
2:62be298c6ab8
Parent:
1:8e28c267ff1a
1.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bh27 2:62be298c6ab8 1 // Brent Hearn
bh27 2:62be298c6ab8 2 // 03/2011
bh27 2:62be298c6ab8 3
bh27 1:8e28c267ff1a 4 // A simple program to cycle a chain of shiftbrites through RGB,MCY,W using mbed.
bh27 1:8e28c267ff1a 5
bh27 1:8e28c267ff1a 6 // Shift register code from: http://mbed.org/users/ChriX/notebook/shift-register-function/
bh27 1:8e28c267ff1a 7 // Shiftbrite Arduino code from: http://macetech.com/blog/node/54
bh27 1:8e28c267ff1a 8
bh27 1:8e28c267ff1a 9 // Revision:
bh27 1:8e28c267ff1a 10 // v1.0 - 17/03/2011:
bh27 1:8e28c267ff1a 11 // v1.1 - 20/03/2011: Separated Current Control from Color Data.
bh27 1:8e28c267ff1a 12 // Current_Control() is now a function on it's own which can be put after each color change.
bh27 1:8e28c267ff1a 13 // Added Global variable Cur which sets the current control register without having to hunt through the program.
bh27 1:8e28c267ff1a 14
bh27 1:8e28c267ff1a 15 #include "mbed.h"
bh27 1:8e28c267ff1a 16
bh27 1:8e28c267ff1a 17 DigitalOut datapin(p30);
bh27 1:8e28c267ff1a 18 DigitalOut latchpin(p29);
bh27 1:8e28c267ff1a 19 DigitalOut enablepin(p28);
bh27 1:8e28c267ff1a 20 DigitalOut clockpin(p27);
bh27 1:8e28c267ff1a 21
bh27 1:8e28c267ff1a 22 unsigned long SB_CommandPacket;
bh27 1:8e28c267ff1a 23 int SB_CommandMode;
bh27 1:8e28c267ff1a 24 int SB_BlueCommand;
bh27 1:8e28c267ff1a 25 int SB_RedCommand;
bh27 1:8e28c267ff1a 26 int SB_GreenCommand;
bh27 1:8e28c267ff1a 27 int No_of_shiftbrites = 4;
bh27 1:8e28c267ff1a 28
bh27 1:8e28c267ff1a 29 // Set between 0 and 127
bh27 1:8e28c267ff1a 30 int Cur = 31;
bh27 1:8e28c267ff1a 31
bh27 1:8e28c267ff1a 32 void shiftOut(DigitalOut data, DigitalOut clk, int sodata) {
bh27 1:8e28c267ff1a 33
bh27 1:8e28c267ff1a 34 int i;
bh27 1:8e28c267ff1a 35
bh27 1:8e28c267ff1a 36 for (i = 7; i >= 0; i--) {
bh27 1:8e28c267ff1a 37
bh27 1:8e28c267ff1a 38 clk = 0;
bh27 1:8e28c267ff1a 39
bh27 1:8e28c267ff1a 40 if(sodata & (1 << i)){
bh27 1:8e28c267ff1a 41 data = 1;
bh27 1:8e28c267ff1a 42 } else {
bh27 1:8e28c267ff1a 43 data = 0;
bh27 1:8e28c267ff1a 44 }
bh27 1:8e28c267ff1a 45
bh27 1:8e28c267ff1a 46 clk = 1;
bh27 1:8e28c267ff1a 47 data = 0;
bh27 1:8e28c267ff1a 48 }
bh27 1:8e28c267ff1a 49
bh27 1:8e28c267ff1a 50 return;
bh27 1:8e28c267ff1a 51
bh27 1:8e28c267ff1a 52 }
bh27 1:8e28c267ff1a 53
bh27 1:8e28c267ff1a 54
bh27 1:8e28c267ff1a 55 void SB_SendPacket() {
bh27 1:8e28c267ff1a 56
bh27 1:8e28c267ff1a 57 for (int y = No_of_shiftbrites-1; y >= 0; y--) {
bh27 1:8e28c267ff1a 58 SB_CommandPacket = SB_CommandMode & 0xB11;
bh27 1:8e28c267ff1a 59 SB_CommandPacket = (SB_CommandPacket << 10) | (SB_BlueCommand & 1023);
bh27 1:8e28c267ff1a 60 SB_CommandPacket = (SB_CommandPacket << 10) | (SB_RedCommand & 1023);
bh27 1:8e28c267ff1a 61 SB_CommandPacket = (SB_CommandPacket << 10) | (SB_GreenCommand & 1023);
bh27 1:8e28c267ff1a 62
bh27 1:8e28c267ff1a 63 shiftOut(datapin, clockpin, SB_CommandPacket >> 24);
bh27 1:8e28c267ff1a 64 shiftOut(datapin, clockpin, SB_CommandPacket >> 16);
bh27 1:8e28c267ff1a 65 shiftOut(datapin, clockpin, SB_CommandPacket >> 8);
bh27 1:8e28c267ff1a 66 shiftOut(datapin, clockpin, SB_CommandPacket);
bh27 1:8e28c267ff1a 67
bh27 1:8e28c267ff1a 68
bh27 1:8e28c267ff1a 69 wait_ms(1);
bh27 1:8e28c267ff1a 70 latchpin = 1;
bh27 1:8e28c267ff1a 71 wait_ms(1);
bh27 1:8e28c267ff1a 72 latchpin = 0;
bh27 1:8e28c267ff1a 73 }
bh27 1:8e28c267ff1a 74
bh27 1:8e28c267ff1a 75 return;
bh27 1:8e28c267ff1a 76
bh27 1:8e28c267ff1a 77 }
bh27 1:8e28c267ff1a 78
bh27 1:8e28c267ff1a 79 void Current_Control() {
bh27 1:8e28c267ff1a 80
bh27 1:8e28c267ff1a 81 int Comm = 0xB01;
bh27 1:8e28c267ff1a 82 int Cont1 = Cur;
bh27 1:8e28c267ff1a 83 int Cont2 = Cur;
bh27 1:8e28c267ff1a 84 int Cont3 = Cur;
bh27 1:8e28c267ff1a 85 unsigned long CommandPacket;
bh27 1:8e28c267ff1a 86
bh27 1:8e28c267ff1a 87 for (int y = No_of_shiftbrites-1; y >= 0; y--) {
bh27 1:8e28c267ff1a 88 CommandPacket = Comm & 0xB11;
bh27 1:8e28c267ff1a 89 CommandPacket = (CommandPacket << 10) | (Cont1 & 1023);
bh27 1:8e28c267ff1a 90 CommandPacket = (CommandPacket << 10) | (Cont2 & 1023);
bh27 1:8e28c267ff1a 91 CommandPacket = (CommandPacket << 10) | (Cont3 & 1023);
bh27 1:8e28c267ff1a 92
bh27 1:8e28c267ff1a 93 shiftOut(datapin, clockpin, CommandPacket >> 24);
bh27 1:8e28c267ff1a 94 shiftOut(datapin, clockpin, CommandPacket >> 16);
bh27 1:8e28c267ff1a 95 shiftOut(datapin, clockpin, CommandPacket >> 8);
bh27 1:8e28c267ff1a 96 shiftOut(datapin, clockpin, CommandPacket);
bh27 1:8e28c267ff1a 97
bh27 1:8e28c267ff1a 98
bh27 1:8e28c267ff1a 99 wait_ms(1);
bh27 1:8e28c267ff1a 100 latchpin = 1;
bh27 1:8e28c267ff1a 101 wait_ms(1);
bh27 1:8e28c267ff1a 102 latchpin = 0;
bh27 1:8e28c267ff1a 103 }
bh27 1:8e28c267ff1a 104
bh27 1:8e28c267ff1a 105 return;
bh27 1:8e28c267ff1a 106
bh27 1:8e28c267ff1a 107 }
bh27 1:8e28c267ff1a 108
bh27 1:8e28c267ff1a 109 int main() {
bh27 1:8e28c267ff1a 110 while(1) {
bh27 1:8e28c267ff1a 111 Current_Control();
bh27 1:8e28c267ff1a 112
bh27 1:8e28c267ff1a 113 // Red
bh27 1:8e28c267ff1a 114 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 115 SB_RedCommand = 1023; // max = 1023
bh27 1:8e28c267ff1a 116 SB_GreenCommand = 0;
bh27 1:8e28c267ff1a 117 SB_BlueCommand = 0;
bh27 1:8e28c267ff1a 118 SB_SendPacket();
bh27 1:8e28c267ff1a 119
bh27 1:8e28c267ff1a 120 wait(3);
bh27 1:8e28c267ff1a 121
bh27 1:8e28c267ff1a 122 Current_Control();
bh27 1:8e28c267ff1a 123
bh27 1:8e28c267ff1a 124 // Green
bh27 1:8e28c267ff1a 125 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 126 SB_RedCommand = 0;
bh27 1:8e28c267ff1a 127 SB_GreenCommand = 1023;
bh27 1:8e28c267ff1a 128 SB_BlueCommand = 0;
bh27 1:8e28c267ff1a 129 SB_SendPacket();
bh27 1:8e28c267ff1a 130
bh27 1:8e28c267ff1a 131 wait(3);
bh27 1:8e28c267ff1a 132
bh27 1:8e28c267ff1a 133 Current_Control();
bh27 1:8e28c267ff1a 134
bh27 1:8e28c267ff1a 135 // Blue
bh27 1:8e28c267ff1a 136 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 137 SB_RedCommand = 0;
bh27 1:8e28c267ff1a 138 SB_GreenCommand = 0;
bh27 1:8e28c267ff1a 139 SB_BlueCommand = 1023;
bh27 1:8e28c267ff1a 140 SB_SendPacket();
bh27 1:8e28c267ff1a 141
bh27 1:8e28c267ff1a 142 wait(3);
bh27 1:8e28c267ff1a 143
bh27 1:8e28c267ff1a 144 Current_Control();
bh27 1:8e28c267ff1a 145
bh27 1:8e28c267ff1a 146 // Magenta
bh27 1:8e28c267ff1a 147 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 148 SB_RedCommand = 1023;
bh27 1:8e28c267ff1a 149 SB_GreenCommand = 0;
bh27 1:8e28c267ff1a 150 SB_BlueCommand = 1023;
bh27 1:8e28c267ff1a 151 SB_SendPacket();
bh27 1:8e28c267ff1a 152
bh27 1:8e28c267ff1a 153 wait(3);
bh27 1:8e28c267ff1a 154
bh27 1:8e28c267ff1a 155 Current_Control();
bh27 1:8e28c267ff1a 156
bh27 1:8e28c267ff1a 157 // Cyan
bh27 1:8e28c267ff1a 158 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 159 SB_RedCommand = 0;
bh27 1:8e28c267ff1a 160 SB_GreenCommand = 1023;
bh27 1:8e28c267ff1a 161 SB_BlueCommand = 1023;
bh27 1:8e28c267ff1a 162 SB_SendPacket();
bh27 1:8e28c267ff1a 163
bh27 1:8e28c267ff1a 164 wait(3);
bh27 1:8e28c267ff1a 165
bh27 1:8e28c267ff1a 166 Current_Control();
bh27 1:8e28c267ff1a 167
bh27 1:8e28c267ff1a 168 // Yellow
bh27 1:8e28c267ff1a 169 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 170 SB_RedCommand = 1023;
bh27 1:8e28c267ff1a 171 SB_GreenCommand = 1023;
bh27 1:8e28c267ff1a 172 SB_BlueCommand = 0;
bh27 1:8e28c267ff1a 173 SB_SendPacket();
bh27 1:8e28c267ff1a 174
bh27 1:8e28c267ff1a 175 wait(3);
bh27 1:8e28c267ff1a 176
bh27 1:8e28c267ff1a 177 Current_Control();
bh27 1:8e28c267ff1a 178
bh27 1:8e28c267ff1a 179 // White
bh27 1:8e28c267ff1a 180 SB_CommandMode = 0xB00;
bh27 1:8e28c267ff1a 181 SB_RedCommand = 1023;
bh27 1:8e28c267ff1a 182 SB_GreenCommand = 1023;
bh27 1:8e28c267ff1a 183 SB_BlueCommand = 1023;
bh27 1:8e28c267ff1a 184 SB_SendPacket();
bh27 1:8e28c267ff1a 185
bh27 1:8e28c267ff1a 186 wait(3);
bh27 1:8e28c267ff1a 187 }
bh27 1:8e28c267ff1a 188 }