Take a look inside

Arduino Code

We finally can show you some arduino source-code of our project.
It is  quite a mess and really rough but it seems to work.
We are working on a more sophisticated version so stay tuned.

Code after the jump.

// by rob natebu.wordpress.com

int dataPin = 10; //DS
int latchPin = 9; //ST
int clockPin = 8; //SH

int sS0 = 7; //sS0
int sS1 = 6; //sS1
int sS2 = 5; //sS2

int mS0 = 4; //mS0
int mS1 = 3; //mS1
int mS2 = 2; //mS2

// Pinf for the Status LED
int led = 13;

// Pin for the IR LEDs
int LEDpin = 11;

// Analog Inputs von den Fototransistoren
int analogInput = 0;

// variable to store the value

int values0[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values1[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values2[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values3[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values4[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values5[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values6[] = {
0, 0, 0, 0, 0, 0, 0, 0};
int values7[] = {
0, 0, 0, 0, 0, 0, 0, 0};

int values[8][8]; //display
int counters[8][8];//storrage

// a threshold to decide when the LED turns on 512 normal
int threshold = 700;

int timer = 0;

//holders for infromation you’re going to pass to shifting function
byte dataRED;
byte dataGREEN;
byte dataArrayRED[8];
byte dataArrayGREEN[8];

//alles für den multiplexer
int rm0 = 0; // value Master 4051 (s0)
int rm1 = 0; // value Master 4051 (s1)
int rm2 = 0; // value Master 4051 (s2)
int rowM = 0; // storeing the bin code
int bin [] = {
000, 1, 10, 11, 100, 101, 110, 111};//bin = binär, some times it is so easy

int rs0 = 0; // value Slave 4051 (s0)
int rs1 = 0; // value Slave 4051 (s1)
int rs2 = 0; // value Slave 4051 (s2)
int rowS = 0; // storeing the bin code

void setup() {

//multiplexer
pinMode(mS0, OUTPUT); // Master s0
pinMode(mS1, OUTPUT); // Master s1
pinMode(mS2, OUTPUT); // Master s2

pinMode(sS0, OUTPUT); // Slave s0
pinMode(sS1, OUTPUT); // Slave s1
pinMode(sS2, OUTPUT); // Slave s2

digitalWrite(led, HIGH); //die kontroll LED

//set pins to output because they are addressed in the main loop
pinMode(latchPin, OUTPUT);

//set the pin for the IR LEDs
pinMode(LEDpin, OUTPUT);
digitalWrite(LEDpin, HIGH);

// Analog Inputs von den Fototransistoren
pinMode(analogInput, INPUT);

dataArrayGREEN[0] = 254;
dataArrayGREEN[1] = 253;
dataArrayGREEN[2] = 251;
dataArrayGREEN[3] = 247;
dataArrayGREEN[4] = 239;
dataArrayGREEN[5] = 223;
dataArrayGREEN[6] = 191;
dataArrayGREEN[7] = 127;

for(int j = 0; j < 8; j++){
values[0][j] = values0[j];
values[1][j] = values1[j];
values[2][j] = values2[j];
values[3][j] = values3[j];
values[4][j] = values4[j];
values[5][j] = values5[j];
values[6][j] = values6[j];
values[7][j] = values7[j];
}
for(int i = 0; i < 8; i++){
for(int j = 0; j < 8; j++){
counters[i][j] = 0;
}
}
}

void loop() {

/// Multiplexer read alle
for (int countM=0; countM<8; countM++) {
rowM = bin[countM];
rm0 = rowM & 0x01;
rm1 = (rowM>>1) & 0x01;
rm2 = (rowM>>2) & 0x01;
digitalWrite(mS0, rm0);
digitalWrite(mS1, rm1);
digitalWrite(mS2, rm2);

for (int countS=0; countS<8; countS++) {
rowS = bin[countS];
rs0 = rowS & 0x01;
rs1 = (rowS>>1) & 0x01;
rs2 = (rowS>>2) & 0x01;
digitalWrite(sS0, rs0);
digitalWrite(sS1, rs1);
digitalWrite(sS2, rs2);

if(values[countS][countM] == 1) {
counters[countS][countM] = counters[countS][countM] + 1;
}
if( counters[countS][countM] > 50) {
counters[countS][countM] = 0;
values[countS][countM] = 0;
}

if ( analogRead(analogInput) < threshold) {
// macht die umschaltung
if(values[countS][countM] == 0) {
values[countS][countM] = 1;
}
}

dataArrayRED[countS] = values[countS][0]*1+values[countS][1]*2+values[countS][2]*4+values[countS][3]*8+values[countS][4]*16+values[countS][5]*32+values[countS][6]*64+values[countS][7]*128;
//ground latchPin and hold low for as long as you are transmitting
digitalWrite(latchPin, 0);
//move ’em out
shiftOut(dataPin, clockPin, dataArrayGREEN[countS]);
shiftOut(dataPin, clockPin, dataArrayRED[countS]);
//return the latch pin high to signal chip that it
//no longer needs to listen for information
digitalWrite(latchPin, 1);
}
}

}

// the heart of the program
void shiftOut(int myDataPin, int myClockPin, byte myDataOut) {

//internal function setup
int i=0;
int pinState;
pinMode(myClockPin, OUTPUT);
pinMode(myDataPin, OUTPUT);

//clear everything out
digitalWrite(myDataPin, 0);
digitalWrite(myClockPin, 0);

for (i=7; i>=0; i–) {
digitalWrite(myClockPin, 0);
if ( myDataOut & (1<<i) ) {
pinState= 1;
}
else {
pinState= 0;
}
//Sets the pin to HIGH or LOW depending on pinState
digitalWrite(myDataPin, pinState);
//register shifts bits on upstroke of clock pin
digitalWrite(myClockPin, 1);
//zero the data pin after shift to prevent bleed through
digitalWrite(myDataPin, 0);
}
//stop shifting
digitalWrite(myClockPin, 0);
}

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: