126 lines
2.1 KiB
C++
126 lines
2.1 KiB
C++
|
|
#include "PinControl.h"
|
|
|
|
static PinControl *instance;
|
|
|
|
PinControl *PinControl::getInstance()
|
|
{
|
|
if (!instance)
|
|
{
|
|
instance = new PinControl();
|
|
};
|
|
return instance;
|
|
};
|
|
|
|
PinControl::PinControl()
|
|
{
|
|
for (int pinNr = 1; pinNr <= 52; pinNr++)
|
|
{
|
|
pinWritten[0][pinNr] = false;
|
|
pinWritten[1][pinNr] = false;
|
|
}
|
|
|
|
}
|
|
|
|
int PinControl::setMode(int pinNr, int mode)
|
|
{
|
|
pinMode(pinNr, mode);
|
|
return 0;
|
|
}
|
|
|
|
int PinControl::writeValue(int pinNr, int value, int mode)
|
|
{
|
|
if (pinNr > 0 && pinNr <= 52 && (mode == 0 || mode == 1))
|
|
{
|
|
pinWritten[mode][pinNr] = true;
|
|
|
|
if (mode == 0)
|
|
{
|
|
digitalWrite(pinNr, value);
|
|
return 0;
|
|
}
|
|
if (mode == 1)
|
|
{
|
|
analogWrite(pinNr, value);
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
// Set all pins that were once used for writing to zero
|
|
void PinControl::resetPinsUsed()
|
|
{
|
|
for (int pinNr = 1; pinNr <= 52; pinNr++)
|
|
{
|
|
if (pinWritten[0][pinNr])
|
|
{
|
|
Serial.print("R99");
|
|
Serial.print(" resetting digital pin");
|
|
Serial.print(pinNr);
|
|
Serial.print("\r\n");
|
|
|
|
digitalWrite(pinNr, false);
|
|
readValue(pinNr, 0);
|
|
pinWritten[0][pinNr] = false;
|
|
}
|
|
if (pinWritten[1][pinNr])
|
|
{
|
|
Serial.print("R99");
|
|
Serial.print(" resetting analog pin");
|
|
Serial.print(pinNr);
|
|
Serial.print("\r\n");
|
|
|
|
analogWrite(pinNr, 0);
|
|
readValue(pinNr, 1);
|
|
pinWritten[1][pinNr] = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
int PinControl::readValue(int pinNr, int mode)
|
|
{
|
|
|
|
int value = 0;
|
|
|
|
if (mode == 0)
|
|
{
|
|
if (digitalRead(pinNr) == 1)
|
|
{
|
|
value = 1;
|
|
}
|
|
}
|
|
if (mode == 1)
|
|
{
|
|
value = analogRead(pinNr);
|
|
}
|
|
|
|
if (mode == 0 || mode == 1)
|
|
{
|
|
|
|
Serial.print("R41");
|
|
Serial.print(" ");
|
|
Serial.print("P");
|
|
Serial.print(pinNr);
|
|
Serial.print(" ");
|
|
Serial.print("V");
|
|
Serial.print(value);
|
|
//Serial.print("\r\n");
|
|
CurrentState::getInstance()->printQAndNewLine();
|
|
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
int PinControl::writePulse(int pinNr, int valueOne, int valueTwo, long time, int mode)
|
|
{
|
|
writeValue(pinNr, valueOne, mode);
|
|
delay(time);
|
|
writeValue(pinNr, valueTwo, mode);
|
|
return 0;
|
|
}
|