Random getal

algemene C code
Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 21:28

OEPS: heb een vergissing gemaakt.
Door twee bits te nemen krijg ik natuurlijk 0, 1, 2 of 3.
En jij hebt maar twee poorten.
Ik kan dit omzijlen, door er eentje te verwerpen. Bijvoorbeeld de drie.
Dit wordt dan de goede sketch:

Code: Alles selecteren
byte willekeurigGetal;
byte tussenStap;

int poort[] = {8, 9, 10};

void setup(){
  Serial.begin(9600);
}

void loop(){
  for (int i = 0; i < 2; i++){
    tussenStap = analogRead(A0) & 1;
    tussenStap = tussenStap << i;
    willekeurigGetal = willekeurigGetal | tussenStap;
  }
  if (willekeurigGetal!=3){
    Serial.println(poort[willekeurigGetal]);
  }
  willekeurigGetal = 0;
}


Het levert deze output op:
9
9
10
10
8
9
9
8
10
10
8
10
10
9
9
9
9
8
9
10
10
8
10
8
8
8
10
10
9
10
9
9
8
10
8
9
8
8
10

Advertisement

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 21:30

en jij hebt natuurlijk drie poorten, niet twee zoals ik stel in bericht hierboven.
Zucht: waarom kunnen we niet eigen berichten wijzigen.
Fan Vouten Ken jouw leeren, maart staad nie so moi.

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 21:40

Trouwens,
Omdat het maar om een willekeurig getal van 2 bits gaat, doet deze sketch het zelfde:
Code: Alles selecteren
byte WG;

void setup(){
  Serial.begin(9600);
}

void loop(){
  for (int i = 0; i < 2; i++){
     WG = ((analogRead(A0) & 1)<<1)|(analogRead(A0) & 1);
  }
  if (WG!=3){
    Serial.println(8 + WG);
  }
  WG = 0;
}

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 21:42

en de
Code: Alles selecteren
WG = 0;

kan ook weg

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 21:53

ik heb de output even laten lopen.
van de 31.999 getallen, waren er
10.013 een 8
10.985 een 9
11.001 een 10

Onevenredig weinig 8'en lijkt.
Maar wat meer testjes doen....

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 22:05

36.238 totaal:
een 8: 11.276 = +6,65%
een 9: 12.421 = -2,83%
een 10: 12.541 = -3,82% afwijking t.o.v. gemiddelde (= 36.238 / 3)

Opnieuw zelfde afwijking van verwachting.

Ik ben benieuwd hoe herhaalbaar dit is en of de variabele of 'culprit' gedetermineerd kan worden?

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 22:14

71.821 totaal:
een 8: 22.421 = +6,35
een 9: 24.492 = -2,30
een 10: 24.908 = -4,04

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 22:17

er stond nog een onnodige loop in mijn sketch. Dit is beter.
Code: Alles selecteren
byte WG;

void setup(){
  Serial.begin(9600);
}

void loop(){
  WG = ((analogRead(A0) & 1)<<1)|(analogRead(A0) & 1);
  if (WG!=3){
    Serial.println(8+WG);
  }
}


Nu even kijken of het uitmaakt op de gemiddelden....

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 22:36

85.061 totaal:
een 8: 24.801
een 9: 30.889
een 10: 30.091

Er is nu minder verschil tussen 9 en 10.
Maar minder '8' betekent minder '0'-LSB dan '1' Least Significan Bitjes op de Floating Analoog naar digitaal arduino pinnetje. Hmmm?

Misschien de WS!=3 veranderen in WS!=0 ?

48.113
een 8: 17.343
een 9: 17.476
een 10: 13.314

:evil: :evil: :evil: :evil: :evil: :evil: :evil:

Gebruikers-avatar
Berichten: 700
Geregistreerd: 05 Mrt 2012, 21:56
Woonplaats: Appingedam

Re: Random getal

Berichtdoor pjh » 08 Mrt 2013, 22:48

Ik heb de eerste sketch weer gepakt. Voor alle vereenvoudigingen.
Die geeft dit:

tot.100.480
28.137
36.021
36.322


Wie het snapt mag het zeggen.

VorigeVolgende

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 9 gasten