#define NUM_SIGNALS 9
#define NUM_ENTRIES 20000// Total entries from the CSV file
// Storing time values in program memory (PROGMEM)
const unsigned long time_values[NUM_ENTRIES] PROGMEM = {
464, 1176, 1892, 2616, 3336, 4070, 4460, 4797, 4969, 5541, 6274, 6666, 7025, 7407, 7760, 8515, 9247, 9987, 10761, 15681, 16477, 17161, 17876, 18567, 19284, 19975
// Include all time values in microseconds here...
};
// Storing signal values in program memory (PROGMEM)
const int signals[NUM_SIGNALS][NUM_ENTRIES] PROGMEM = {
{0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1}, // Crank Signal
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_1
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_2
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_3
{0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_4
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_5
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_6
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}, // ECM_Sig_7
{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1} // ECM_Sig_8
// Add all signal values here...
};
int signal_pins[NUM_SIGNALS] = {2, 13, 14, 27, 26, 25, 33, 32,12}; // Digital pins
void setup() {
// Initialize the digital pins as outputs
for (int i = 0; i < NUM_SIGNALS; i++) {
pinMode(signal_pins[i], OUTPUT);
}
}
void loop() {
unsigned long start_time = micros(); // Start timing
for (int i = 0; i < NUM_ENTRIES; i++) {
// Wait until the correct time
while (micros() - start_time < pgm_read_dword(&(time_values[i])));
// Output the signals
for (int j = 0; j < NUM_SIGNALS; j++) {
digitalWrite(signal_pins[j], pgm_read_word(&(signals[j][i])));
}
}
}