Go Down

Topic: [OPGELOST] Door rekenen met analoge waarde werkt niet (Read 140 times) previous topic - next topic

ChristiaanTheunisse

Jul 12, 2018, 12:47 am Last Edit: Jul 13, 2018, 02:22 pm by ChristiaanTheunisse
Ik heb de afgelopen weken geprobeerd de Arduino code onder de knie te krijgen. Dit heb ik namelijk nodig voor een project op school. Ik heb echter een probleem.

Verschillende keren heb ik al geprobeerd door te rekenen met een analoge waarde. Stel dat je een waarde tussen 0 en 1023 kan krijgen. Als ik dit bij een potentiometer probeer om te rekenen naar een hoek gebruik ik daarvoor de volgende code:

float hoekUitrekenen(int v) {
  float hoek;
  int correctie;
  correctie = v - 512;  // correctie wordt dus een waarde tussen -512 en 512
  float factor;
  factor = correctie / 512;  // factor wordt iets tussen -1 en 1
  hoek = factor * 90;   // hoek moet dus iets worden tussen -90 en 90
  return hoek;             //  ik ben er even vanuit gegaan dat de uitslaghoek van de meter twee keer 90
                                 //  graden is
}
 
int leesPotentioMeter() {   // Deze functie moet de waarde van de potentiometer uitlezen
  int pot = A0;
  int p;
  p = analogRead(pot);
  return p;
}

int x;

void loop() {
  x = leesPotentioMeter();
  Serial.print(x);
  Serial.print("\n");
  Serial.print(hoekUitrekenen(x));
  Serial.print("\n\n");
  delay(100);
}

Bij een analoge waarde van 0, krijg ik inderdaad een hoek van -90 graden. Zodra de analoge waarde echter 1 of groter wordt, springt de waarde hoek op nul. Hieronder een gedeelte van de serial monitor.

0
-90.00

0
-90.00

0
-90.00

9
0.00

16
0.00

1023
0.00

Hoe komt het dat de arduino niet gewoon een hoek geeft van bijvoorbeeld -84 of +90 graden? En waarom werkt hij wel bij 0? Moet ik andere variabele types gebruiken?

Heeft iemand een tip in de goede richting?

Alvast bedankt!

P.S. Ik heb dit probleem ook al gehad bij een joystick.

sterretje

#1
Jul 12, 2018, 06:47 am Last Edit: Jul 12, 2018, 06:47 am by sterretje
Standaard rekenen is gebaseerd op integers (hele nummers). Als je 512 deelt door 512 krijg je 1. Als je 511 deelt door 512 krijg je 0.

Je kunt de compiler vertellen dat deze met floats moet rekenen als je een van de nummers een float maakt. Hieronder is 512 (een integer) veranderd naar 512.0 (een float)
Code: [Select]
float factor;
factor = correctie / 512.0;  // factor wordt iets tussen -1 en 1


PS
gebruik in het vervolg code tags als je code post zodat het eruit ziet zoals hierboven.
If you understand an example, use it.
If you don't understand an example, don't use it.

Electronics engineer by trade, software engineer by profession. Trying to get back into electronics after 15 years absence.


Go Up