I want to set a minimum pressure for a setup.
I want to do this with a potentiometer in steps of 15, from 15 to 900hPa.
I have a code that uses the potmeter's value, but it changes per 0,01 hPa and not per 15 hPa.
Can someone help?
This is the code for now. It's in dutch (druk=pressure):
int analogValue = analogRead(A0);
float minDruk = floatMap(analogValue, 0, 1023, 15, 900);
Serial.print ("Minimum druk ");
Serial.println(minDruk);
Read the pot and use the map() function to change the range to the number of steps requuired. Multiply the mapped range by the size of the required steps to get the output value
goedemorgen
try this sketch proposal .
struct TIMER {
unsigned long stamp;
unsigned long duration;
};
TIMER timer {0,1000};
float mapFloat(float x, float in_min, float in_max, float out_min, float out_max) {
return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
void setup() {
Serial.begin(9600);
Serial.println("en hier gaan we");
}
void loop() {
if (millis()-timer.stamp>=timer.duration){
timer.stamp=millis();
Serial.println((int)(mapFloat(analogRead(A0),0.0,1023.0,15.0,900.0)/15.0)*15);
}
}
Even easier than my original suggestion if you take advantage of the integer division done by the compiler
const byte potPin = A7;
int potValue;
void setup()
{
Serial.begin(115200);
while (!Serial);
}
void loop()
{
potValue = analogRead(potPin);
Serial.print(potValue);
Serial.print("\t");
Serial.println(potValue / (1024 / 15));
}
1 Like
void setup ()
{
Serial.begin ( 115200 );
for ( word n = 0; n <= 1023; n ++ ) // simulate analogRead
{
word D = 15 * ( 1 + n * 60 / 1024 ); // 60 = 900 / 15
Serial.print ( n );
Serial.print ( "\t" );
Serial.println ( D );
}
}
void loop ()
{}
Serial data:
0 15
1 15
2 15
3 15
....
1020 900
1021 900
1022 900
1023 900
wonkey03:
int analogValue = analogRead(A0);
float minDruk = floatMap(analogValue, 0, 1023, 15, 900);
Serial.print ("Minimum druk ");
Serial.println(minDruk);
Divide the values by 15, then multiply by 15 to get steps of 15:
int analogValue = analogRead(A0);
float minDruk = 15.0 * map(analogValue, 0, 1023, 15/15, 900/15);
Serial.print ("Minimum druk ");
Serial.println(minDruk);
Hysteresis can eliminate some annoying behaviour of a potentiometer set up to emulate a multi-pole rotary switch, as may be the case here.
If you on the edge of N and N + 1, the output can go back and forth randomly.
Hysteresis
This exists in science and nature and is broadly defined but basically something similar to this: Hysteresis is the dependence of the state of a system on its history. Anyway, its application here in the Arduino world is very concrete, generally to minimise oscillation between switching states.
Problem Area:
You've designed a system which determines a state based on an input. For example, it could be setting the brightness of a display based on
the ambient light measured via an an…
is a good start if you are curious.
a7
system
Closed
September 25, 2021, 3:24pm
8
This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.