summaryrefslogtreecommitdiff
path: root/Blinkme_spi/Blinkme_spi.ino
blob: dceaa198034c662c2bc2ffcb079dbba264b50a80 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#include <SPI.h>


// Definition des Datenpaketes
// Länge: 1 Byte
// Adressierung der LED: 5 Bit
// Maske: 0xF8
// Helligkeitswert: 3 Bit
// Maske: 0x7
// Dadurch 31 LEDs adressierbar mit 7 Helligkeitswerten
//
// * CS - to digital pin 10  (SS pin)
// * SDI - to digital pin 11 (MOSI pin)
// * SDI - to digital pin 12 (MISO pin)
// * CLK - to digital pin 13 (SCK pin)



// Vorbereitungen um als Slave Daten zu empfangen
byte recieve_buff [255];
volatile byte pos;
volatile boolean process_it;

// PINS fuer SPI
const int slaveSelectPin = 10;
const int miso = 12;
const int mosi = 11;

const int ledPin = 2;

//Array fuer Helligkeitswerte Led, 2te Dimension gibt Position im Muster wieder
byte brightnessMatrix[31][2];

//Array fuer Led Pin Adressen
byte ledAdresse[31];

//Fuer For Schleifen im Loop
int brightLimit = 100;
int posLed = 3;


// Matrix fuer Helligkeitsmuster
int bitMusterHelligkeit[][100] =
{
  {
    0,0,0,0,0,0,0,0,2        }
  ,
  {
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2        }
  ,
  {
    0,0,0,0,0,0,1,0,0,0,0,0,0,1,2        }
  ,
  {
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,2        }
  ,
  {
    0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,2        }
  ,
  {
    0,1,1,1,0,1,1,1,2   }
  ,
  {
    0,1,1,1,0,1,1,1,2   }
  ,
  {
    1,1,1,1,1,1,1,1,2   }
};



void setup() {   
  Serial.begin (115200);   // debugging
  
 

  pinMode(slaveSelectPin, INPUT); 
  pinMode(miso, OUTPUT);

  // SPI als Slave aktivieren
  SPCR |= _BV(SPE);

  // interrupt vorbereitung
  pos =0; //recieve Buffer leer
  process_it = false;
  SPI.attachInterrupt();


  //Leds initialisieren
  for(int i=0;i<31;i++){
    brightnessMatrix[i][1]=0;
  }

  // initialize the digital pin as an output.
  pinMode(ledPin, OUTPUT);

  digitalWrite (ledPin, HIGH);
  delay(1000);
  digitalWrite (ledPin, LOW);


}

//Interrupt fuer SPI
ISR (SPI_STC_vect)
{
  byte buffer = SPDR;
  //Schreibt im Array an die Adresse im Datenpaket den Wert
  Serial.println((SPDR&0xf8)>>3);
  //Serial.println(SPDR);
  
  //brightnessMatrix[2][0]=SPDR&0x07;
  brightnessMatrix[SPDR&0x07][0]=(SPDR&0xf8)>>3;
  
  digitalWrite (ledPin, HIGH);

  digitalWrite (ledPin, LOW);

}


void loop()
{
  //Serial.println(brightnessMatrix[2][0]);
  
  for(int i=0;i<31;i++){

    
    //Serial.println(bitMusterHelligkeit[brightnessMatrix[i][0]][brightnessMatrix[i][1]]);
    //Serial.println(
    if(bitMusterHelligkeit[brightnessMatrix[i][0]][brightnessMatrix[i][1]]==1){
      digitalWrite(i,HIGH);
      brightnessMatrix[i][1]==brightnessMatrix[i][1]++; 
    }
    else if(bitMusterHelligkeit[brightnessMatrix[i][0]][brightnessMatrix[i][1]]==0){

      digitalWrite(i,LOW);
      brightnessMatrix[i][1]==brightnessMatrix[i][1]++; 
    }
    else {
      brightnessMatrix[i][1]=0;
    }

  }
  


}