Concept code which launches two threads, one of which implements a Modbus Tunnel protocol to talk with an ISEM, the other which launches a Modbus RTU protocol to talk to a CPUM (most of the Modbus code has been removed prior to publishing.) A canned AC and DC spectra is provided to display wave forms on start-up however the project normally polls for spectra from the ISEM and then plots is (that functionality has been removed prior to publishing.)
Dependencies: LCD_DISCO_F429ZI mbed TS_DISCO_F429ZI mbed-os BSP_DISCO_F429ZI

Plot of the initial start-up canned AC and DC spectra.
Diff: NextGen-Exerciser-Main.cpp
- Revision:
- 2:346119b3db6c
- Parent:
- 1:01394e5db95b
--- a/NextGen-Exerciser-Main.cpp Thu May 30 18:24:08 2019 +0000
+++ b/NextGen-Exerciser-Main.cpp Fri May 31 22:43:55 2019 +0000
@@ -184,11 +184,6 @@
// We will be using the LCD so instantiate an object locally
static LCD_DISCO_F429ZI st_lcd;
- // When searching for the intersection of AC and DC curves, we store the values here
- static uint16_t u16_firstIntersectionHeight;
- static uint16_t u16_secondIntersectionHeight;
-
-
// ----------------------------------------------------------------------
// MainProcessDecimatedSpectrum()
//
@@ -355,93 +350,6 @@
}
// ----------------------------------------------------------------------
-// MainFindACandDCintersections()
-//
-// This function attempts to locate the intersections where the AC and
-// DC spectra curve meets. It locates the last intersection point
-// encountered sweeping from left to right across the spectra, and for
-// the second intersection point it locates the first intersection
-// point.
-//
-// In this way we find the two locations at LCT_HEIGHT which indicates
-// the surface area volume arena of the water peak, bounded by the AC
-// curve to the top of the peak, and the DC curve at the bottom of
-// the curve.
-//
-// ----------------------------------------------------------------------
-static void MainFindACandDCintersections(void)
-{
- uint16_t u16_searchLoop = 0;
- bool b_atFirstIntersection = false;
- uint16_t u16_possibleFirst = 0;
- uint16_t u16_areaACMin = 0;
- uint16_t u16_areaACMax = 0;
-#if 0
- uint16_t u16_areaDCMin = 0;
- uint16_t u16_areaDCMax = 0;
-#endif
-
- // Go through the 256 sample within both the AC and the DC
- // spectra and first locate the first insersection point and
- // then the second intersection point
- for (u16_searchLoop = 0; u16_searchLoop < 256; u16_searchLoop++)
- {
- // Make sure that what we're looking at can be generally examined
- if ((int)f_decimatedACSpectrum[u16_searchLoop] > 10 &&
- (int)f_decimatedDCSpectrum[u16_searchLoop] > 10)
- {
- // Each point on the plot is examined to see if the point is
- // plus or minus 5 pixels to determine if they intersect.
- u16_areaACMin = (int)f_decimatedACSpectrum[u16_searchLoop] - 5;
- u16_areaACMax = (int)f_decimatedACSpectrum[u16_searchLoop] + 5;
-#if 0
- u16_areaDCMin = (int)f_decimatedDCSpectrum[u16_searchLoop] - 5;
- u16_areaDCMax = (int)f_decimatedDCSpectrum[u16_searchLoop] + 5;
-#endif
-
- // Do these two points intersect?
- if ((int)f_decimatedDCSpectrum[u16_searchLoop] >= u16_areaACMin &&
- (int)f_decimatedDCSpectrum[u16_searchLoop] <= u16_areaACMax)
- {
- // Do we have the first intersection already?
- if (0 != u16_firstIntersectionHeight)
- {
- // We have the first intersection so this is the second
- u16_secondIntersectionHeight = u16_searchLoop;
-
- // We have found both intersections so we are done
- break;
- }
- else
- {
- // We are still searching for the first intersection
- // so because we intersect here, note that we found it
- b_atFirstIntersection = true;
-
- // Record the point at which the first intersected
- u16_possibleFirst = u16_searchLoop;
- }
- }
- else
- {
- // These two points do not intersect.
- // Did we already find the first intersection point?
- if (true == b_atFirstIntersection)
- {
- // We found the intersection point and then left the area where
- // it intersected, so the last possible intersection point is
- // the first area of intersection
- u16_firstIntersectionHeight = u16_possibleFirst;
-
- // Since we have the first intersectiopn point located
- b_atFirstIntersection = false;
- }
- }
- }
- }
-}
-
-// ----------------------------------------------------------------------
// MainInit()
//
// This function will:
@@ -452,12 +360,6 @@
// ----------------------------------------------------------------------
static void MainInit(void)
{
- uint8_t ach_intersectionString[31] = { 0 };
-
- // Initialize the module's locall-held data
- u16_firstIntersectionHeight = 0;
- u16_secondIntersectionHeight = 0;
-
// Bring the LCD up and set its various colors
st_lcd.Clear(LCD_COLOR_BLACK);
st_lcd.SetBackColor(LCD_COLOR_BLACK);
@@ -466,16 +368,6 @@
// Process the decimated spectrum and then plot it
MainProcessDecimatedSpectrum();
MainPlotFinalSpectrum();
-
- // Search the AC and DC plots for where they intersect
- MainFindACandDCintersections();
-
- (void)sprintf((char *)ach_intersectionString,
- "Intersections %d and %d",
- u16_firstIntersectionHeight,
- u16_secondIntersectionHeight);
-
- st_lcd.DisplayStringAt(0, LINE(1), (uint8_t *)ach_intersectionString, LEFT_MODE);
}
// ----------------------------------------------------------------------