Lab_interaccio/2023/CABALGATA/test_cola_2811/test_cola_2811.ino
2025-02-25 21:29:42 +01:00

327 lines
7.5 KiB
C++

#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));
}