#include <Thread.h>
#include <StaticThreadController.h>

bool ispressed = false;
bool go = true;

Thread a = Thread();
Thread b = Thread();
Thread c = Thread();

StaticThreadController<3> controller (&a, &b, &c);

// "Game" Thread
void toggleLed()
{
  digitalWrite(8, ispressed);
}

// "Sensor" Thread
void readSensor()
{
  ispressed = digitalRead(2);
}

// "Bluetooth" Thread
void comms()
{
  while(Serial.available() > 0)
  { 
    if(Serial.read() == 's') go = false;
  }  
}


void setup() {
  pinMode(8, OUTPUT);
  pinMode(2, INPUT);
  pinMode(7, OUTPUT);
  
  Serial.begin(9600);
  Serial.setTimeout(0);
  
  a.onRun(toggleLed);
  b.onRun(readSensor);
  c.onRun(comms);

  Serial.println("Usar \"Threads\" no arduino pode ser útil quando manipulamos telas, sensores e módulos de comunicação ao mesmo tempo, esse código (Assim como o wokwi) poderia ter sido útil em meu jogo no Projeto Integrador da primeira fase do curso de Engenharia Eletrônica.\nEnvie 's' no console para parar o programa\nAlterne a posição do switch para ver o led da esquerda acender.");
}

void loop() {
  if(go)
    controller.run();   
  else
    {
      digitalWrite(7, true);
      digitalWrite(8, false);
    }
}