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

Dependencies:   mbed

Committer:
bh27
Date:
Thu Mar 17 11:22:39 2011 +0000
Revision:
0:0992b23a3b05
Child:
1:8e28c267ff1a
1.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
bh27 0:0992b23a3b05 1 // A simple program to cycle a chain of shiftbrites through RGB,MCY,W using mbed.
bh27 0:0992b23a3b05 2
bh27 0:0992b23a3b05 3 // Shift register code from: http://mbed.org/users/ChriX/notebook/shift-register-function/
bh27 0:0992b23a3b05 4 // Shiftbrite Arduino code from: http://macetech.com/blog/node/54
bh27 0:0992b23a3b05 5
bh27 0:0992b23a3b05 6 #include "mbed.h"
bh27 0:0992b23a3b05 7
bh27 0:0992b23a3b05 8 DigitalOut datapin(p30);
bh27 0:0992b23a3b05 9 DigitalOut latchpin(p29);
bh27 0:0992b23a3b05 10 DigitalOut enablepin(p28);
bh27 0:0992b23a3b05 11 DigitalOut clockpin(p27);
bh27 0:0992b23a3b05 12
bh27 0:0992b23a3b05 13 unsigned long SB_CommandPacket;
bh27 0:0992b23a3b05 14 int SB_CommandMode;
bh27 0:0992b23a3b05 15 int SB_BlueCommand;
bh27 0:0992b23a3b05 16 int SB_RedCommand;
bh27 0:0992b23a3b05 17 int SB_GreenCommand;
bh27 0:0992b23a3b05 18 int No_of_shiftbrites = 4;
bh27 0:0992b23a3b05 19
bh27 0:0992b23a3b05 20 void shiftOut(DigitalOut data, DigitalOut clk, int sodata) {
bh27 0:0992b23a3b05 21
bh27 0:0992b23a3b05 22 int i;
bh27 0:0992b23a3b05 23
bh27 0:0992b23a3b05 24 for (i = 7; i >= 0; i--) {
bh27 0:0992b23a3b05 25
bh27 0:0992b23a3b05 26 clk = 0;
bh27 0:0992b23a3b05 27
bh27 0:0992b23a3b05 28 if(sodata & (1 << i)){
bh27 0:0992b23a3b05 29 data = 1;
bh27 0:0992b23a3b05 30 } else {
bh27 0:0992b23a3b05 31 data = 0;
bh27 0:0992b23a3b05 32 }
bh27 0:0992b23a3b05 33
bh27 0:0992b23a3b05 34 clk = 1;
bh27 0:0992b23a3b05 35 data = 0;
bh27 0:0992b23a3b05 36 }
bh27 0:0992b23a3b05 37
bh27 0:0992b23a3b05 38 return;
bh27 0:0992b23a3b05 39
bh27 0:0992b23a3b05 40 }
bh27 0:0992b23a3b05 41
bh27 0:0992b23a3b05 42
bh27 0:0992b23a3b05 43 void SB_SendPacket() {
bh27 0:0992b23a3b05 44
bh27 0:0992b23a3b05 45 for (int y = No_of_shiftbrites-1; y >= 0; y--) {
bh27 0:0992b23a3b05 46 SB_CommandPacket = SB_CommandMode & 0xB11;
bh27 0:0992b23a3b05 47 SB_CommandPacket = (SB_CommandPacket << 10) | (SB_BlueCommand & 1023);
bh27 0:0992b23a3b05 48 SB_CommandPacket = (SB_CommandPacket << 10) | (SB_RedCommand & 1023);
bh27 0:0992b23a3b05 49 SB_CommandPacket = (SB_CommandPacket << 10) | (SB_GreenCommand & 1023);
bh27 0:0992b23a3b05 50
bh27 0:0992b23a3b05 51 shiftOut(datapin, clockpin, SB_CommandPacket >> 24);
bh27 0:0992b23a3b05 52 shiftOut(datapin, clockpin, SB_CommandPacket >> 16);
bh27 0:0992b23a3b05 53 shiftOut(datapin, clockpin, SB_CommandPacket >> 8);
bh27 0:0992b23a3b05 54 shiftOut(datapin, clockpin, SB_CommandPacket);
bh27 0:0992b23a3b05 55
bh27 0:0992b23a3b05 56
bh27 0:0992b23a3b05 57 wait_us(500);
bh27 0:0992b23a3b05 58 latchpin = 1;
bh27 0:0992b23a3b05 59 wait_us(500);
bh27 0:0992b23a3b05 60 latchpin = 0;
bh27 0:0992b23a3b05 61 }
bh27 0:0992b23a3b05 62
bh27 0:0992b23a3b05 63 }
bh27 0:0992b23a3b05 64
bh27 0:0992b23a3b05 65 int main() {
bh27 0:0992b23a3b05 66 while(1) {
bh27 0:0992b23a3b05 67 SB_CommandMode = 0xB01;
bh27 0:0992b23a3b05 68 SB_RedCommand = 127;
bh27 0:0992b23a3b05 69 SB_GreenCommand = 127;
bh27 0:0992b23a3b05 70 SB_BlueCommand = 127;
bh27 0:0992b23a3b05 71 SB_SendPacket();
bh27 0:0992b23a3b05 72
bh27 0:0992b23a3b05 73 // Red
bh27 0:0992b23a3b05 74 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 75 SB_RedCommand = 127; // max = 1023
bh27 0:0992b23a3b05 76 SB_GreenCommand = 0;
bh27 0:0992b23a3b05 77 SB_BlueCommand = 0;
bh27 0:0992b23a3b05 78 SB_SendPacket();
bh27 0:0992b23a3b05 79
bh27 0:0992b23a3b05 80 wait_ms(500);
bh27 0:0992b23a3b05 81
bh27 0:0992b23a3b05 82 // Green
bh27 0:0992b23a3b05 83 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 84 SB_RedCommand = 0;
bh27 0:0992b23a3b05 85 SB_GreenCommand = 127;
bh27 0:0992b23a3b05 86 SB_BlueCommand = 0;
bh27 0:0992b23a3b05 87 SB_SendPacket();
bh27 0:0992b23a3b05 88
bh27 0:0992b23a3b05 89 wait_ms(500);
bh27 0:0992b23a3b05 90
bh27 0:0992b23a3b05 91 // Blue
bh27 0:0992b23a3b05 92 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 93 SB_RedCommand = 0;
bh27 0:0992b23a3b05 94 SB_GreenCommand = 0;
bh27 0:0992b23a3b05 95 SB_BlueCommand = 127;
bh27 0:0992b23a3b05 96 SB_SendPacket();
bh27 0:0992b23a3b05 97
bh27 0:0992b23a3b05 98 wait_ms(500);
bh27 0:0992b23a3b05 99
bh27 0:0992b23a3b05 100 // Magenta
bh27 0:0992b23a3b05 101 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 102 SB_RedCommand = 127;
bh27 0:0992b23a3b05 103 SB_GreenCommand = 0;
bh27 0:0992b23a3b05 104 SB_BlueCommand = 127;
bh27 0:0992b23a3b05 105 SB_SendPacket();
bh27 0:0992b23a3b05 106
bh27 0:0992b23a3b05 107 wait_ms(500);
bh27 0:0992b23a3b05 108
bh27 0:0992b23a3b05 109 // Cyan
bh27 0:0992b23a3b05 110 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 111 SB_RedCommand = 0;
bh27 0:0992b23a3b05 112 SB_GreenCommand = 127;
bh27 0:0992b23a3b05 113 SB_BlueCommand = 127;
bh27 0:0992b23a3b05 114 SB_SendPacket();
bh27 0:0992b23a3b05 115
bh27 0:0992b23a3b05 116 wait_ms(500);
bh27 0:0992b23a3b05 117
bh27 0:0992b23a3b05 118 // Yellow
bh27 0:0992b23a3b05 119 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 120 SB_RedCommand = 127;
bh27 0:0992b23a3b05 121 SB_GreenCommand = 127;
bh27 0:0992b23a3b05 122 SB_BlueCommand = 0;
bh27 0:0992b23a3b05 123 SB_SendPacket();
bh27 0:0992b23a3b05 124
bh27 0:0992b23a3b05 125 wait_ms(500);
bh27 0:0992b23a3b05 126
bh27 0:0992b23a3b05 127 // White
bh27 0:0992b23a3b05 128 SB_CommandMode = 0xB00;
bh27 0:0992b23a3b05 129 SB_RedCommand = 127;
bh27 0:0992b23a3b05 130 SB_GreenCommand = 127;
bh27 0:0992b23a3b05 131 SB_BlueCommand = 127;
bh27 0:0992b23a3b05 132 SB_SendPacket();
bh27 0:0992b23a3b05 133
bh27 0:0992b23a3b05 134 wait_ms(500);
bh27 0:0992b23a3b05 135 }
bh27 0:0992b23a3b05 136 }