With suggestions from other members I have been working on cleaning up my code and utilizing functions as well. Still trying to figure out how to get the data coming in from the nextion to be more reliable. I'd like to put the function call for my page 2 textboxes/button into the setup function so that it only runs on reset because those variables will not change very often. I'm a little confused on how to break up the code I'm using to do that so I will include that as well. Unless someone has a more streamlined way of doing it.
#include <SoftwareSerial.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <AccelStepper.h>
#define motorPin1 4
#define motorPin2 6
#define motorPin3 7
#define motorPin4 8
#define HALFSTEP 8
#define ONE_WIRE_BUS 12
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
AccelStepper stepper1(HALFSTEP, motorPin1, motorPin3, motorPin2, motorPin4);
SoftwareSerial mySerial(10, 11);
int tps;
int tpsprev;
float O2;
float O2new;
float O2set;
float O2voltage;
int O2heat;
int ets;
const int dataIN = 13;
unsigned long prevmillis;
unsigned long duration;
int rpm;
boolean currentstate;
boolean prevstate;
float enrich;
float accel;
float etsenrich;
float intemp;
const int injpin = 5;
float pw;
int fuelstan;
int reqfuel;
int ve;
int injopen;
float hourmeter;
float minutes;
int oc;
int gc;
String message;
int numMessages;
int numBytes;
int endBytes;
byte inByte;
byte pageNum;
byte buttonNum;
void setup() {
stepper1.setMaxSpeed(1500); //THROTTLE STEPPER SETTINGS
stepper1.setAcceleration(1500);
pinMode(A0, INPUT); //O2 SENSOR
pinMode(dataIN, INPUT); //IR SENSOR
prevmillis = 0; //RPM VARIABLE INITIALIZATION
prevstate = LOW;
pinMode(2, OUTPUT); //INJECTOR
pinMode(5, OUTPUT); //START RELAY
Serial.begin(57600);
while (!Serial) {
;
}
Serial.println("Serial On");
mySerial.begin(9600); //SCREEN SERIAL
numMessages, endBytes = 0;
pageNum, buttonNum = 255;
}
void loop() {
HMI_display_rpm(rpm);
HMI_display_ets(ets);
HMI_display_O2new(O2new);
HMI_display_minutes(minutes);
HMI_display_warning_oc();
HMI_display_warning_gc();
HOURmeter();
IRsensor();
O2sensor();
ETsensor();
TPsensor();
Serial.print("TPS: "); //DEBUGGING
Serial.println(tps);
Serial.print("O2 SET: ");
Serial.println(O2set);
Serial.print("O2 HEAT: ");
Serial.println(O2heat);
Serial.print("FUEL START ANGLE: ");
Serial.println(fuelstan);
Serial.print("REQUIRED FUEL: ");
Serial.println(reqfuel);
Serial.print("VE %: ");
Serial.println(ve);
Serial.print("INJECOR OPEN TIME: ");
Serial.println(injopen);
Serial.print("inj pw = ");
Serial.println(pw);
}
void HOURmeter() { //HOURMETER
hourmeter = millis();
minutes = hourmeter / 3600000;
}
void IRsensor() { //RPM MEASUREMENT
rpm = 0;
currentstate = digitalRead(dataIN);
if ( prevstate != currentstate)
{
if ( currentstate == HIGH )
{
duration = (millis() - prevmillis);
rpm = (60000000 / duration);
prevmillis = millis();
}
}
prevstate = currentstate;
}
void O2sensor() {
analogReference(INTERNAL); //INTERNAL REFERENCE ACCURACY FOR O2 SENSOR
O2 = analogRead(A0); //READ O2 SENSOR
O2voltage = O2 * (1.1 / 1023);
O2new = map(O2voltage, 0.100, 1.100, 17.00, 13.00); //MAP O2 VALUE
analogReference(DEFAULT); //RETURN ANALOG REFERENCE TO DEFAULT
O2set = O2set / 10;
}
void HMI_display_warning_oc() {
if (minutes >= 50) //OIL CHANGE WARNING MESSAGE
{
HMI_display_oc(oc);
}
}
void HMI_display_warning_gc() {
if (minutes >= 500) //GALLEY CHANGE WARNING MESSAGE
{
HMI_display_gc(gc);
}
}
void ETsensor() {
sensors.requestTemperatures();
ets = sensors.getTempFByIndex(0); //READ ETS
}
void TPsensor() {
tpsprev = tps;
etsenrich = intemp / ets; //TEMP ENRICHMENT
enrich = (O2 / O2set) * (etsenrich); //GAMMA E
accel = tps / tpsprev; //ACCELERATION RATIO
pw = reqfuel * ve * enrich * accel + injopen; //INJ PW EQUATION
if (millis() <= millis() + pw) { //START COUNTING FOR INJ PW
digitalWrite(injpin, HIGH); //SET INJECTOR PIN HIGH FOR DURATION OF PW
}
digitalWrite(injpin, LOW); //SET INJECTOR PIN BACK TO LOW
}
void HMI_display_rpm(int rpm) { //RPM SCREEN FUNCTION
mySerial.print(F("page1.n2.val=\""));
mySerial.print(rpm);
mySerial.print(F("\""));
mySerial.write(0xff);
mySerial.write(0xff);
mySerial.write(0xff);
}
void HMI_display_ets(int ets) { //ETS SCREEN FUNCTION
mySerial.print(F("page1.n6.val=\""));
mySerial.print(ets);
mySerial.print(F("\""));
mySerial.write(0xff);
mySerial.write(0xff);
mySerial.write(0xff);
}
void HMI_display_O2new(float O2new) { //O2 SCREEN FUNCTION
mySerial.print(F("page1.t1.txt=\""));
mySerial.print(O2new);
mySerial.print(F("\""));
mySerial.write(0xff);
mySerial.write(0xff);
mySerial.write(0xff);
}
void HMI_display_minutes(float minutes) { //HOURMETER SCREEN FUNCTION
mySerial.print(F("page1.t2.txt=\""));
mySerial.print(minutes);
mySerial.print(F("\""));
mySerial.write(0xff);
mySerial.write(0xff);
mySerial.write(0xff);
}
void HMI_display_oc(int oc) { //OIL CHANGE DUE SCREEN FUNCTION
mySerial.print(F("page1.t5.txt=\""));
mySerial.print(F("OIL CHANGE DUE"));
mySerial.print(oc);
mySerial.print(F("\""));
mySerial.write(0xff);
mySerial.write(0xff);
mySerial.write(0xff);
}
void HMI_display_gc(int gc) { //OIL GALLEY CHANGE SCREEN FUNCTION
mySerial.print(F("page1.t5.txt=\""));
mySerial.print(F("GALLEY CHANGE DUE"));
mySerial.print(gc);
mySerial.print(F("\""));
mySerial.write(0xff);
mySerial.write(0xff);
mySerial.write(0xff);
}