Click here to Skip to main content
15,885,546 members
Home / Discussions / C#
   

C#

 
GeneralRe: UK buddy's needed with C# skill for mega big project Pin
stopthespying15-Feb-18 6:43
stopthespying15-Feb-18 6:43 
QuestionRe: UK buddy's needed with C# skill for mega big project Pin
Eddy Vluggen15-Feb-18 6:22
professionalEddy Vluggen15-Feb-18 6:22 
AnswerRe: UK buddy's needed with C# skill for mega big project Pin
stopthespying15-Feb-18 7:40
stopthespying15-Feb-18 7:40 
GeneralRe: UK buddy's needed with C# skill for mega big project Pin
Eddy Vluggen15-Feb-18 12:40
professionalEddy Vluggen15-Feb-18 12:40 
QuestionC# 2008 express building a query Pin
Member 330187815-Feb-18 4:01
Member 330187815-Feb-18 4:01 
AnswerRe: C# 2008 express building a query Pin
OriginalGriff15-Feb-18 5:01
mveOriginalGriff15-Feb-18 5:01 
AnswerRe: C# 2008 express building a query Pin
stopthespying15-Feb-18 6:48
stopthespying15-Feb-18 6:48 
QuestionImplementing a moving average Pin
auting8214-Feb-18 10:12
auting8214-Feb-18 10:12 
Really struggling with these fairly simple thing.
I have some sensor values randomly generated from a class I call Sensor.cs. I use GeAnaloValues() method to get these values and display them in a text box i Form1.cs in the GUI. Now I need to make moving average filter and take moving average of the for example last 5 sensor values displayed on the screen.
I just don't know how to implement these values generated from the method GetAnalogValues() in the moving average algorithm ? Confused | :confused:
I also wonder if I should make a separate class for the implementation of the MA-Filter?

This is my code:

Form1.cs class

C#
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Linq;
using System.Windows.Forms;
using System.Globalization;

namespace DAQ_Simulator
{
    public partial class Form1 : Form
    {
        int counter;
        int count_lines; 
        System.Timers.Timer t;

        //Log time varibles
        int LoggingTime=56;
        int LogTimeLeft;

        //Sampling variables
        float SamplingTime = 5.9f;
        
        private int clickcounter;

        private DateTime datetime;
        private DateTime datetime2;
        private DateTime NextLoggingTime;
        int maxAI = 7;
        int maxDI = 3;
        int maxSid = 9;
        String sTxt;
        String sTxt1;
        
        // Create an array of 10 sensor objects
        Sensor[] sObj = new Sensor[10];
        MA_Filter[] fObj = new MA_Filter[10];
        public Form1()
        {
            InitializeComponent();

            for (counter = 0; counter < maxSid; counter++)
            {
                sObj[counter] = new Sensor(counter);
                //fObj[counter] = new MA_Filter(counter, 10); //Create filters
            }
        }
        private void displaySensorData(object sender, EventArgs e)
        {
        }
        private void groupSampl_Enter(object sender, EventArgs e)
        {

        }
        private void textSampling_TextChanged(object sender, EventArgs e)
        {



        }
        private void btnSampling_Click(object sender, EventArgs e)
        {
            clickcounter++;
            if (clickcounter == 1)
            {
                textSensorValues.Text = "TimeStamp        AI.1,      AI.2,      AI.3,      AI.4,      AI.5,      AI.6,    AI.7,         DI.1,      DI.2,      DI.3" + "\r\n";
            }  
            if (SamplingTime <= 0)
            {

                SamplingTime = SamplingTime + 5.9f;
            }
            
            if (SamplingTime <= 5.9f && SamplingTime >= 0)
            {

                btnSampling.Enabled = false;
            }
            timer1 = new System.Windows.Forms.Timer();
            timer1.Tick += new EventHandler(timer1_Tick);
            timer1.Interval = 1000; // 1 second
            timer1.Start();
           // txtNextSamplingTime.Text = SamplingTime.ToString();

            datetime2 = DateTime.Now.AddSeconds(5).AddMilliseconds(900);
            String time2 = datetime2.ToString("HH:mm:ss.FFF", CultureInfo.InvariantCulture);
            textSampling.Text = time2;
            sampling(); // sample the signals

        }

        private void groupLogg_Enter(object sender, EventArgs e)
        {

        }

        private void txtLogging_TextChanged(object sender, EventArgs e)
        {

        }
        private void labelLoggingText_Click(object sender, EventArgs e)
        {


        }
        private void btnLogging_Click(object sender, EventArgs e)
        {
            if (LoggingTime == 0)
            {
               
                LoggingTime = LoggingTime + 56;
            }
            
            if (LoggingTime <= 56 && LoggingTime >= 0)
            {
                
                btnLogging.Enabled = false;
            }
            
           
            


            timer2 = new System.Windows.Forms.Timer();
            timer2.Tick += new EventHandler(timer2_Tick);
            timer2.Interval = 1000; // 1 second
            timer2.Start();
            txtLogging.Text = LoggingTime.ToString();

            NextLoggingTime = DateTime.Now.AddSeconds(4);
            String time3 = NextLoggingTime.ToString("HH:mm:ss.FFF", CultureInfo.InvariantCulture);
           
            txtLogging.Text =time3;


           


            Logging();


        }


        private void labelSensorValues_Click(object sender, EventArgs e)
        {

        }
        private void textSensorValues_TextChanged(object sender, EventArgs e)
        {

        }
        private void timer1_Tick(object sender, EventArgs e)
        {
            SamplingTime--;
            txtNextSamplingTime.Text = SamplingTime.ToString("F2")+"sec";
            if (SamplingTime <= 0)
            {

                timer1.Stop();
                btnSampling.Enabled = true;

                txtNextSamplingTime.Clear();
                

            }
            
            /*
            btnSampling.Enabled = true;
            timer1.Stop();*/
        }
        private void sampling()
        {
            datetime = DateTime.Now;
            // string time = datetime.Hour + ":" + datetime.Minute + ":" + datetime.Second + "." + datetime.Millisecond;
            
            textSensorValues.Text += datetime.ToString("HH:mm:ss.FFF", CultureInfo.InvariantCulture) + "    ";


            //for int(id=0; id=maxAI)


            for (int id = 0; id < maxAI; id++)
            {

                double AnalogSensorValues = sObj[id].GetAnalogValue();
               
                sTxt = AnalogSensorValues.ToString("F3");              
                textSensorValues.Text += sTxt + "    ";
            }
            for (int id = maxSid - maxDI; id < maxSid; id++)
            {
                int DigitalSensorValues = sObj[id].GetDigitalValue();
                sTxt1 = DigitalSensorValues.ToString();
                textSensorValues.Text += "         " + sTxt1 + "    ";
            }
            textSensorValues.Text += "\r\n";
        }
        private void helpToolStripMenuItem_Click(object sender, EventArgs e)
        {



        }

        private void Logging()
        {
            count_lines = textSampling.Lines.Length;
            txtNumberWritings.Text = count_lines.ToString();

            SaveFileDialog saveFileDialog1 = new SaveFileDialog();
           if (saveFileDialog1.ShowDialog() == DialogResult.OK)
           {
           using (Stream s = File.Open(saveFileDialog1.FileName,FileMode.CreateNew))
           using (StreamWriter sw = new StreamWriter(s))
               {
              sw.WriteLine(textSensorValues.Text);

               textFilePath.Text = string.Format("{0}", openFileDialog1.FileName);
           }

           textFilePath.Text = saveFileDialog1.FileName.ToString();
           }

        }

        private void Form1_Load(object sender, EventArgs e)
        {
            


        }

        private void richTextBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void folderBrowserDialog1_HelpRequest(object sender, EventArgs e)
        {

        }

        private void textBox1_KeyPress(object sender, KeyPressEventArgs e)
        {
           
        }

        private void timer2_Tick(object sender, EventArgs e)
        {
            LoggingTime--;
            txtNextLogg.Text = LoggingTime.ToString()+"sec";
            if (LoggingTime <= 0)
            {
                
                timer2.Stop();
                btnLogging.Enabled = true;
                
                txtNextLogg.Clear();
                txtNextLogg.Text = "56 sec";
            }
        }

        private void label3_Click(object sender, EventArgs e)
        {

        }
      
        private void button1_Click(object sender, EventArgs e)
        {
            
        }
    }
}


My Sensor class where I generate my random values:

C#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DAQ_Simulator
{
    public class Sensor
    {
        //Random ranDigVal;
        double AnalogVal;
        int DigVal;
        int sId;
        Random  rSensVal;
        Random digSensVal;

        public Sensor(int id)
        {
            sId = id;
            rSensVal = new Random(id);
            digSensVal = new Random(id);
            // ranDigVal = new Random(id);
            AnalogVal = 0.0F;
        }
        
        public double GetAnalogValue(double minAnalogVolt=0.00F,double maxAnalogVolt=1.00F)
        {
            if(minAnalogVolt <= AnalogVal && AnalogVal<= maxAnalogVolt)

                 AnalogVal = rSensVal.NextDouble();
                 return AnalogVal;         
        }
        public int GetDigitalValue(int digMin = 0, int digMax = 1)
        {

            DigVal = digSensVal.Next(0,2);
            return DigVal;
        }
 
        public int GetSensId()
        {
            return sId;
        }      
        
    }
}

AnswerRe: Implementing a moving average Pin
OriginalGriff14-Feb-18 20:41
mveOriginalGriff14-Feb-18 20:41 
GeneralRe: Implementing a moving average Pin
auting8214-Feb-18 23:54
auting8214-Feb-18 23:54 
AnswerRe: Implementing a moving average Pin
Ralf Meier15-Feb-18 0:25
mveRalf Meier15-Feb-18 0:25 
GeneralRe: Implementing a moving average Pin
Rob Philpott15-Feb-18 0:24
Rob Philpott15-Feb-18 0:24 
GeneralRe: Implementing a moving average Pin
OriginalGriff15-Feb-18 0:34
mveOriginalGriff15-Feb-18 0:34 
GeneralRe: Implementing a moving average Pin
auting8215-Feb-18 1:38
auting8215-Feb-18 1:38 
GeneralRe: Implementing a moving average Pin
OriginalGriff15-Feb-18 1:53
mveOriginalGriff15-Feb-18 1:53 
GeneralRe: Implementing a moving average Pin
auting8215-Feb-18 4:35
auting8215-Feb-18 4:35 
GeneralRe: Implementing a moving average Pin
OriginalGriff15-Feb-18 4:53
mveOriginalGriff15-Feb-18 4:53 
AnswerRe: Implementing a moving average Pin
Ralf Meier15-Feb-18 21:27
mveRalf Meier15-Feb-18 21:27 
GeneralRe: Implementing a moving average Pin
auting8216-Feb-18 1:25
auting8216-Feb-18 1:25 
GeneralRe: Implementing a moving average Pin
Pete O'Hanlon16-Feb-18 7:53
mvePete O'Hanlon16-Feb-18 7:53 
GeneralRe: Implementing a moving average Pin
Ralf Meier16-Feb-18 9:49
mveRalf Meier16-Feb-18 9:49 
GeneralRe: Implementing a moving average Pin
auting8216-Feb-18 11:40
auting8216-Feb-18 11:40 
GeneralRe: Implementing a moving average Pin
Ralf Meier16-Feb-18 12:42
mveRalf Meier16-Feb-18 12:42 
GeneralRe: Implementing a moving average Pin
Ralf Meier17-Feb-18 0:14
mveRalf Meier17-Feb-18 0:14 
GeneralRe: Implementing a moving average Pin
auting8217-Feb-18 0:36
auting8217-Feb-18 0:36 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.