#include // 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,0,0,0,0,0,0,0,0,0,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 brightnessMatrix[2][0]=SPDR&0x07; // brightnessMatrix[SPDR&0xf8][0]=SPDR&0x07; digitalWrite (ledPin, HIGH); digitalWrite (ledPin, LOW); } void loop() { Serial.println(brightnessMatrix[2][0]); for(int i=0;i<31;i++){ if(brightnessMatrix[i][0]){ digitalWrite(/*ledAdresse[i]*/2,HIGH); brightnessMatrix[i][1]==brightnessMatrix[i][1]++; } else if(brightnessMatrix[i][0]==0){ digitalWrite(/*ledAdresse[i]*/2,LOW); } else { brightnessMatrix[i][1]=0; } } }