327 lines
7.5 KiB
Arduino
327 lines
7.5 KiB
Arduino
|
#include <SPI.h>
|
||
|
#include "nRF24L01.h"
|
||
|
#include "RF24.h"
|
||
|
#include "printf.h"
|
||
|
#include "Adafruit_NeoPixel.h"
|
||
|
|
||
|
#define RADIOSEND false
|
||
|
|
||
|
#define CE_PIN 12
|
||
|
#define CSN_PIN 2
|
||
|
|
||
|
#define DEBUG 0
|
||
|
#define TEST 1
|
||
|
|
||
|
#define RED 11
|
||
|
#define GREEN 10
|
||
|
#define BLUE 9
|
||
|
#define WHITE 6
|
||
|
|
||
|
#define SDO1 4
|
||
|
#define SDO2 8
|
||
|
#define SDO3 3
|
||
|
|
||
|
#define NUMPIXELS1 800 // fuego
|
||
|
#define NUMPIXELS2 800
|
||
|
#define NUMPIXELS3 800
|
||
|
|
||
|
/*Estrella*/
|
||
|
#define L1 61
|
||
|
#define L2 61
|
||
|
#define L3 68
|
||
|
#define L4 68
|
||
|
#define L5 54
|
||
|
#define L6 43
|
||
|
#define L7 54
|
||
|
#define L8 12
|
||
|
#define L9 18
|
||
|
|
||
|
/*Ovni*/
|
||
|
#define C1 81
|
||
|
#define C2 216
|
||
|
#define C3 8
|
||
|
|
||
|
//int idpin[8] = { 5, 13, A4, A3, A2, A1, A0, A5};
|
||
|
int idpin[6] = { A5, A0, A1, A2, A3, A4};
|
||
|
int chpin[2] = { 13, 5 }; // no se va a usar en esta App
|
||
|
|
||
|
Adafruit_NeoPixel pixels1 = Adafruit_NeoPixel(NUMPIXELS1, SDO1, NEO_KHZ800 + NEO_RGB);
|
||
|
Adafruit_NeoPixel pixels2 = Adafruit_NeoPixel(NUMPIXELS2, SDO2, NEO_KHZ800 + NEO_RGB);
|
||
|
Adafruit_NeoPixel pixels3 = Adafruit_NeoPixel(NUMPIXELS3, SDO3, NEO_KHZ800 + NEO_RGB);
|
||
|
|
||
|
|
||
|
byte neopix_gamma[] = {
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1,
|
||
|
1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2,
|
||
|
2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5,
|
||
|
5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9, 9, 10,
|
||
|
10, 10, 11, 11, 11, 12, 12, 13, 13, 13, 14, 14, 15, 15, 16, 16,
|
||
|
17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 24, 24, 25,
|
||
|
25, 26, 27, 27, 28, 29, 29, 30, 31, 32, 32, 33, 34, 35, 35, 36,
|
||
|
37, 38, 39, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 50,
|
||
|
51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 66, 67, 68,
|
||
|
69, 70, 72, 73, 74, 75, 77, 78, 79, 81, 82, 83, 85, 86, 87, 89,
|
||
|
90, 92, 93, 95, 96, 98, 99,101,102,104,105,107,109,110,112,114,
|
||
|
115,117,119,120,122,124,126,127,129,131,133,135,137,138,140,142,
|
||
|
144,146,148,150,152,154,156,158,160,162,164,167,169,171,173,175,
|
||
|
177,180,182,184,186,189,191,193,196,198,200,203,205,208,210,213,
|
||
|
215,218,220,223,225,228,231,233,236,239,241,244,247,249,252,255
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
RF24 radio(CE_PIN, CSN_PIN); // Create a Radio
|
||
|
const uint64_t pipe = 0xE8E8F0F0E1LL; // Define the transmit pipe
|
||
|
uint8_t CMD[ 8 ]; // CMD + Ch + 2
|
||
|
int ch = 76; // Fuerzo a canal 76 (showroom)
|
||
|
|
||
|
|
||
|
// Globales PIXEL
|
||
|
unsigned long delayed = 0; // control de tiempo de funciones de pixel
|
||
|
int countFrame = 0;
|
||
|
unsigned long launchTime = 0;
|
||
|
short stroboPixelFlag = 0;
|
||
|
short pixelFlag = 0;
|
||
|
short pixelOn = 0;
|
||
|
short stroboPixelOn = 0;
|
||
|
float incRed, incGreen, incBlue, incWhite;
|
||
|
|
||
|
// Globales NEON
|
||
|
unsigned long delayedNeon = 0; // control de tiempo de funciones de neon
|
||
|
unsigned long launchTimeNeon = 0;
|
||
|
int countFrameNeon = 0;
|
||
|
short stroboFlagNeon = 0;
|
||
|
short neonFlag = 0;
|
||
|
short stroboNeonOn = 0;
|
||
|
|
||
|
short chflag = 0;
|
||
|
uint8_t param1 = 20;
|
||
|
uint8_t param2 = 140;
|
||
|
uint8_t selectedEffect = 0;
|
||
|
uint16_t i = 0;
|
||
|
|
||
|
int c = 0;
|
||
|
int numSer = 0;
|
||
|
char numStr[4];
|
||
|
|
||
|
byte globalNeonRed;
|
||
|
byte globalNeonGreen;
|
||
|
byte globalNeonBlue;
|
||
|
byte globalNeonWhite;
|
||
|
|
||
|
uint32_t p1, p2, p3, p4, p5, p6 ; // bytes para los comandos OSC (colores)
|
||
|
|
||
|
|
||
|
void resetBoard()
|
||
|
{
|
||
|
//Serial.println("reset");
|
||
|
NVIC_SystemReset(); // esta funcion en teoria si funciona en SAMD
|
||
|
}
|
||
|
|
||
|
|
||
|
byte id()
|
||
|
{
|
||
|
int id = 0;
|
||
|
for (byte i = 0; i < 6; i++ ) bitWrite(id, i, digitalRead(idpin[i]));
|
||
|
return id;
|
||
|
}
|
||
|
|
||
|
|
||
|
int channel()
|
||
|
{
|
||
|
int value = code();
|
||
|
switch (value)
|
||
|
{
|
||
|
case 0:
|
||
|
value = 0x10; //
|
||
|
break;
|
||
|
case 1:
|
||
|
value = 0x4C; //
|
||
|
break;
|
||
|
case 3:
|
||
|
value = 0x64; //
|
||
|
break;
|
||
|
case 4:
|
||
|
value = 0x7F; //
|
||
|
break;
|
||
|
default:
|
||
|
value = 0; //
|
||
|
break;
|
||
|
}
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
int code()
|
||
|
{
|
||
|
int value = 0;
|
||
|
for (byte i = 0; i < 2; i++) bitWrite(value, i, digitalRead(chpin[i]));
|
||
|
return value;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
///////////////////////// SETUP ////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
void setup() {
|
||
|
|
||
|
|
||
|
pinMode(RED, OUTPUT);
|
||
|
digitalWrite(RED, LOW);
|
||
|
pinMode(GREEN, OUTPUT);
|
||
|
digitalWrite(GREEN, LOW);
|
||
|
pinMode(BLUE, OUTPUT);
|
||
|
digitalWrite(BLUE, LOW);
|
||
|
pinMode(WHITE, OUTPUT);
|
||
|
digitalWrite(WHITE, LOW);
|
||
|
|
||
|
for (int i = 0; i < 4; i++)
|
||
|
{
|
||
|
pinMode(idpin[i], INPUT);
|
||
|
pinMode(chpin[i], INPUT);
|
||
|
}
|
||
|
|
||
|
analogWrite(WHITE, 255);
|
||
|
analogWrite(RED, 255);
|
||
|
analogWrite(GREEN, 255);
|
||
|
analogWrite(BLUE, 255);
|
||
|
|
||
|
pixels1.begin();
|
||
|
pixels2.begin();
|
||
|
pixels3.begin();
|
||
|
pixels1.show(); // Initialize all pixels to 'off'
|
||
|
pixels2.show(); // Initialize all pixels to 'off'
|
||
|
pixels3.show(); // Initialize all pixels to 'off'
|
||
|
|
||
|
Serial.begin(512000);
|
||
|
//while (!Serial) {
|
||
|
// ; // wait for serial port to connect. Needed for Leonardo only
|
||
|
//}
|
||
|
|
||
|
analogWrite(WHITE, 0);
|
||
|
analogWrite(RED, 0);
|
||
|
analogWrite(GREEN, 0);
|
||
|
analogWrite(BLUE, 0);
|
||
|
|
||
|
//printf_begin();
|
||
|
radio.begin();
|
||
|
radio.setDataRate( RF24_250KBPS );
|
||
|
radio.setPALevel( RF24_PA_MAX );
|
||
|
radio.setAutoAck(0);
|
||
|
radio.setPayloadSize(8);
|
||
|
radio.setChannel(ch);
|
||
|
#if RADIOSEND
|
||
|
radio.openWritingPipe(pipe);
|
||
|
#else
|
||
|
radio.openReadingPipe(1, pipe);
|
||
|
radio.startListening();
|
||
|
#endif
|
||
|
radio.printDetails();
|
||
|
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
///////////////////////// LOOP ////////////////////////////////
|
||
|
//////////////////////////////////////////////////////////////////
|
||
|
|
||
|
|
||
|
void loop()
|
||
|
{
|
||
|
|
||
|
///////////////////////// RADIO ENCUESTA ////////////////////////
|
||
|
// Serial.print("id: ");
|
||
|
// Serial.println(id());
|
||
|
// Serial.print("code: ");
|
||
|
// Serial.println(code());
|
||
|
|
||
|
#if TEST
|
||
|
#define TIME_STOP 1000
|
||
|
// int INI_LED = C1;
|
||
|
// int FIN_LEDS = C1+ C2;
|
||
|
|
||
|
int INI_LED = 0;
|
||
|
int FIN_LEDS = 800;
|
||
|
|
||
|
for(int i=INI_LED; i<FIN_LEDS; i++)
|
||
|
{
|
||
|
pixels2.setPixelColor( i, 255, 0, 0);
|
||
|
pixels3.setPixelColor( i, 255, 0, 0);
|
||
|
}
|
||
|
analogWrite(RED, 255);
|
||
|
analogWrite(GREEN, 0);
|
||
|
analogWrite(WHITE, 0); // azul replicado en salida de blanco por placa estropeada
|
||
|
showStrip();
|
||
|
delay(TIME_STOP);
|
||
|
for(int i=INI_LED; i<FIN_LEDS; i++)
|
||
|
{
|
||
|
pixels2.setPixelColor( i, 0, 255, 0);
|
||
|
pixels3.setPixelColor( i, 0, 255, 0);
|
||
|
}
|
||
|
analogWrite(RED, 0);
|
||
|
analogWrite(GREEN, 255);
|
||
|
analogWrite(WHITE, 0); // azul replicado en salida de blanco por placa estropeada
|
||
|
showStrip();
|
||
|
delay(TIME_STOP);
|
||
|
for(int i=INI_LED; i<FIN_LEDS; i++)
|
||
|
{
|
||
|
pixels2.setPixelColor( i, 0, 0, 255);
|
||
|
pixels3.setPixelColor( i, 0, 0, 255);
|
||
|
}
|
||
|
analogWrite(RED, 0);
|
||
|
analogWrite(GREEN, 0);
|
||
|
analogWrite(WHITE, 255); // azul replicado en salida de blanco por placa estropeada
|
||
|
showStrip();
|
||
|
delay(TIME_STOP);
|
||
|
for(int i=INI_LED; i<FIN_LEDS; i++)
|
||
|
{
|
||
|
pixels2.setPixelColor( i, 255, 255, 255);
|
||
|
pixels3.setPixelColor( i, 255, 255, 255);
|
||
|
}
|
||
|
analogWrite(RED, 255);
|
||
|
analogWrite(GREEN, 255);
|
||
|
analogWrite(WHITE, 255); // azul replicado en salida de blanco por placa estropeada
|
||
|
showStrip();
|
||
|
delay(TIME_STOP);
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
void splitStrip()
|
||
|
{
|
||
|
// CONVERSION DE UNA ANIMACION DE 5M A DOS TRAMOS
|
||
|
|
||
|
for ( int i = 0; i < 150 ; i++) // numPixels/2
|
||
|
{
|
||
|
|
||
|
pixels2.setPixelColor( i, pixels1.getPixelColor(i) );
|
||
|
pixels3.setPixelColor( i, pixels1.getPixelColor(i + 150) );
|
||
|
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
|
||
|
void showStrip()
|
||
|
{
|
||
|
|
||
|
//pixels1.show(); // tira entera de 5m
|
||
|
pixels2.show(); // parte 1 de 2.5m
|
||
|
pixels3.show(); // parte 2 de 2.5m
|
||
|
|
||
|
}
|
||
|
|
||
|
void setPixel(int Pixel, byte red, byte green, byte blue, byte white)
|
||
|
{
|
||
|
|
||
|
pixels1.setPixelColor(Pixel, pixels1.Color(red, green, blue, white));
|
||
|
|
||
|
}
|