#include "Scarabi.h" Scarabi* Scarabi::_singleton = 0; Scarabi* Scarabi::singleton() { if (_singleton==0) _singleton = new Scarabi(); return _singleton; } Scarabi::Scarabi() : color(colorBlue), timerMatchStarted(0), isRunning(false) { Serial.println("Skarabi created !"); Serial.println("First it was Scarabi, but now it's Skarabi..."); Move::singleton(); pinMode(PIN_TIRETTE, INPUT); matchTimeInfo = TIME_INFO; } Scarabi::~Scarabi() { //dtor } void Scarabi::update() { // Call in the loop function currentTimer = micros(); if (isRunning) { if (currentTimer - timerMatchStarted >= TIME_MATCH - 1000000) { isRunning = false; Move::singleton()->stop(); Serial.print("END OF THE MATCH !!!"); } else { Move::singleton()->update(micros() - previousTimer); if (currentTimer - timerMatchStarted >= matchTimeInfo - 1000) { Serial.print((TIME_MATCH - currentTimer + timerMatchStarted)/1000000); Serial.print(" seconds left until the end of the match !\n"); matchTimeInfo += TIME_INFO; } } } previousTimer = micros(); } void Scarabi::waitTirette(bool avoid) { Serial.println("Waiting for the tirette to be removed..."); // Waits for the tirette to be removed bool tiretteWasPresent = false; if (!avoid) while(true) { if (digitalRead(PIN_TIRETTE)==LOW && tiretteWasPresent) break; if (digitalRead(PIN_TIRETTE)==HIGH) tiretteWasPresent = true; } Serial.println("Tirette removed !"); // Beginning of the match timer timerMatchStarted = micros(); isRunning = true; // Departure area if(digitalRead(PIN_COLOR)==HIGH) color = colorBlue; else color = colorRed; // Debug //Move::singleton()->startAction(MOVE_FORWARD); } Scarabi::sideColor Scarabi::getColor() { return color; } void Scarabi::finalStop() { isRunning = false; }