Potentiometer abnullen nur wie?

Hallo liebe Bastler,

Ich möchte ein Potentiometer als Tiefenmessung nutzen.
Das heisst ich drehe es 0-190mm, das soll in Tiefe1 immer angezeigt werden,
in der Tiefe2 will ich zb. bei 100mm auf 0mm Stellen, und das Display soll mir eben noch von 0-90mm hochgehen/Zählen.

Ich hoffe das man es so verstehen kann :slight_smile:

Also
Tiefe 1 soll immer den richtigen wert des Potis anzeigen.
Tiefe 2 soll nach dem Taster Betätigen von 0 aus beginnen, die Zahl darf dann auch ins Negative mitgehen falls ich das Poti zurückdrehe.

Ich hoffe mir kann einer weiterhelfen.

LG

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

int _ABVAR_1_Tiefe1 = 0 ;
int _ABVAR_2_Tiefe2 = 0 ;

LiquidCrystal_I2C lcd_I2C_27(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{
  pinMode( 1, INPUT);
  lcd_I2C_27.begin (20, 4);
  lcd_I2C_27.setBacklight(HIGH);
}

void loop()
{
  _ABVAR_1_Tiefe1 = map ( analogRead(1) , 0 , 1023 , 0 , 190 )  ;
  _ABVAR_2_Tiefe2 = _ABVAR_1_Tiefe1 ;
  if (digitalRead(1))
  {
    _ABVAR_2_Tiefe2 = 0 ;
  }
  lcd_I2C_27.setCursor( (1) - 1, (1) - 1 );
  lcd_I2C_27.print( "Tiefe" );
  lcd_I2C_27.print( _ABVAR_1_Tiefe1 );
  lcd_I2C_27.setCursor( (1) - 1, (2) - 1 );
  lcd_I2C_27.print( "Tiefe2" );
  lcd_I2C_27.print( _ABVAR_2_Tiefe2 );
}

Bahnhof!

Ich habe überhaupt keine Ahnung, was du meinen könntest....

Warum musst Du diese unklare Beschreibung fast gleichzeitig in 2 Foren absetzen? Du hast doch hier schon gefragt.
Ich helfe Crosspostern nicht.

Gruß Tommy

Einfache Differenzbildung: Du musst Dir beim Drücken des ominösen Tasters den aktuellen Wert von analogRead merken und von da aus dann mitrechnen. Ganz einfache Offset-Rechnung.

Hi Tommy,
habe eines gelöscht, wusste nicht das, dass nicht gern gesehen wird.

--Entschuldigung--

LG

M3tzl3r:

void loop()

{
 _ABVAR_1_Tiefe1 = map ( analogRead(1) , 0 , 1023 , 0 , 190 )  ;
 _ABVAR_2_Tiefe2 = _ABVAR_1_Tiefe1 ;
 if (digitalRead(1))
 {
   _ABVAR_2_Tiefe2 = 0 ;
 }
 lcd_I2C_27.setCursor( (1) - 1, (1) - 1 );
 lcd_I2C_27.print( "Tiefe" );
 lcd_I2C_27.print( _ABVAR_1_Tiefe1 );
 lcd_I2C_27.setCursor( (1) - 1, (2) - 1 );
 lcd_I2C_27.print( "Tiefe2" );
 lcd_I2C_27.print( _ABVAR_2_Tiefe2 );
}

_ABVAR_1_Tiefe1 = map ( analogRead(1) , 0 , 1023 , 0 , 190 ) ; von 1023 auf nur 190 ist ganzschoen grob.
( (1) - 1, (1) - 1 ) deine Schreibweise hat welchen Zweck?
Was soll denn passieren, wenn du dein Poti auf ~500 justierst (durch Taster) und dann in Richtung "-" gedreht wird? Soll der Wert ebenfalls ins negative gehen oder hochzaehlen?

Hi grillgemuese,
der soll dann auch ins - gehen.
Sry für die Schreibweise gibt Ardublock so her.
die Skalierung ist noch nicht so 100%ig richtig..

LG

Das soll wohl so ähnlich sein, wie bei Waagen, wo nach dem Aufstellen des leeren Behälters genullt wird.

Hi ElEspanol,
ja im Prinzip schon


Das soll wohl so ähnlich sein, wie bei Waagen, wo nach dem Aufstellen des leeren Behälters genullt wird.

Dann nimm doch eine Hilfsvariable „offset“. Wenn du den Taster drückst, ist
Offset= _ABVAR_2_Tiefe1
Und danach eine Zeile
_ABVAR_2_Tiefe2 = _ABVAR_2_Tiefe1-offset;

Die _ABVAR_2_Tiefe2 könntest du dir aber auch sparen.

Wobei ich jetzt nicht den Sketch angeschaut habe. Ich gehe aber davon aus, dass
_ABVAR_2_Tiefe1 ist Gesammtstrecke
_ABVAR_2_Tiefe2 ist Nettostrecke

Ja, offset gefällt mir auch, ich habe es tara genannt:

#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>

const byte taster = 2;
int _ABVAR_1_Tiefe1 = 0 ;
int _ABVAR_2_Tiefe2 = 0 ;
int tara = 0;

LiquidCrystal_I2C lcd_I2C_27(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

void setup()
{
  pinMode( taster, INPUT_PULLUP);
  lcd_I2C_27.begin (20, 4);
  lcd_I2C_27.setBacklight(HIGH);
}

void loop()
{
  _ABVAR_1_Tiefe1 = map ( analogRead(A1) , 0 , 1023 , 0 , 190 )  ;
  _ABVAR_2_Tiefe2 = _ABVAR_1_Tiefe1 - tara ;
  if (!digitalRead(taster))
  {
    tara = _ABVAR_1_Tiefe1;
  }
  lcd_I2C_27.setCursor( 0, 0 );
  lcd_I2C_27.print( "Tiefe  = " );
  lcd_I2C_27.print( _ABVAR_1_Tiefe1 );
  lcd_I2C_27.print( "    " );
  lcd_I2C_27.setCursor( 0, 1 );
  lcd_I2C_27.print( "Tiefe2 = " );
  lcd_I2C_27.print( _ABVAR_2_Tiefe2 );
  lcd_I2C_27.print( "    " );
}

Ich würde ja gerne die merkwürdige Schreibweise beim SetCursor verstehen :wink:

Ulli

Warum?

Das Display hat 0,0 bis 19,3

Wenn du nun eben 1,1 bis 20,4 haben willst, weil Menschen eben bei 1 anfangen zu zählen,musst du von den „menschlichen“ Koordinaten jeweils 1 abziehen, um die tatsächlichen für setCursor zu bekommen.
Also die in Klammern (1) sind die „menschlichen“

beeblebrox:
Ich würde ja gerne die merkwürdige Schreibweise beim SetCursor verstehen :wink:

Das ist einfach höhere Mathematik: 1-1=0 und 2-1=1 also

lcd_I2C_27.setCursor( (1) - 1, (1) - 1 ); // entspricht 0, 0
...
lcd_I2C_27.setCursor( (1) - 1, (2) - 1 ); // entspricht 0, 1

q.e.d.

Mir war nicht bewußt, wie „menschlich" Programme sein können, haben sich schließlich Menschen und nicht Kopffüßer, unsere intelligenten Nachfolger, ausgedacht :grin:

ElEspanol:
Warum?

Das Display hat 0,0 bis 19,3

Wenn du nun eben 1,1 bis 20,4 haben willst, weil Menschen eben bei 1 anfangen zu zählen,musst du von den „menschlichen“ Koordinaten jeweils 1 abziehen, um die tatsächlichen für setCursor zu bekommen.
Also die in Klammern (1) sind die „menschlichen“

Puuuh,
danke. Auf die Idee wäre ich nie gekommen. Ich bin zu lange in dem Job :sunglasses:

Ulli

Guten Abend!

Danke agmue, hat super geklappt !

LG
Christian