Arcoíris com a Particle Photon

Este post faz parte da série Particle Photon

No post anterior mostrei como fazer o primeiro programa na placa Particle Photon. Neste post iremos aprender como alternar ciclicamente pelas cores do arcoíris usando o LED RGB embutido na Particle Photon. Esse LED é usando pela Photon para indicar o estado do sistema e não possui nenhum método público na API para que sua cor seja alterada via código. No entanto, a ferramenta linha de comando particle possui uma opção chamada nyan que faz com que a Photon alterne ciclicamente pelas cores do arcoíris.

Caso você queira testar, execute o seguinte comando:

particle cloud nyan

Esse comando indica que, apesar de não haver método publico na API, ainda assim podemos mudar a cor do LED RGB via código. No arquivo system_cloud_internal.cpp do código do firmware da Photon, podemos encontrar o método LED_Signaling_Override, o qual é chamado durante a execução do comando nyan.

O código abaixo mostra como esse método pode ser usado em nossos próprios programas. O programa lê o estado de um botão que, quando pressionado, fará com que a Photon inicie a sequência de cores do arcoíris. Você pode baixar o código completo no Github através do seguinte link: Particle Photon vomitando arcoíris

// Conecte o botão ao pino D2 de sua Photon.
int buttonPin = D2;
int buttonState;

unsigned long ledSignalingCounter;
unsigned long now;

boolean nyan;

// Valores para as cores do arcoíris em RGB.
// VIBGYOR = Violeta Indigo Azul Verde Amarelo Laranja Vermelho
const uint32_t VIBGYOR_Colors[] = {
  0xEE82EE, 0x4B0082, 0x0000FF, 0x00FF00, 0xFFFF00, 0xFFA500, 0xFF0000
};
const int VIBGYOR_Size = sizeof (VIBGYOR_Colors) / sizeof (uint32_t);
int VIBGYOR_Index;

void setup() {
  pinMode(buttonPin, INPUT);
}

// Código copiado de system/src/system_cloud_internal.cpp (firmware da Photon)
// O arquivo pode ser encontrado em:
// https://github.com/spark/firmware/blob/d2b55ee9a151c4cbc63ede84ec2a89bbedf3c69e/system/src/system_cloud_internal.cpp
/* This function MUST NOT BlOCK!
 * It will be executed every 1ms if LED_Signaling_Start() is called
 * and stopped as soon as LED_Signaling_Stop() is called */
void LED_Signaling_Override(void) {
  LED_SetSignalingColor(VIBGYOR_Colors[VIBGYOR_Index]);
  LED_On(LED_RGB);
  ++VIBGYOR_Index;
  if (VIBGYOR_Index >= VIBGYOR_Size) {
    VIBGYOR_Index = 0;
  }
}

void setNyanMode(int _nyan) {
  // Retorna caso haja alguma mudança.
  if(nyan == _nyan) {
    return;
  }

  nyan = _nyan;

  if(nyan == true) {
    // Permite que o usuário altere manualmente a cor do LED RGB.
    LED_Signaling_Start();
    ledSignalingCounter = now;
  } else {
    // Retorna para o estado padrão do LED RGB.
    LED_Signaling_Stop();
  }
}

void loop() {
  now = millis();

  buttonState = digitalRead(buttonPin);

  // Enquanto o botão estiver pressionado, executa a sequencia de cores do arcoíris
  if(buttonState == HIGH) {
    setNyanMode(true);
  } else {
    setNyanMode(false);
  }

  if(nyan) {
    // Enquanto o bootão estiver pressionado, atualiza a cor do LED RGB a cada 100ms
    if(now - ledSignalingCounter >= 100) {
      LED_Signaling_Override();
      ledSignalingCounter = now;
    }
  }

Particle Photon

Primeiro programa na Particle Photon
Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.
Comentários:
Notificações
Notificar
0 Comentários
recentes
antigos mais votados
Inline Feedbacks
View all comments
Home » Maker » Arcoíris com a Particle Photon

EM DESTAQUE

WEBINARS

VEJA TAMBÉM

JUNTE-SE HOJE À COMUNIDADE EMBARCADOS

Talvez você goste: