Percentage potmeter weergeven lcd

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 5
Geregistreerd: 08 Apr 2018, 20:31

Percentage potmeter weergeven lcd

Berichtdoor AndreB » 08 Apr 2018, 21:12

Hallo Allemaal,

ik ben volledig nieuw hier maar volg al wel geruime tijd dit forum.
Aangezien ik ergens niet verder mee kom heb ik besloten mij aan te melden
om zo mogelijk hulp te krijgen voor mijn project.
Ik ben bezig om een soort van testkast te maken voor afstellen van joysticks
waar je de waarde in procenten af kunt lezen op een 2x16 lcd scherm.
Nu heb ik dit allemaal al werkend alleen wil ik het graag op de volgende manier.
De potmeter van 5Kohm heb ik de A0 ingang zitten van de arduino nano.
Als de joystick in de middenstand (center) staat en er dus 2,5volt op de ingang A0 staat
moet het percentage 0% zijn in het scherm, van 2,5volt naar 5 volt moet 0-100% zijn maar
ook van 2,5volt naar 0volt moet 0-100%.
Nu heb ik het zo dat het volle bereik van 0-5 volt is 0-100% in het scherm, of door een andere deling
krijg ik het bijv van 0-50% of 0-200% maar het lukt me niet om vanuit de 2,5volt met 0% te beginnen.
Misschien is het simpelweg niet mogelijk hoor wat ik wil.
Ik hoop dat het allemaal een beetje duidelijk is.
Alvast bedankt voor het meedenken.

Mvg Andre

Advertisement

Berichten: 5
Geregistreerd: 08 Apr 2018, 20:31

Re: Percentage potmeter weergeven lcd

Berichtdoor AndreB » 08 Apr 2018, 21:19

Sorry ik was vergeten om de sketch te plaatsen van mijn project:

#include <LiquidCrystal.h> // include the LCD library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int potPin = A0; //Potentiometer input pin
int potValue1 = 0;
int potValue2 = 0; // final display variable
void setup() {
lcd.begin(16, 2); // lcd rows and columns
lcd.setCursor(0,0);
lcd.print(" JLG "); // title of sorts
lcd.setCursor(0,1);
lcd.print(" JOYSTICK TEST ");
delay(3000);
lcd.clear();
}

void loop() {
// read then divide the input(max 1020 in this case) by 10
potValue1 = analogRead(potPin) / 5;
// divide by 1.02 to get percentage
potValue2 = potValue1 / 1.00;
// set cursor to second row, first column
lcd.setCursor(0, 1);
//display final percentage
lcd.print(potValue2);
//print the percent symbol at the end
lcd.print("%");
//wait 0.1 seconds
delay(100);
//wipe the extra characters
lcd.print(" ");
delay(1);
lcd.setCursor(3,0);
if(analogRead(0)>470 && analogRead(0)<550){
lcd.print(" CENTER ");
}else if(analogRead(0)<450){
lcd.print(" VOORUIT ");
}else if(analogRead(0)>550){
lcd.print("ACHTERUIT");

}


}

Gebruikers-avatar
Berichten: 188
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Percentage potmeter weergeven lcd

Berichtdoor baco1978 » 09 Apr 2018, 09:25

Hallo Andre,

welkom op dit forum :)

wat je kan doen is, is gebruik maken van de map() funktie.
https://www.arduino.cc/reference/en/language/functions/math/map/

voorbeeld:
y = map(potValue1, 0, 1020, 0, 200);

dan is 100 je nul punt

als je acheruit gaat : print y-100

en ga je vooruit dan is het: print 100-y
Met vriendelijke groet Arjan

Gebruikers-avatar
Berichten: 1859
Geregistreerd: 06 Aug 2016, 01:03

Re: Percentage potmeter weergeven lcd

Berichtdoor Koepel » 09 Apr 2018, 13:02

Is het misschien handig om de analogRead() waarde om te zetten naar een percentage van -100% tot +100% ?
Dan kun je daarna in de sketch alles met dat percentage doen.

Als je op het display de middenstand een waarde van 20% laat zien, dan weet je niet of dat 20% te hoog of 20% te laag is.

Als je met een percentage gaat werken, dan zou ik dat met 'float' variabelen doen.

Mijn voorkeur is om met echte eenheden te werken: Volt, kilogram, seconde, kiloPascal, enzovoorts.
Dat is hier lastig, want het voltage op de analoge pin is niet zo van belang. Maar misschien is een percentage van 0...100 of eventueel van -100...+100 goed te doen.

Berichten: 5
Geregistreerd: 08 Apr 2018, 20:31

Re: Percentage potmeter weergeven lcd

Berichtdoor AndreB » 09 Apr 2018, 23:31

Alvast bedankt voor de reactie's, ik ga deze week even stoeien met de "map" functie.

Grt Andre

Berichten: 2476
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Percentage potmeter weergeven lcd

Berichtdoor shooter » 13 Apr 2018, 10:25

value=(analogRead(A0)-512)*100/1024,
dat kan ook met map(0,1024,-100,100)en dat eventueel abs maken.
paul deelen
shooter@home.nl

Berichten: 5
Geregistreerd: 08 Apr 2018, 20:31

Re: Percentage potmeter weergeven lcd

Berichtdoor AndreB » 16 Apr 2018, 23:12

Goeie avond,

ben afgelopen weekend even aan het stoeien geweest met de map functie.
Heeft even geduurd maar heb het nu wel voor elkaar dat de middenstand 0% aangeeft en
de andere 2 kanten 100%, dit met hulp van jullie wat ik enorm waardeer.
Het enige kleine dingetje wat ik nog heb is in het bereik "vooruit" komt er het - teken voor te staan.
Is dit eventueel ook weg te krijgen?, dat dus beide kanten op positieve waarde is of dat je dit - teken wist??
Hieronder een kopie van mijn aangepaste sketch:

#include <LiquidCrystal.h> // include the LCD library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int potPin = A0; //Potentiometer input pin
int potValue1 = 0;
int potValue2 = 0; // final display variable
void setup() {
lcd.begin(16, 2); // lcd rows and columns
lcd.setCursor(0,0);
lcd.print(" JLG "); // title of sorts
lcd.setCursor(0,1);
lcd.print(" JOYSTICK TEST ");
delay(3000);
lcd.clear();
}

void loop() {
// read then divide the input(max 1020 in this case) by 10
potValue1 = analogRead(potPin);
// divide by 1.02 to get percentage
potValue2 = map(potValue1, 0, 1024, 0, 205);
// set cursor to second row, first column
lcd.setCursor(0, 1);
//display final percentage
lcd.print(potValue2-103);
//print the percent symbol at the end
lcd.print("%");
//wait 0.1 seconds
delay(350);
//wipe the extra characters
lcd.print(" ");
delay(1);
lcd.setCursor(3,0);
if(analogRead(0)>490 && analogRead(0)<530){
lcd.print(" CENTER ");
}else if(analogRead(0)<490){
lcd.print(" VOORUIT ");
}else if(analogRead(0)>530){
lcd.print("ACHTERUIT");

}


}

Gebruikers-avatar
Berichten: 188
Geregistreerd: 03 Sep 2013, 10:03
Woonplaats: Katwijk ZH

Re: Percentage potmeter weergeven lcd

Berichtdoor baco1978 » 17 Apr 2018, 10:02

door je ingelezen potValue waarde te vergelijken met kleiner dan 103


Code: Alles selecteren
if (potValue2<103){
// alles kleiner dan 103, dan wordt de waarde gewoon zo geprint
cd.print(potValue2);
}
else
{
//alles groter en gelijk aan 103 , daar wordt 103 van de potValue afgehaald en geprint
cd.print(potValue2-103);
}
Met vriendelijke groet Arjan

Berichten: 5
Geregistreerd: 08 Apr 2018, 20:31

Re: Percentage potmeter weergeven lcd

Berichtdoor AndreB » 22 Apr 2018, 21:31

Goeieavond allemaal,

ben al een tijdje bezig geweest met het laatste kleine puntje in mijn project
om het -teken nog weg te krijgen. Had het laatste al geprobeerd wat in deze post
vermeld is maar ik krijg dan het stuk wat "VOORUIT" aangeeft vanuit de middenstand 100% en
loopt dan af naar 0%, het min teken is wel weg, hier voor was het percentage wel helemaal goed
alleen dus naar de ene zijde komt het min teken in beeld.
Zie hieronder hoe mijn sketch eruit ziet, hopelijk zien jullie wat ik fout doe:

*/
#include <LiquidCrystal.h> // include the LCD library
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

int potPin = A0; //Potentiometer input pin
int potValue1 = 0;
int potValue2 = 0; // final display variable
void setup() {
lcd.begin(16, 2); // lcd rows and columns
lcd.setCursor(0,0);
lcd.print(" JLG "); // title of sorts
lcd.setCursor(0,1);
lcd.print(" JOYSTICK TEST ");
delay(3000);
lcd.clear();
}

void loop() {
// read then divide the input(max 1020 in this case) by 10
potValue1 = analogRead(potPin);
// divide by 1.02 to get percentage
potValue2 = map(potValue1, 0, 1020, 0, 205);
// set cursor to second row, first column
lcd.setCursor(0, 1);
// display final percentage
if(potValue2<103){
lcd.print(potValue2);
}
else
{
lcd.print(potValue2-103);
}
//print the percent symbol at the end
lcd.print("%");
//wait 0.1 seconds
delay(350);
//wipe the extra characters
lcd.print(" ");
delay(1);
lcd.setCursor(3,0);
if(analogRead(0)>490 && analogRead(0)<530){
lcd.print(" CENTER ");
}else if(analogRead(0)<490){
lcd.print(" VOORUIT ");
}else if(analogRead(0)>530){
lcd.print("ACHTERUIT");

}

}

Gebruikers-avatar
Berichten: 1859
Geregistreerd: 06 Aug 2016, 01:03

Re: Percentage potmeter weergeven lcd

Berichtdoor Koepel » 23 Apr 2018, 18:47

Volgens mij maak je het jezelf lastig.
Je hebt geen variabele die de basis is. Je zou een getal van 0...100 of 0...200 of -100 tot +100 kunnen nemen als basis en dat overal voor gebruiken. Ik zou daar een 'float' voor gebruiken.
Wanneer ik deze sketch uit mijn mouw schudt, dan wordt het een hele andere sketch. Dat is niet de bedoeling.

Volgens mij kun je beter één variabele gebruiken als basis voor alles. Dus geen analogRead() er nog eens achteraan. Verder kun je onderin de loop() een delay zetten en alle andere delay uit de loop() verwijderen. Gebruik normale getallen, dus niet iets met 205 en 103.
Je correctie met 205 en 103 is de verkeerde correctie voor het verkeerde probleem :o

Wat is het probleem ? Dat het percentage voor "vooruit" omgekeerd is ? Of dat er een dubbel '%' teken te zien is ?
Ik zie geen minus teken. Heb jij dat wel ?

Stel dat je het omzet naar een waarde van 0...200. Dus niet 205.
Dus bij 0...200 kun je definiëren dat het percentage op het display 0% is bij een waarde van 100.
Code: Alles selecteren
x = 80;  // 0...200
if( x < 100)
{
  percentage = 100 - x;
}
else
{
  percentage = x - 100;
}


De Tinkercad simulatie deed het eerder vandaag niet. Nu werkt het soms een klein beetje, en het lukt me niet om jouw sketch goed uit te proberen :(
Bijlagen
procent.png
procent.png (113.92 KiB) 724 keer bekeken

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 2 gasten