Avatar billede tula Nybegynder
25. maj 2004 - 11:29 Der er 8 kommentarer

Metode-kald KUN ved ændring af indkomne værdier.

Hej!

Jeg modtager en række værdier i intervallet 0-100 fra min com port hvert 7 ms, dvs. at jeg konstant får temmelig mange værdier ind. Disse værdier skal bruges til at styre en slider. Men som det er lige nu vil kaldet til metoden 'doSendSlider' blive kaldt konstant og det kan netværkskommunikationen ikke følge med til, så jeg bliver du nødt til at stabilisere i hvert fald bare en lille smule, så der kun bliver sendt noget, når den indkomne værdi er ændret mere end en eller anden på forhånd givet værdi - lad os sige 3.

Metoden som læser værdier hedder readLine og står nedenfor. I den er der et kald til metoden doSendSlider, som kun skal kaldes, når der forekommer ændringer over 3. Nogen forslag til hvordan jeg laver det?

//Læser værdier fra seriel porten...wuhuu!
  public void readLine() {

  float lineValue;
  float newLineValue;

  while(true) {
    try {

      //Stabiliserer inputtet
      String values[] = in.readLine().split("[^0-9]");
        for(int i=0;i<values.length;i++)
        {
            if(values[i].length() != 0)
            {
                lineValue = Float.parseFloat(values[i]);

                // Metode-kald til slider men kun
                // når værdierne ændrer sig
             
                //doSendSlider(newLineValue);
               
                System.out.println("Afstand: " + lineValue + "                      Lydspor: 100" + i); //for debugging
            }
        }

    }
    catch( IOException e ) {
      error("readLine " + e );
    }
  }
  }
Avatar billede arne_v Ekspert
25. maj 2004 - 11:34 #1
Logikken må vel være noget a la:

oldvalue = -1;

while(true) {
  ...
  value = ...;
  ...
  if(value != oldvalue) {
      ...
      oldvalue = value;
  }
  ...
}
Avatar billede arne_v Ekspert
25. maj 2004 - 11:35 #2
Ja - det var så ændring større end 0.

if(Math.abs(value-oldvalue) > 3) {

er ændring større end 3.
Avatar billede tula Nybegynder
25. maj 2004 - 12:10 #3
Tak arne_v!

Det der nu er problemet er, at jeg skal sende til fire forskellige slidere, der hedder 1000, 1001, 1002 og 1003 og dermed kommer oldvalue vel til at spille ind på dem alle fire.

Her er min if-sætning indtil nu, men den styre altså kun en slider.

if(Math.abs(lineValue-oldLineValue) > 3)
                {
                  nodeValue = 1000 + i;
                  doSendSlider(lineValue,nodeValue);
                  oldLineValue = lineValue;
                  System.out.println("send value to slider" + lineValue);
                }
Avatar billede tula Nybegynder
25. maj 2004 - 12:11 #4
orv...du skal lige ha' point for din første løsning!
Avatar billede arne_v Ekspert
25. maj 2004 - 12:13 #5
Umiddelbart lyder det som at du skal have 4 old values
Avatar billede arne_v Ekspert
25. maj 2004 - 12:13 #6
og et svar
Avatar billede tula Nybegynder
25. maj 2004 - 12:18 #7
OK! Jeg forsøger
Avatar billede arne_v Ekspert
16. juni 2004 - 23:00 #8
Lukke tid ?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester