#include "thingProperties.h"
void setup() {
Serial.begin(9600);
delay(1500);
initProperties();
ArduinoCloud.begin(ArduinoIoTPreferredConnection);
setDebugMessageLevel(2);
ArduinoCloud.printDebugInfo();
}
void loop() {
ArduinoCloud.update();
// Your code here
random_value = random(0, 500);
delay(500);
}
void onLedSwitchChange() {
// Do something
if(led_switch){
#include <Adafruit_NeoPixel.h> //se utiliza para controlar una tira de LED RGB
#include <Adafruit_GFX.h> //permite dibujar líneas entre dos puntos
#include <Adafruit_NeoMatrix.h> //permite crear pantallas gráficas bidimensionales utilizando los paneles que estamos viendo
#include "RGB.h"
#define PIN 6
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(18,30,PIN, //indico la altura y anchura de lo que voy a ocupar
NEO_MATRIX_BOTTOM + NEO_MATRIX_RIGHT + //indico donde quiero que sea el primer led
NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG, //lineas organizadas de manera vertical, lineas alternas en direccion inversa
NEO_RGB + NEO_KHZ800); //especificamos el tipo de led (RGB), indicamos los kilo hercios
void setup(){
matrix.begin();
matrix.setBrightness(30); //indicamos el brillo
matrix.setTextColor( matrix.Color(255,255,255)); //indicamos el color del texto
matrix.setTextWrap(false); //De forma predeterminada, las líneas largas de texto están configuradas, para "ajustarse" automáticamente a la columna más a la izquierda. Para anular este comportamiento se utiliza 'setTextWrap(false)'.
}
void loop(){
for(int n = 30; n >0; n--){ //es para que el logo se mueva en direccion de derecha a izquierda
drawLogo(n,red); //le damos color al logo
drawLogo2(n+18,green); //con esta lina el logo va a moverse de principio a fin del tablero
delay(10);
matrix.fillScreen(0); //función que limpia toda la pantalla.
}
delay(500);
matrix.setTextColor( matrix.Color(200,200,200) ); //le damos color al texto
scrollText("Heredia"); //hacemos que el cartel scrolee "heredia"
matrix.fillScreen(0);
delay(500);
crossFade(red,green,100,20); //Esos colores aparecerán en ese orden, desapareciendo un color y al siguiente
delay(500);
for(int n = 30; n >0; n--){
drawLogo(n,white);
drawLogo2(n+18,blue);
delay(10);
matrix.fillScreen(0);
}
delay(500);
matrix.setTextColor( matrix.Color(252,0,255));
scrollText("Heredia");
matrix.fillScreen(0);
delay(500);
crossFade(red,blue,100,20);
delay(500);
for(int n = 30; n >0; n--){
drawLogo(n,cyan);
drawLogo2(n+18,orange);
delay(10);
matrix.fillScreen(0);
}
delay(500);
matrix.setTextColor( matrix.Color(215,3,252));
scrollText("Heredia");
matrix.fillScreen(0);
delay(500);
crossFade(cyan,green,100,20);
delay(500);
for(int n = 30; n >0; n--){
drawLogo(n,violet);
drawLogo2(n+18,green);
delay(10);
matrix.fillScreen(0);
}
delay(500);
matrix.setTextColor( matrix.Color(252,186,3));
scrollText("Heredia");
matrix.fillScreen(0);
delay(500);
crossFade(orange,green,100,20);
delay(500);
}
void colorWipe(RGB color, uint8_t wait){ //El patrón ColorWipe pinta un color, un píxel a la vez, a lo largo de la tira. Un uint8 es un entero sin firma y solo puede tener un valor positivo entre 0 y 255
for(uint16_t row=0; row < 8; row++){ //formato numérico de 2 bytes (16 bits), son enteros comprendidos en el rango de 0 a 65,535 (2^16-1)
for(uint16_t column=0; column < 32; column++){
matrix.drawPixel(column, row, matrix.Color(color.r, color.g, color.b));
matrix.show();
delay(wait);
}
}
}
void fadePixel(int x, int y, RGB startColor, RGB endColor, int steps, int wait) {
for(int i = 0; i <= steps; i++)
{
int newR = startColor.r + (endColor.r - startColor.r) * i / steps;
int newG = startColor.g + (endColor.g - startColor.g) * i / steps;
int newB = startColor.b + (endColor.b - startColor.b) * i / steps;
matrix.drawPixel(x, y, matrix.Color(newR, newG, newB));
matrix.show();
delay(wait);
}
}
void crossFade(RGB startColor, RGB endColor, int steps, int wait) {
for(int i = 0; i <= steps; i++)
{
int newR = startColor.r + (endColor.r - startColor.r) * i / steps;
int newG = startColor.g + (endColor.g - startColor.g) * i / steps;
int newB = startColor.b + (endColor.b - startColor.b) * i / steps;
matrix.fillScreen(matrix.Color(newR, newG, newB));
matrix.show();
delay(wait);
}
}
void drawLogo(int a,RGB color){
int logo[8][8] = {
{0,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,0},
{0,1,1,0,0,0,0,0},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{0,1,1,0,0,0,0,0},
{0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
for(int row = 0; row < 8; row++) {
for(int column = 0; column < 8; column++) {
if(logo[row][column]==1){
matrix.drawPixel(column+a, row, matrix.Color(color.r, color.g, color.b));
matrix.show();
}
}
}
}
void drawLogo2(int a,RGB color){
int logo[8][8] = {
{0,0,0,0,0,0,0,0},
{0,0,1,0,0,0,0,0},
{0,1,1,0,0,0,0,0},
{1,1,1,1,1,1,1,1},
{1,1,1,1,1,1,1,1},
{0,1,1,0,0,0,0,0},
{0,0,1,0,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
for(int row = 0; row < 8; row++) {
for(int column = 0; column < 8; column++) {
if(logo[row][column] == 1) {
matrix.drawPixel(column+a, row, matrix.Color(color.r, color.g, color.b));
matrix.show();
}
}
}}
void scrollText(String TextToDisplay){ //string es un tipo de datos que es usado para guardar cadenas de caracteres.
int x = matrix.width ();
int pixelsInText = TextToDisplay.length() * 7; //obtenemos la cantidad de caracteres guardados dentro de una variable String
matrix.setCursor(x,0); //coloca el cursor (y cualquier texto impreso) en cualquier posición de la pantalla.
matrix.print(TextToDisplay);
matrix.show();
while(x > (matrix.width() - pixelsInText)){
matrix.fillScreen(matrix.Color(off.r, off.g, off.b));
matrix.setCursor(--x, 0);
matrix.print(TextToDisplay);
matrix.show();
delay(100);
}
}
}