proyectos:vestuario_aqa
Diferencias
Muestra las diferencias entre dos versiones de la página.
Ambos lados, revisión anteriorRevisión previaPróxima revisión | Revisión previa | ||
proyectos:vestuario_aqa [2019/12/04 02:35] – [Código para el proyecto del corazon] brolin | proyectos:vestuario_aqa [2021/10/30 23:38] (actual) – kz | ||
---|---|---|---|
Línea 479: | Línea 479: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | ==== Leds + plantower: cambia color segun lectura del sensor ==== | ||
+ | |||
+ | platformio.ini | ||
+ | |||
+ | <code c++> | ||
+ | [env: | ||
+ | platform = espressif8266 | ||
+ | board = d1_mini | ||
+ | framework = arduino | ||
+ | lib_deps = FastLED, PMS Library, https:// | ||
+ | |||
+ | </ | ||
+ | |||
+ | main.cpp | ||
+ | < | ||
+ | #include " | ||
+ | #include < | ||
+ | #include " | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define P_TOWER_RX D2 | ||
+ | #define P_TOWER_TX 6 | ||
+ | |||
+ | // Plantower | ||
+ | SoftwareSerial plantower_serial(P_TOWER_RX, | ||
+ | PMS pms(plantower_serial); | ||
+ | PMS::DATA data; | ||
+ | |||
+ | int pm2_5 = 0; | ||
+ | int *dir_pm2_5; | ||
+ | |||
+ | // Leds | ||
+ | #define DATA_PIN D7 | ||
+ | #define CLK_PIN D6 | ||
+ | #define LED_TYPE DOTSTAR | ||
+ | #define COLOR_ORDER BGR | ||
+ | #define NUM_LEDS 26 // estos 10 es para que cuando lea el sensor no se vean los leds prendidos | ||
+ | #define BRIGHTNESS 96 | ||
+ | CRGB leds[NUM_LEDS]; | ||
+ | |||
+ | //create one canvas and one brush with global scope | ||
+ | FastLEDPainterCanvas pixelcanvas = FastLEDPainterCanvas(NUM_LEDS); | ||
+ | FastLEDPainterBrush pixelbrush = FastLEDPainterBrush(& | ||
+ | |||
+ | CHSV brushcolor; //the brush and the canvas operate on HSV color space only | ||
+ | |||
+ | int color = 0; | ||
+ | int speed = 400; | ||
+ | |||
+ | int time_hours = 0; | ||
+ | int time_minutes = 0; | ||
+ | int time_seconds = 0; | ||
+ | |||
+ | void readPlantower(); | ||
+ | void animateLeds(); | ||
+ | void updateValues(); | ||
+ | |||
+ | void setup() { | ||
+ | //initilize FastLED library | ||
+ | FastLED.addLeds< | ||
+ | |||
+ | plantower_serial.begin(9600); | ||
+ | Serial.begin(115200); | ||
+ | Serial.println(" | ||
+ | Serial.println(F(" | ||
+ | |||
+ | //check if ram allocation of brushes and canvases was successful (painting will not work if unsuccessful, | ||
+ | //this check is optional but helps to check if something does not work, especially on low ram chips like the Arduino Uno | ||
+ | if (pixelcanvas.isvalid() == false) | ||
+ | Serial.println(F(" | ||
+ | else | ||
+ | Serial.println(F(" | ||
+ | |||
+ | if (pixelbrush.isvalid() == false) | ||
+ | Serial.println(F(" | ||
+ | else | ||
+ | Serial.println(F(" | ||
+ | |||
+ | // | ||
+ | brushcolor.h = color; //zero is red in HSV. Library uses 0-255 instead of 0-360 for colors (see https:// | ||
+ | brushcolor.s = 255; // | ||
+ | brushcolor.v = 130; // | ||
+ | |||
+ | pixelbrush.setSpeed(speed); | ||
+ | pixelbrush.setColor(brushcolor); | ||
+ | pixelbrush.setFadeSpeed(130); | ||
+ | pixelbrush.setFadeout(true); | ||
+ | pixelbrush.setBounce(true); | ||
+ | |||
+ | // set pointer | ||
+ | dir_pm2_5 = &pm2_5; | ||
+ | |||
+ | // setup time | ||
+ | setTime(time_hours, | ||
+ | } | ||
+ | |||
+ | void loop() { | ||
+ | readPlantower(); | ||
+ | } | ||
+ | |||
+ | void readPlantower() { | ||
+ | int sec = second(); | ||
+ | if (sec == 0 || sec == 15 || sec == 20 || sec == 30 || sec == 40 || sec == 50 || | ||
+ | sec == 5 || sec == 10 || sec == 35 || sec == 35 || sec == 45 || sec == 55) { | ||
+ | pms.wakeUp(); | ||
+ | if (pms.read(data)) { | ||
+ | pm2_5 = data.PM_AE_UG_2_5; | ||
+ | delay(500); | ||
+ | updateValues(); | ||
+ | } | ||
+ | Serial.print(" | ||
+ | Serial.println(*dir_pm2_5); | ||
+ | } | ||
+ | else { | ||
+ | Serial.print(" | ||
+ | Serial.println(*dir_pm2_5); | ||
+ | pms.sleep(); | ||
+ | animateLeds(); | ||
+ | } | ||
+ | // Serial.print(" | ||
+ | // Serial.println(sec); | ||
+ | } | ||
+ | |||
+ | void animateLeds(){ | ||
+ | // Serial.println(" | ||
+ | FastLED.clear(); | ||
+ | pixelbrush.paint(); | ||
+ | pixelcanvas.transfer(); | ||
+ | FastLED.show(); | ||
+ | } | ||
+ | |||
+ | void updateValues() { | ||
+ | // varia en los que varia | ||
+ | /* | ||
+ | 233 minimo | ||
+ | 1225 maximo | ||
+ | */ | ||
+ | if (*dir_pm2_5 < 400){ | ||
+ | brushcolor.h = 90; // aire bueno verde | ||
+ | pixelbrush.setColor(brushcolor); | ||
+ | pixelbrush.setFadeout(true); | ||
+ | pixelbrush.setBounce(true); | ||
+ | } else if (*dir_pm2_5 > 400 ) { | ||
+ | brushcolor.h = 200; // aire regular azul | ||
+ | pixelbrush.setColor(brushcolor); | ||
+ | pixelbrush.setFadeout(true); | ||
+ | pixelbrush.setBounce(true); | ||
+ | } else if (*dir_pm2_5 > 800) { | ||
+ | brushcolor.h = 155; // aire malo ? | ||
+ | pixelbrush.setColor(brushcolor); | ||
+ | pixelbrush.setFadeout(true); | ||
+ | pixelbrush.setBounce(true); | ||
+ | } else if (*dir_pm2_5 > 1200) { | ||
+ | brushcolor.h = 0; // magenta aire podrido | ||
+ | pixelbrush.setColor(brushcolor); | ||
+ | pixelbrush.setFadeout(true); | ||
+ | pixelbrush.setBounce(true); | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== mostrar texto en matrix led 8 x 8 una pantalla ===== | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | // | ||
+ | //Scrolls ' | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | #ifndef PSTR | ||
+ | # | ||
+ | #endif | ||
+ | |||
+ | #define PIN D3 | ||
+ | |||
+ | // MATRIX DECLARATION: | ||
+ | // Parameter 1 = width of NeoPixel matrix | ||
+ | // Parameter 2 = height of matrix | ||
+ | // Parameter 3 = pin number (most are valid) | ||
+ | // Parameter 4 = matrix layout flags, add together as needed: | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // rows or in vertical columns, respectively; | ||
+ | // | ||
+ | // in the same order, or alternate lines reverse direction; pick one. | ||
+ | // See example below for these values in action. | ||
+ | // Parameter 5 = pixel type flags, add together as needed: | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | |||
+ | // Example for NeoPixel Shield. | ||
+ | // as a 5x8 tall matrix, with the USB port positioned at the top of the | ||
+ | // Arduino. | ||
+ | // lines are arranged in columns, progressive order. | ||
+ | // 800 KHz (v2) pixels that expect GRB color data. | ||
+ | // Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(16, | ||
+ | // | ||
+ | // | ||
+ | // | ||
+ | |||
+ | Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(8, | ||
+ | NEO_MATRIX_TOP | ||
+ | NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, | ||
+ | NEO_GRB | ||
+ | ); | ||
+ | |||
+ | const uint16_t colors[] = { | ||
+ | matrix.Color(255, | ||
+ | }; | ||
+ | |||
+ | String Word = " | ||
+ | |||
+ | void setup() { | ||
+ | matrix.begin(); | ||
+ | matrix.setTextWrap(false); | ||
+ | matrix.setBrightness(40); | ||
+ | matrix.setTextColor(colors[0]); | ||
+ | } | ||
+ | |||
+ | int x = matrix.width(); | ||
+ | int pass = 0; | ||
+ | int pixelsInText = (Word.length() * 7)+8; | ||
+ | |||
+ | void loop() { | ||
+ | matrix.fillScreen(0); | ||
+ | matrix.setCursor(x, | ||
+ | matrix.print(Word); | ||
+ | if(--x < -pixelsInText) { | ||
+ | x = matrix.width(); | ||
+ | if(++pass >= 3) pass = 0; | ||
+ | matrix.setTextColor(colors[pass]); | ||
+ | } | ||
+ | matrix.show(); | ||
+ | delay(100); | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== código para manipular con microfono la intensidad de la matriz de led ==== | ||
+ | |||
+ | <code c++> | ||
+ | |||
+ | #include < | ||
+ | #include < | ||
+ | #define LED_PIN | ||
+ | #define LED_TYPE | ||
+ | #define COLOR_ORDER GRB | ||
+ | #define f false | ||
+ | #define t true | ||
+ | |||
+ | const uint8_t kMatrixWidth | ||
+ | const uint8_t kMatrixHeight = 8; | ||
+ | #define NUM_LEDS (kMatrixWidth * kMatrixHeight) | ||
+ | |||
+ | int BRIGHTNESS = 60; // this is half brightness | ||
+ | CRGB leds[kMatrixWidth * kMatrixHeight]; | ||
+ | |||
+ | #define amarillo CRGB:: | ||
+ | #define black CRGB:: | ||
+ | #define rojo CRGB::Red | ||
+ | #define blue CRGB::Blue | ||
+ | |||
+ | int loop_cnt = 0; | ||
+ | |||
+ | const int sampleWindow = 50; // Sample window width in mS (50 mS = 20Hz) | ||
+ | unsigned int sample; | ||
+ | |||
+ | uint8_t noise[kMatrixWidth][kMatrixHeight]; | ||
+ | |||
+ | void setup() { | ||
+ | Serial.begin(115200); | ||
+ | LEDS.addLeds< | ||
+ | FastLED.setBrightness(BRIGHTNESS); | ||
+ | } | ||
+ | |||
+ | #define ESCENAS 1 | ||
+ | |||
+ | CRGB matrix[ESCENAS][8][8] = { | ||
+ | { | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | {blue, blue, blue,blue, blue, blue, blue,blue}, | ||
+ | }, | ||
+ | }; | ||
+ | |||
+ | void loop() { | ||
+ | for(int i = 0; i< kMatrixHeight; | ||
+ | for(int j = 0; j< kMatrixWidth; | ||
+ | leds[i*kMatrixWidth + j] = matrix[loop_cnt%ESCENAS][i][j]; | ||
+ | } | ||
+ | } | ||
+ | unsigned long startMillis= millis(); | ||
+ | unsigned int peakToPeak = 0; // peak-to-peak level | ||
+ | |||
+ | unsigned int signalMax = 0; | ||
+ | unsigned int signalMin = 1024; | ||
+ | |||
+ | // collect data for 50 mS | ||
+ | while (millis() - startMillis < sampleWindow) | ||
+ | { | ||
+ | sample = analogRead(0); | ||
+ | if (sample < 1024) // toss out spurious readings | ||
+ | { | ||
+ | if (sample > signalMax) | ||
+ | { | ||
+ | signalMax = sample; | ||
+ | } | ||
+ | else if (sample < signalMin) | ||
+ | { | ||
+ | signalMin = sample; | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | | ||
+ | | ||
+ | |||
+ | int cambiarBrillo = map(volts, 0, 5, 0, 100); | ||
+ | Serial.println(cambiarBrillo); | ||
+ | FastLED.show(); | ||
+ | FastLED.setBrightness(cambiarBrillo); | ||
+ | loop_cnt++; | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
proyectos/vestuario_aqa.txt · Última modificación: 2021/10/30 23:38 por kz