/*#include <Adafruit_NeoPixel.h>
#include <Adafruit_NeoMatrix.h>
#define PIN         4 //Pino de entrada no fita de leds
#define NUMPIXELS   150 //Quantidde de pixels
#define FALHA     21 // Chave de falha
#define LINHAS 15
#define COLUNAS 10

//Cria um pixel
Adafruit_NeoPixel np1p = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); //np1p pode ser tocado por outra palavra, por exemplo LED
//Cria um Matriz
Adafruit_NeoMatrix matriz = Adafruit_NeoMatrix(COLUNAS, LINHAS, PIN,
                            NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ZIGZAG,
                            NEO_GRB + NEO_KHZ800);


/*
void setup_OFF4() 
{
  pinMode(FALHA, INPUT_PULLUP);
  //Inicializa a serial
  Serial.begin(9600);  
  //Initicializa a bilbioteca NeoPixel
  np1p.begin();
  //Limpa a cor
  np1p.fill(0x000000, 0, 150); //Cor, Primeiro, Quantidade
  //Atualiza o pixel
  np1p.show();
  //Escreve uma cor
  //np1p.setPixelColor(0, 0xAA, 0x0F, 0xF0); //RGB
  //np1p.setPixelColor(1, 0xAA, 0x0F, 0xF0); //RGB
  //np1p.setPixelColor(2, 0xAA, 0x0F, 0xF0); //RGB 
}


void loop_off8() 
{
  //Atualiza o pixel
  np1p.setPixelColor(0, 0xFF, 0x00, 0x00); //RGB - Vermelho
  np1p.setPixelColor(1, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(2, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.show();
  delay(2000);

  np1p.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(1, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(2, 0x00, 0xFF, 0x00); //RGB - Verde
  np1p.show();
  delay(2000);

  //np1p.setPixelColor(0, 0x00, 0x00, 0xFF); //RGB - Azul
  np1p.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(1, 0xFF, 0xFF, 0x00); //RGB - Amarelo
  np1p.setPixelColor(2, 0x000000); //RGB - Apagado
  np1p.show();
  delay(1000);

  while(digitalRead(FALHA)){
  np1p.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(1, 0xFF, 0xFF, 0x00); //RGB - Amarelo
  np1p.setPixelColor(2, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.show();
  delay(500);

  np1p.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(1, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(2, 0x00, 0x00, 0x00); //RGB - Apagado
  np1p.show();
  delay(500);
}

  Serial.println("loop");
}

void loop_off2() // codigo controle da intensidade da COR
{
  int valor = analogRead(35);
  Serial.println(valor);
  valor = valor>>4;

  np1p.setPixelColor(0, valor, 0x00, 0x00); //RGB - Apagado
  np1p.setPixelColor(1, 0x00, valor, 0x00); //RGB - Apagado
  np1p.setPixelColor(2, 0x00, 0x00, valor); //RGB - Apagado
  np1p.show();
  delay(500);
}



void loop_offf7()
{
  for (int i = 0; i < 150; i=i+2)
  {
    np1p.setPixelColor(i,0x0000FF);  //RGB
    np1p.setPixelColor(i+1,0xFF0000); //RGB
    np1p.show();
    delay(30);
  }
  np1p.fill(0x000000, 0, 150); //Cor, Primeiro, Quantidade
  np1p.show();

}

*/
/*
void setup() 
{
  pinMode(FALHA, INPUT_PULLUP);

  //Inicializa a serial
  Serial.begin(9600);  
  //Initicializa a bilbioteca NeoMatrix
  matriz.begin();
  //Limpa a cor
  matriz.fillScreen(0x0000); //Cor, Primeiro, Quantidade
  //Atualiza o pixel
  matriz.show();

}

void loop()
{
  matriz.drawPixel(5,2,0xFF00);
  matriz.drawPixel(2,5,matriz.Color(0x00,0xFF,0xFF));
  matriz.show();
  delay(100);

}

*/
#include <Adafruit_NeoPixel.h>
#include <Adafruit_NeoMatrix.h>
 
#define PIN         4 //Pino de entrada no fita de leds
#define NUMPIXELS   150 //Quantidde de pixels
#define FALHA       21  //Chave de falha
#define LINHAS      15
#define COLUNAS     10
 
// Define as cores básicas
#define BLACK      0x0000
#define WHITE      0xFFFF
#define RED        0xF800
#define GREEN      0x07E0
#define BLUE       0x001F
#define YELLOW     0xFFE0
#define CYAN       0x07FF
#define MAGENTA    0xF81F
#define ORANGE     0xFC00
#define PINK       0xFBE0
#define BROWN      0xA450
#define GRAY       0x8410
#define LIGHT_GRAY 0xC618
#define DARK_GRAY  0x4208
 
// Define outras cores
#define MAROON     0x8000
#define OLIVE      0x8080
#define PURPLE     0x801F
#define TEAL       0x0080
#define NAVY       0x000F
#define SILVER     0xC0C0
#define GOLD        0xFFD7
#define BURGUNDY   0x803F
#define TAN         0xD2B4
#define PEACH       0xFFC0
#define SKYBLUE     0x87CE
#define PLUM        0xDD84
#define VIOLET      0x8E40
 
//Cria um pixel
Adafruit_NeoPixel leds = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
//Cria uma matriz
Adafruit_NeoMatrix matriz = Adafruit_NeoMatrix(COLUNAS, LINHAS, PIN,
                            NEO_MATRIX_TOP + NEO_MATRIX_LEFT + NEO_MATRIX_ZIGZAG,
                            NEO_GRB + NEO_KHZ800 );
 
 
void setup_off1()
{
  pinMode(FALHA, INPUT_PULLUP);
 
  //Inicializa a serial
  Serial.begin(9600);  
  //Initicializa a bilbioteca NeoPixel
  leds.begin();
  //Limpa a cor
  leds.fill(0x000000, 0, 150); //Cor, Primeiro, Quantidade
  //Atualiza o pixel
  leds.show();
  //Escreve uma cor
  //leds.setPixelColor(0, 0xAA, 0x0F, 0xF0); //RGB  
  //leds.setPixelColor(1, 0x00, 0xAA, 0xF0); //RGB  
  //leds.setPixelColor(2, 0xAA, 0x0F, 0xAA); //RGB  
  //leds.show();
}
void loop_off1()
{
  leds.setPixelColor(0, 0xFF, 0x00, 0x00); //RGB - Vermelho
  leds.setPixelColor(1, 0x00, 0x00, 0x00); //RGB - Apagado
  leds.setPixelColor(2, 0x00, 0x00, 0x00); //RGB - Apagado
  leds.show();
  delay(2000);
 
  leds.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
  leds.setPixelColor(1, 0x00, 0x00, 0x00); //RGB - Apagado
  leds.setPixelColor(2, 0x00, 0xFF, 0x00); //RGB - Verde
  leds.show();
  delay(2000);
 
  //np1p.setPixelColor(0, 0x00, 0x00, 0xFF); //RGB - Azul
  leds.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
  leds.setPixelColor(1, 0xFF, 0xFF, 0x00); //RGB - Amarelo
  leds.setPixelColor(2, 0x000000); //RGB - Apagado
  leds.show();
  delay(1000);
 
  while(digitalRead(FALHA))
  {
    leds.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
    leds.setPixelColor(1, 0xFF, 0xFF, 0x00); //RGB - Amarelo
    leds.setPixelColor(2, 0x00, 0x00, 0x00); //RGB - Apagado
    leds.show();
    delay(500);
 
    leds.setPixelColor(0, 0x00, 0x00, 0x00); //RGB - Apagado
    leds.setPixelColor(1, 0x00, 0x00, 0x00); //RGB - Apagado
    leds.setPixelColor(2, 0x00, 0x00, 0x00); //RGB - Apagado
    leds.show();
    delay(500);
  }
 
  Serial.println("loop");
}
 
void loop_off2()
{
  int valor = analogRead(35);
  Serial.println(valor);

 
  leds.setPixelColor(0, valor, 0x00, 0x00); //RGB - Vermelho
  leds.setPixelColor(1, 0x00, valor, 0x00); //RGB - Verde
  leds.setPixelColor(2, 0x00, 0x00, valor); //RGB - Azul
  leds.show();
  delay(20);
}
 
void loop_off3()
{
  for(int i = 0; i < 150; i=i+2)
  {
    leds.setPixelColor(i, 0x0000FF); //RGB  
    leds.setPixelColor(i+1, 0xFF0000); //RGB  
    leds.show();
    delay(30);
  }
  leds.fill(0x000000, 0, 150); //Cor, Primeiro, Quantidade
  leds.show();
}
 
void setup()
{
  pinMode(FALHA, INPUT_PULLUP);
 
  //Inicializa a serial
  Serial.begin(9600);  
  //Initicializa a bilbioteca NeoMatrix
  matriz.begin();
  //Limpa a cor
  matriz.fillScreen(0x0000); //Cor
  //Atualiza o pixel
  matriz.show();
}
 
void loop()
{
  //matriz.drawPixel(5,2,0xFF00);
  //matriz.drawPixel(2,5,matriz.Color(0x00,0xFF,0xFF));
  //matriz.drawPixel(3,5,ORANGE);
  //matriz.show();
    matriz.fillScreen(0x0000); //Cor
  draw_smile();
  matriz.show();
  delay(100);
}
 
// Define a função para acender um LED
void led_on(int x, int y)
{
  matriz.drawPixel(x,y,ORANGE);
}
 
// Define a função para apagar um LED
void led_off(int x, int y)
{
  matriz.drawPixel(x,y,0x0000);
}
 
// Desenha o sorriso na matriz de LEDs
void draw_smile() {

  int valor = analogRead(35);
  Serial.println(valor);

    if (valor <1300 )
  {//--------------------------------------------------------------------------
	//OLHOS
	led_on(1,4);
	led_on(2,4);
	led_on(3,4);
	led_on(6,4);
	led_on(7,4);
	led_on(8,4);

	//BOCA1
	led_on(2,10);
	led_on(3,10);
	led_on(4,10);
	led_on(5,10);
	led_on(6,10);
	led_on(7,10);


  }//--------------------------------------------------------------------------
    else if (valor < 2600)
  {//--------------------------------------------------------------------------
	//OLHOS
	led_on(1,4);
	led_on(2,4);
	led_on(3,4);
	led_on(6,4);
	led_on(7,4);
	led_on(8,4);

	//BOCA2
	led_on(2,10);
	led_on(3,10);
	led_on(4,10);
	led_on(5,10);
	led_on(6,10);
	led_on(7,10);
	led_on(1,9);
	led_on(8,9);


  }//--------------------------------------------------------------------------
     else
  {//--------------------------------------------------------------------------
  //OLHOS
	led_on(1,4);
	led_on(2,4);
	led_on(3,4);
	led_on(6,4);
	led_on(7,4);
	led_on(8,4);

	//BOCA3
	led_on(2,10);
	led_on(3,10);
	led_on(4,10);
	led_on(5,10);
	led_on(6,10);
	led_on(7,10);
	led_on(1,9);
	led_on(8,9);
	led_on(1,8);
	led_on(8,8);

  }//--------------------------------------------------------------------------


}

//Exercicio add uma entrada analogica e um potenciometro para alterar a boca, para abrir e fechar ela
//conforme variação do potenciometro