From 2dd56f6315b30d343dfeb6d90da15ad700389111 Mon Sep 17 00:00:00 2001 From: Cynopolis Date: Wed, 3 Nov 2021 21:15:15 -0500 Subject: [PATCH] Updated the single pulse mode Enabling single pulse mode now changes the status screen on the LCD display. Single pulse mode also no longer uses interrupts, and instead uses HEAVILY debounced inputs for enable, arm, and fire. --- LiquidCrystal_I2C-master.zip | Bin 20720 -> 9209 bytes src/main.cpp | 172 ++++++++++++++++++++++++----------- 2 files changed, 119 insertions(+), 53 deletions(-) diff --git a/LiquidCrystal_I2C-master.zip b/LiquidCrystal_I2C-master.zip index 81ae275f3131d933fc53bd787445df15c5109eb8..c28a9079372b4eb9753537116849072676e4da23 100644 GIT binary patch literal 9209 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 K8kw*fvi=VN_H#M_ literal 20720 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 100){ - is_armed = !is_armed; - // Toggle the armed indicator light - digitalWrite(armed_indicator_pin, !digitalRead(armed_indicator_pin)); - digitalWrite(fired_indicator_pin, LOW); - armed_debounce = millis(); - } -} - -// Toggles single fire mode -void enable_single_fire(){ - is_enabled = !is_enabled; -} - //Create LCD object LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2); +//Setup values for arming and firing system +boolean single_fire_is_enabled = true; // is true when single fire mode is enabled +boolean single_fire_is_disabled = false; // is false when single fire mode is disabled. Used to keep track of state changes +boolean is_armed = false; // is true when single fire mode is armed +unsigned long fire_debounce = 0; // A timer to debounce the firing pin +unsigned long armed_debounce = 0; //A time to deboucne the arming pin + + /* Cycle through the waveform samples over a given period of time * The time scalar argument changes how many samples it will skip. * A value of 1 will not skip any samples, a value of 2 will use every 2nd sammple, and a value of 5 will use every 5th sample. @@ -129,6 +113,29 @@ void recalc_waveform(float percent_amplitude){ } } +//Changes the LCD screen to the continuous firing status screen +void continuous_output_lcd(){ + lcd.clear(); + lcd.setCursor(0, 0); + lcd.print("Period:"); + lcd.print((float)(new_period)/sample_resolution); + lcd.setCursor(0, 1); + lcd.print("Amplitude:"); + lcd.print(waveform_vals[new_amp-1]); +} + +//Change the LCD screen to the single fire status screen +void single_fire_lcd(){ + lcd.clear(); + lcd.setCursor(0,0); + lcd.print("Single Fire Mode"); + lcd.setCursor(0,1); + lcd.print("Armed: "); + if(is_armed){ + lcd.print("Yes"); + } + else lcd.print("No"); +} void setup() { //Immediately set the analog output to the mid point @@ -145,9 +152,7 @@ void setup() { //Set up interrupts to simplify single fire mode: // This will call the arm_single_fire() function whenever it detects a falling signal on this pin - attachInterrupt(digitalPinToInterrupt(single_pulse_arm_pin), arm_single_fire, FALLING); - // Will call the enable_single_fire function whenever it detects a falling signal on this pin - attachInterrupt(digitalPinToInterrupt(single_pulse_enable_pin), enable_single_fire, FALLING); + //attachInterrupt(digitalPinToInterrupt(single_pulse_arm_pin), arm_single_fire, FALLING); //Change the resolution of the analog ourput to its maximum (12 bit res) analogWriteResolution(12); @@ -156,6 +161,9 @@ void setup() { amp_encoder.write(new_amp*4); period_encoder.write(new_period*4); + // Check single pulse status + is_armed = !digitalRead(single_pulse_enable_pin); + // Only executes this block of code if serial debug is enabled #ifdef enable_serial_debug Serial.begin(115200); @@ -172,12 +180,13 @@ void setup() { #ifdef enable_lcd lcd.init(); lcd.backlight(); - lcd.setCursor(0, 0); - lcd.print("Period:"); - lcd.print((float)(new_period)/sample_resolution); - lcd.setCursor(0, 1); - lcd.print("Amplitude:"); - lcd.print(waveform_vals[new_amp-1]); + lcd.setCursor(0,0); + if(single_fire_is_enabled){ + single_fire_lcd(); + } + else{ + continuous_output_lcd(); + } #endif } @@ -210,8 +219,10 @@ void loop() { // If LCD output is enabled output to LCD #ifdef enable_lcd - lcd.setCursor(10,1); - lcd.print(waveform_vals[new_amp-1]); + if(single_fire_is_enabled == false){ + lcd.setCursor(10,1); + lcd.print(waveform_vals[new_amp-1]); + } #endif recalc_waveform(new_amp); @@ -238,36 +249,91 @@ void loop() { // If LCD output is enabled output to LCD #ifdef enable_lcd - lcd.setCursor(7,0); - lcd.print((float)(new_period)/sample_resolution); + if(single_fire_is_enabled == false){ + lcd.setCursor(7,0); + lcd.print((float)(new_period)/sample_resolution); + } #endif } // Creates a synch signal so an oscilliscope can more easily read irregular pulses digitalWrite(sync_pin, !digitalRead(sync_pin)); - + + //Reads the state of the single pulse enable pin + single_fire_is_enabled = !digitalRead(single_pulse_enable_pin); + + + + //Check to see if the single fire state has changed + #ifdef enable_lcd + if(single_fire_is_enabled == single_fire_is_disabled){ + if(single_fire_is_enabled){ + single_fire_lcd(); + } + else{ + continuous_output_lcd(); + } + + } + #endif + single_fire_is_disabled = !single_fire_is_enabled; // Check to see if the single pulse pin has been pulled LOW - if(is_enabled){ - if(is_armed && millis() - debounce_timer > 100){ - if(!digitalRead(single_pulse_trig_pin) && has_single_pulsed == false){ - generate_waveform(sample_resolution); - has_single_pulsed = true; - debounce_timer = millis(); - digitalWrite(fired_indicator_pin, HIGH); - digitalWrite(armed_indicator_pin, LOW); - is_armed = false; - } - else if(digitalRead(single_pulse_trig_pin)) { - has_single_pulsed = false; - debounce_timer = millis(); + if(single_fire_is_enabled){ + + //Heavy-duty debounce routine for arming pin + if(!digitalRead(single_pulse_arm_pin)){ + // Reset the debounce timer + if(millis()-armed_debounce > 3000) armed_debounce = millis(); + + //Once the debounce timer reaches 250ms toggle the armed state. + if(millis()-armed_debounce > 200 && millis()-armed_debounce < 300){ + // Toggle the armed state + is_armed = !is_armed; + // Output the armed state to the lcd + lcd.setCursor(7,1); + if(is_armed){ + lcd.print("Yes"); + } + else lcd.print("No "); + //Output the armed state to the arm pin + digitalWrite(armed_indicator_pin, is_armed); + //Set the timer so this if statement doesn't run again + armed_debounce = millis()-301; } } - if(millis()-debounce_timer>250){ - digitalWrite(fired_indicator_pin, LOW); + + // Heavy duty debounce routine for firing pin + if(!digitalRead(single_pulse_trig_pin) && is_armed){ + // Reset the debounce timer + if(millis()-fire_debounce > 2500) fire_debounce = millis(); + + //Once the debounce timer reaches 250ms toggle the armed state. + if(millis()-fire_debounce > 200 && millis()-fire_debounce < 300){ + + digitalWrite(fired_indicator_pin, HIGH); + //Send out pulse + generate_waveform(sample_resolution); + // Toggle the armed state + is_armed = false; + // Output the armed state to the lcd + lcd.setCursor(7,1); + lcd.print("No "); + //Output the state to the indicator lights + digitalWrite(armed_indicator_pin, LOW); + //Set the timer so this if statement doesn't run again + fire_debounce = millis()-301; + armed_debounce = millis(); + } + } + + // Turn off the fire indicator pin after a half of a second + if(millis()-fire_debounce>300+500){ + digitalWrite(fired_indicator_pin, LOW); } } + else{ generate_waveform(sample_resolution); // Slows down the output pulse if the slow pulse pin is pulled LOW