unsignedlong High2LowRec[50];
unsignedlong Low2HighRec[50];
unsignedlong SerialSignal[50];
//intl2h_counter=0;
//inth2l_counter=0;
int signal_counter=-1;
constint State_Wait=1;
constint State_Record=2;
constint State_Output=3;
int ledPin=13;
int signalPin=2;
int current_state=0;
char cInput;
int sensorOldState;
int sensorState;
unsignedlong startTime;
booleanh2l_detected=false;
void setup()
{
Serial.begin(115200);
pinMode(ledPin,OUTPUT);
pinMode(signalPin,INPUT);
digitalWrite(ledPin,HIGH);
current_state=State_Wait;
}
void loop()
{
switch(current_state)
{
case1://Wait state
if(Serial.available()>0)
{
cInput=Serial.read();
switch(cInput)
{
case's':
current_state=State_Record;
startTime=millis();
digitalWrite(ledPin,LOW);
sensorState=digitalRead(signalPin);
//delayMicroseconds(200);
signal_counter=-1;
break;
case'p':
current_state=State_Output;
digitalWrite(ledPin,LOW);
Serial.flush();
break;
}
}
break;
case2://record state
if(Serial.available()>0)
{
signal_counter++;
if(signal_counter>=50)
{
current_state=State_Wait;
digitalWrite(ledPin,HIGH);
break;
}
SerialSignal[signal_counter]=millis()-startTime;
h2l_detected=false;
cInput=Serial.read();
}
sensorOldState=sensorState;
sensorState=digitalRead(signalPin);
if(sensorState!=sensorOldState &&signal_counter>=0)//signal changed
{
if(sensorState==HIGH)
{
Low2HighRec[signal_counter]=millis()-startTime;
}
if(sensorState==LOW &&!h2l_detected)
{
High2LowRec[signal_counter]=millis()-startTime;
h2l_detected=true;
}
//sensorOldValue=sensorValue;
//delayMicroseconds(800);
}
break;
case3://output state
Serial.print("Start time is");
Serial.println(startTime);
Serial.println("SerialSignal, High2LowTime, Low2HighTime");
for(int i=0;i<50;i++)
{
Serial.print(SerialSignal[i]);
SerialSignal[i]=0;
Serial.print(",");
Serial.print(High2LowRec[i]);
High2LowRec[i]=0;
Serial.print(",");
Serial.println(Low2HighRec[i]);
Low2HighRec[i]=0;
}
Serial.flush();
//counter=-1;
digitalWrite(ledPin,HIGH);
current_state=State_Wait;
break;
default:
;
}
}
unsignedlong Low2HighRec[50];
unsignedlong SerialSignal[50];
//intl2h_counter=0;
//inth2l_counter=0;
int signal_counter=-1;
constint State_Wait=1;
constint State_Record=2;
constint State_Output=3;
int ledPin=13;
int signalPin=2;
int current_state=0;
char cInput;
int sensorOldState;
int sensorState;
unsignedlong startTime;
booleanh2l_detected=false;
void setup()
{
Serial.begin(115200);
pinMode(ledPin,OUTPUT);
pinMode(signalPin,INPUT);
digitalWrite(ledPin,HIGH);
current_state=State_Wait;
}
void loop()
{
switch(current_state)
{
case1://Wait state
if(Serial.available()>0)
{
cInput=Serial.read();
switch(cInput)
{
case's':
current_state=State_Record;
startTime=millis();
digitalWrite(ledPin,LOW);
sensorState=digitalRead(signalPin);
//delayMicroseconds(200);
signal_counter=-1;
break;
case'p':
current_state=State_Output;
digitalWrite(ledPin,LOW);
Serial.flush();
break;
}
}
break;
case2://record state
if(Serial.available()>0)
{
signal_counter++;
if(signal_counter>=50)
{
current_state=State_Wait;
digitalWrite(ledPin,HIGH);
break;
}
SerialSignal[signal_counter]=millis()-startTime;
h2l_detected=false;
cInput=Serial.read();
}
sensorOldState=sensorState;
sensorState=digitalRead(signalPin);
if(sensorState!=sensorOldState &&signal_counter>=0)//signal changed
{
if(sensorState==HIGH)
{
Low2HighRec[signal_counter]=millis()-startTime;
}
if(sensorState==LOW &&!h2l_detected)
{
High2LowRec[signal_counter]=millis()-startTime;
h2l_detected=true;
}
//sensorOldValue=sensorValue;
//delayMicroseconds(800);
}
break;
case3://output state
Serial.print("Start time is");
Serial.println(startTime);
Serial.println("SerialSignal, High2LowTime, Low2HighTime");
for(int i=0;i<50;i++)
{
Serial.print(SerialSignal[i]);
SerialSignal[i]=0;
Serial.print(",");
Serial.print(High2LowRec[i]);
High2LowRec[i]=0;
Serial.print(",");
Serial.println(Low2HighRec[i]);
Low2HighRec[i]=0;
}
Serial.flush();
//counter=-1;
digitalWrite(ledPin,HIGH);
current_state=State_Wait;
break;
default:
;
}
}