Forum: Mikrocontroller und Digitale Elektronik ARM7 mit .Net Mikro Framework (Endlossschleife?)


von Sebastian (Gast)


Lesenswert?

Guten Tag!

Ich habe ein Projekt an der Uni mit dem Embedded Master TFT. Dieser soll 
mit .Net Mikro Framework programmiert werden. Mein Problem ist nun, dass 
ich werte vom adc dauerhaft auslesen und auf dem tft ausgeben möchte 
aber nicht weiß wie ich das anstellen soll. das auslesen und ausgeben 
des adc wertes auf dem tft funktioniert bisher nur durch drücken eines 
buttons.

Ich habe schon einiges versucht aber immer wenn ich eine while(true) 
endlosschleife verwende, zeigt er mir nichts an. Ich habe mal meinen 
Code soweit verkürzt wie ich denke, dass es zum verständnis reicht. Sry, 
falls es immernoch zu lang sein sollte, aber ich denke mal, so kann mir 
eher jemand helfen.

namespace ProjektA
{
    public class Program : Microsoft.SPOT.Application
    {

        static PersistentStorage ps;

        public static void Main()
        {
                Program myApplication = new Program();

                Window mainWindow = myApplication.CreateWindow();

       // Create the object that configures the GPIO pins to buttons.
                GPIOButtonInputProvider inputProvider = new 
GPIOButtonInputProvider(null);

                // Start the application
                myApplication.Run(mainWindow);
        }

        private Window mainWindow;
        ListBox listBox = new ListBox();
        public Window CreateWindow()
        {

            listBox.Items.Add(text);

            // Add the text control to the window.
            mainWindow.Child = listBox;

            // Connect the button handler to all of the buttons.
            mainWindow.AddHandler(Buttons.ButtonUpEvent, new 
ButtonEventHandler(OnButtonUp), true);

            // Set the window visibility to visible.
            mainWindow.Visibility = Visibility.Visible;

            // Attach the button focus to the window.
            Buttons.Focus(mainWindow);
            return mainWindow;
         }

         private void OnButtonUp(object sender, ButtonEventArgs e)
        {
         for (int i = 0; i < 50; i++) //50 Messungen in 500ms vornehmen
         {
            value += adcmessung.GewichtAuslesen();  //ADC Wert auslesen
            Thread.Sleep(10);                       //10ms warten
         }

         value = value / 50; //Mittelwert
         string W = string.Concat("Wert: ", value.ToString("N"), " 
kg");//"N" für zwei Nachkommastellen mit runden

                listBox.Dispatcher.BeginInvoke(new 
DispatcherOperationCallback(UpdateText), new object[] { W });


                if (listBox.Items.Count >= 15)
                {
                    listBox.Items.Clear();
                }
}

Ich hoffe, mir kann da jemand helfen, denn so langsam gehen mir die 
Ideen aus... :(
Vielen Dank schonmal!

von dridders (Gast)


Lesenswert?

Ich vermute mal das es dann genauso ablaeuft wie auch im normalen 
.NET-Framework: solange du den Haupt-Thread blockierst (eben durch deine 
Endlosschleife) kann er sich eben nicht um seine UI-Events kuemmern. 
Somit kein Update der Anzeige. Entweder manuell ein Application.DoEvents 
ausfuehren, oder sinniger einen Timer benutzen und dich von dem 
regelmaessig aufrufen lassen, statt einer resourcenfressenden 
Endlosschleife.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.