2020-11-15 01:44:25 +03:00
|
|
|
#include "items/vImpulsOut.h"
|
2020-11-01 16:50:44 +03:00
|
|
|
|
|
|
|
|
#include <Arduino.h>
|
2020-11-02 01:21:51 +03:00
|
|
|
#include "BufferExecute.h"
|
2020-11-01 16:50:44 +03:00
|
|
|
#include "Class/LineParsing.h"
|
|
|
|
|
#include "Global.h"
|
2020-11-04 23:48:21 +03:00
|
|
|
#include "BufferExecute.h"
|
2020-11-01 16:50:44 +03:00
|
|
|
|
2020-11-02 01:21:51 +03:00
|
|
|
ImpulsOutClass::ImpulsOutClass(unsigned int impulsPin) {
|
2020-11-01 16:50:44 +03:00
|
|
|
_impulsPin = impulsPin;
|
|
|
|
|
pinMode(impulsPin, OUTPUT);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ImpulsOutClass::~ImpulsOutClass() {}
|
|
|
|
|
|
2020-11-02 01:21:51 +03:00
|
|
|
void ImpulsOutClass::execute(unsigned long impulsPeriod, unsigned int impulsCount) {
|
|
|
|
|
_impulsPeriod = impulsPeriod;
|
|
|
|
|
_impulsCount = impulsCount * 2;
|
2020-11-01 16:50:44 +03:00
|
|
|
_impulsCountBuf = _impulsCount;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ImpulsOutClass::loop() {
|
|
|
|
|
currentMillis = millis();
|
|
|
|
|
unsigned long difference = currentMillis - prevMillis;
|
|
|
|
|
if (_impulsCountBuf > 0) {
|
|
|
|
|
if (difference > _impulsPeriod) {
|
|
|
|
|
_impulsCountBuf--;
|
|
|
|
|
prevMillis = millis();
|
|
|
|
|
yield();
|
|
|
|
|
digitalWrite(_impulsPin, !digitalRead(_impulsPin));
|
|
|
|
|
yield();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (_impulsCountBuf <= 0) {
|
|
|
|
|
digitalWrite(_impulsPin, LOW);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MyImpulsOutVector* myImpulsOut = nullptr;
|
|
|
|
|
|
2020-11-02 01:21:51 +03:00
|
|
|
void impuls() {
|
|
|
|
|
myLineParsing.update();
|
|
|
|
|
String key = myLineParsing.gkey();
|
|
|
|
|
String pin = myLineParsing.gpin();
|
|
|
|
|
myLineParsing.clear();
|
|
|
|
|
|
2020-11-13 17:13:50 +03:00
|
|
|
impuls_EnterCounter++;
|
|
|
|
|
addKey(key, impuls_KeyList, impuls_EnterCounter);
|
2020-11-02 01:21:51 +03:00
|
|
|
|
|
|
|
|
static bool firstTime = true;
|
|
|
|
|
if (firstTime) myImpulsOut = new MyImpulsOutVector();
|
|
|
|
|
firstTime = false;
|
|
|
|
|
myImpulsOut->push_back(ImpulsOutClass(pin.toInt()));
|
|
|
|
|
|
|
|
|
|
sCmd.addCommand(key.c_str(), impulsExecute);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void impulsExecute() {
|
|
|
|
|
String key = sCmd.order();
|
|
|
|
|
String impulsPeriod = sCmd.next();
|
|
|
|
|
String impulsCount = sCmd.next();
|
|
|
|
|
|
2020-11-13 17:13:50 +03:00
|
|
|
int number = getKeyNum(key, impuls_KeyList);
|
2020-11-02 01:21:51 +03:00
|
|
|
|
|
|
|
|
if (myImpulsOut != nullptr) {
|
|
|
|
|
if (number != -1) {
|
|
|
|
|
myImpulsOut->at(number).execute(impulsPeriod.toInt(), impulsCount.toInt());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|