Herramientas de usuario

Herramientas del sitio


proyectos:vestuario_aqa

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anteriorRevisión previa
Próxima revisiónAmbos lados, revisión siguiente
proyectos:vestuario_aqa [2019/12/04 02:35] – [Código para el proyecto del corazon] brolinproyectos:vestuario_aqa [2019/12/06 06:04] – [Leds con plantower] kz
Línea 479: Línea 479:
 } }
 </code> </code>
 +
 +==== Leds + plantower: cambia color segun lectura del sensor ====
 +
 +platformio.ini
 +
 +<code c++>
 +[env:d1_mini]
 +platform = espressif8266
 +board = d1_mini
 +framework = arduino
 +lib_deps = FastLED, PMS Library, https://github.com/DedeHai/FastLEDPainter.git, Time
 +
 +</code>
 +
 +main.cpp
 +<code>
 +#include "Arduino.h"
 +#include <SoftwareSerial.h>
 +#include "PMS.h"
 +#include <FastLED.h>
 +#include <FastLEDPainter.h>
 +#include <Time.h>
 +
 +#define P_TOWER_RX D2
 +#define P_TOWER_TX 6
 +
 +// Plantower
 +SoftwareSerial plantower_serial(P_TOWER_RX, P_TOWER_TX);
 +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);  //create canvas, linked to the FastLED library (canvas must be created before the brush)
 +FastLEDPainterBrush pixelbrush = FastLEDPainterBrush(&pixelcanvas); //crete brush, linked to the canvas to paint to
 +
 +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<LED_TYPE, DATA_PIN, CLK_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection(TypicalLEDStrip);
 +
 +  plantower_serial.begin(9600);
 +  Serial.begin(115200);
 +  Serial.println(" ");
 +  Serial.println(F("FastLED Painter simple demo"));
 +
 +  //check if ram allocation of brushes and canvases was successful (painting will not work if unsuccessful, program should still run though)
 +  //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("canvas allocation problem (out of ram, reduce number of pixels)"));
 +  else
 +    Serial.println(F("canvas allocation ok"));
 +
 +  if (pixelbrush.isvalid() == false)
 +    Serial.println(F("brush allocation problem"));
 +  else
 +    Serial.println(F("brush allocation ok"));
 +
 +  //initialize the animation, this is where the magic happens:
 +  brushcolor.h = color; //zero is red in HSV. Library uses 0-255 instead of 0-360 for colors (see https://en.wikipedia.org/wiki/HSL_and_HSV)
 +  brushcolor.s = 255;   //full color saturation
 +  brushcolor.v = 130;   //about half the full brightness
 +
 +  pixelbrush.setSpeed(speed);      //set the brush movement speed (4096 means to move one pixel per update)
 +  pixelbrush.setColor(brushcolor); //set the brush color
 +  pixelbrush.setFadeSpeed(130);    //fading speed of pixels (255 is maximum fading speed)
 +  pixelbrush.setFadeout(true);     //do brightness fadeout after painting
 +  pixelbrush.setBounce(true);      //bounce the brush when it reaches the end of the strip
 +
 +  // set pointer
 +  dir_pm2_5 = &pm2_5;
 +
 +  // setup time
 +  setTime(time_hours, time_minutes, time_seconds, 30, 11, 19);
 +}
 +
 +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("Leyendo pm 2.5 "); 
 +    Serial.println(*dir_pm2_5);
 +  }
 +  else {
 +    Serial.print("durmiendo. Ultimo valor ");
 +    Serial.println(*dir_pm2_5); 
 +    pms.sleep();
 +    animateLeds();
 +  }
 +  // Serial.print("sec: ");
 +  // Serial.println(sec);
 +}
 +
 +void animateLeds(){
 +  // Serial.println("Encendiendo leds");
 +  FastLED.clear();        //always need to clear the pixels, the canvas' colors will be added to whatever is on the pixels before calling a canvas update
 +  pixelbrush.paint();     //paint the brush to the canvas (and update the brush, i.e. move it a little)
 +  pixelcanvas.transfer(); //transfer the canvas to the LEDs
 +  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);
 +  }
 +}
 +</code>
 +
  
proyectos/vestuario_aqa.txt · Última modificación: 2021/10/30 23:38 por kz