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

Dependencies:   mbed

Committer:
bh27
Date:
Sun Mar 20 11:50:18 2011 +0000
Revision:
1:8e28c267ff1a
Parent:
0:0992b23a3b05
Child:
2:62be298c6ab8
v1.1

Who changed what in which revision?

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