INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Schwellwert mit Taster ändern
28.03.2016, 15:07
Beitrag #9
RE: Schwellwert mit Taster ändern
Danke für die Tipps,
Das mit den Tastern habe ich fast begriffen. In der Deklaration steht
Code:
int threshold = 0; // Schwellwert
Warum "0". Verändern geht nicht.
Angenommen ich will bei 20 Starten?
So wie ich das jetzt ganz unten im Sketch gemacht habe, drücke ich erst den "Runtertaster". Es fängt bei 30 an, runter zu zählen. Dann kann ich mit "Rauftaster" sofort wieder hochzählen. Fange ich mit "Rauftaster" an, geht es bei "0" los. Logisch kann ich mit "Runtertaster" nur von 30 bis 20 runterzählen.
Gerne wüsste ich was
Code:
const byte pgnd = 11;  // kuenstliche Masse fuer Taster -Eigenheit vom Testaufbau
heißt?
Aber das bestehende Problem ist, dass das LCD Krickel schreibt. Und zwar wenn ich den markierten Absatz unter LOOP einfüge. Lasse ich ihn drinnen, muss ich nach dem Kompilieren den USB trennen, während die Reset Taste gedrückt ist. Dann erscheint die Schrift normal. Aber was bleibt ist, das beim Erwärmen des Temperaturfühlers nur dieser Wert im LCD enorm zittert. Ohne den Absatz nicht.
Externe Spannung hängt dran.
Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int numRows = 2;
const int numCols = 16;
const byte rauftaster = 6;
const byte runtertaster = 9;
const int literPin = A1;
const int inPin = A5; //NTC 10KΩ bei20°C in Serie mit R=10KΩ
int ledPin = 13;//Ausgang bei Temp erreichen auf High
int threshold = 0; // Schwellwert

const int dtimeH = 50;  // Leuchtdauer LED
const int dtimeL = 450; // LED mindest Auszeit = Tastenverzoegerung
const byte led1 = 8;  // LED wo Tastendruck anzeigt
const byte pgnd = 11;  // kuenstliche Masse fuer Taster -Eigenheit vom Testaufbau

void setup() {

  lcd.begin(numCols, numRows);//Start
  pinMode(ledPin, OUTPUT); //Start
  pinMode (rauftaster, INPUT_PULLUP);
  pinMode(runtertaster, INPUT_PULLUP);

  lcd.setCursor(6, 0); //1. Reihe 7.Zeichen
  lcd.print("Liter");  //Schreibt das Wort

  lcd.setCursor(3, 1); //2. Reihe 7.Zeichen
  lcd.print("Temp");  //Schreibt das Wort
  lcd.setCursor(12, 1); //2. Reihe 7.Zeichen
  lcd.print("Wert");  //Schreibt das Wort

  pinMode(led1, OUTPUT);  // initialize digital pin 8 as an output.
  
  pinMode(pgnd, OUTPUT);  // Masse fuer Taster bereitstellen
}
void loop() {


  int val;  // Einen Wert vom Sensor einlesen

// Das int val brauche ich auch für den Temp. Sensor?
//Wenn ich diesen unteren Absatz einfüge, schreibt das LCD Krickel

  int Liter;  // Er heißt Liter
  val = analogRead(literPin);


  if (val >=   0) Liter = map(val,   1, 100,  4,  5);   // Zwischen 1-100    =  0 -  5 Liter
  if (val >= 101) Liter = map(val, 101, 200,  14, 15);   // Zwischen 101-200  =  5 - 15 Liter
  if (val >= 201) Liter = map(val, 201, 300, 20, 21);   // Zwischen 201-300  = 15 - 21 Liter
  if (val >= 301) Liter = map(val, 301, 400, 31, 32);   // Zwischen 301-400  = 21 - 32 Liter
  if (val >= 401) Liter = map(val, 401, 500, 49, 50);   // Zwischen 401-500  = 32 - 50 Liter



  lcd.setCursor(1, 0); //1. Reihe 2. Feld
  lcd.print( Liter); //Schreibe den Wert für Liter

  //Obiger Absatz

  
  int Celsius;  // Er heißt Celsius

  val = analogRead(inPin); //Von A5 einlesen

  Celsius = map(val, 491, 572, 20, 30);

  lcd.setCursor(0, 1); //2. Reihe Anfang
  lcd.print( Celsius); //Schreibe den Wert für Celsius

  lcd.setCursor(9, 1);
  lcd.print(threshold);
  if (Celsius > threshold) //Über 22°
  {
    digitalWrite(ledPin, LOW);   //Schalte Pin D13 Auf High

    delay(30);
  }
  else
  {
    digitalWrite(ledPin, HIGH);
  }
  {
    //#########  Rauftaster gedrueckt ?
    if (!digitalRead(rauftaster)) { // Wenn Tastendruck erkannt dann...
      threshold++;             // inkrement threshold
      if (threshold >= 30)threshold = 20; // threshold Wertebegrenzung 0 - 9

      digitalWrite(led1, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(dtimeH);              // wait for dtimeH
      digitalWrite(led1, LOW);    // turn the LED off by making the voltage LOW
      delay(dtimeL);              // wait for dtimeL
    }
    //Jetzt Runtertaster
    if (!digitalRead(runtertaster))
    {
      threshold--;
      if (threshold <= 20)threshold = 30;
      digitalWrite(led1, HIGH);   // turn the LED on (HIGH is the voltage level)
      delay(dtimeH);              // wait for dtimeH
      digitalWrite(led1, LOW);    // turn the LED off by making the voltage LOW
      delay(dtimeL);              // wait for dtimeL
    }
  }
}

Wenn obiges läuft, kommt noch das "millis" dazu

Danke
Achim

Die Götter müssen verrückt sein.
Ach es gibt gar keine?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.03.2016, 18:23 (Dieser Beitrag wurde zuletzt bearbeitet: 29.03.2016 06:01 von Bitklopfer.)
Beitrag #10
RE: Schwellwert mit Taster ändern
Hi,
(28.03.2016 15:07)malsehen schrieb:  Danke für die Tipps,
Das mit den Tastern habe ich fast begriffen. In der Deklaration steht
Code:
int threshold = 0; // Schwellwert
Warum "0". Verändern geht nicht.
Angenommen ich will bei 20 Starten?
...warum soll das ändern hier nicht gehen ? ..schreib da doch die 20 hin und gut...oder 25 als Mittelwert... die 0 war ein Wert für MEIN Testprogramm...mehr nicht.
.....
Code:
const byte pgnd = 11;  // kuenstliche Masse fuer Taster -Eigenheit vom Testaufbau
Zitat:heißt?
...na das steht doch im Kommentar...das ist eine Eigenheit für MEINEN Testaufbau, du darfst für die Taster als Bezugspotential einfach die Masse = GND nehmen. An meinem Board kann ich nicht so einfach den GND kontaktieren so wie ich es aufgebaut habe.

Zitat:Aber das bestehende Problem ist, dass das LCD Krickel schreibt. Und zwar wenn ich den markierten Absatz unter LOOP einfüge. Lasse ich ihn drinnen, muss ich nach dem Kompilieren den USB trennen, während die Reset Taste gedrückt ist. Dann erscheint die Schrift normal. Aber was bleibt ist, das beim Erwärmen des Temperaturfühlers nur dieser Wert im LCD enorm zittert. Ohne den Absatz nicht.
Externe Spannung hängt dran.
..also das LCD schreibt keine Krickel sondern die Werte werden nicht an die gleiche Stelle geschrieben und zwar in Abhängigkeit von der Anzahl der Ziffern die du ausgibst. Dazu mußt du den Wert erst formatiert in einen String schreiben und dann auf das LCD schreiben dann passt das.

Das geht z.B. so:
Code:
bei den Variablen:
char ausgabestring[8] = "";

//######

in der Loop dann:
    sprintf(ausgabestring,"%5u",unsignedintegerwert);

damit solltest es lösen können.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
28.03.2016, 18:57 (Dieser Beitrag wurde zuletzt bearbeitet: 28.03.2016 19:23 von malsehen.)
Beitrag #11
Smile RE: Schwellwert mit Taster ändern
Danke Bitklopfer,
Ich habe jetzt nur
Code:
char stringD[] = "";
in das Setup geschrieben.
Laut Buch soll das bedeuten
Code:
char stringD() = "Arduino";//DER Compiler initialisiert den String und errechnet seine Größe
Ist
Code:
= "";
gleich
Code:
="Arduino";

Ja, Schwellwert ändern geht jetzt auch. Als ich testete, hatte ich noch mehr Fehler, da ging es nicht.

Aber warum , oder wer hat dann alles richtig formatiert, wenn ich die Reset Taste,während des Spannungs Freischaltens gedrückt habe erledigt?
Das kann ja nur auf dem Arduino selbst gelaufen sein. Und der sich ändernde Temperatur Wert war dann die Überlastung?

Vielen Dank

Achim

Editiert: Habé es probiert. ="Arduino" geht nicht. Aber dein ="";
Danke nochmal!

Die Götter müssen verrückt sein.
Ach es gibt gar keine?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.03.2016, 08:40
Beitrag #12
RE: Schwellwert mit Taster ändern
..ähm also ich hatte das mit dem String zum ausgeben für die Zahlen beschrieben, Texte kann man direkt aufs Display schreiben.
Und dann ist es wichtig das man den String in seiner Größe definiert beim deklarieren, also:
char strinD[8];
bedeutet das hier 8 Byte/Zeichen reserviert werden und das Feld muß immer größer sein als den String wo man mit sprintf() erzeugt weil da noch das Ende Zeichen von der Stringverwaltung mit rein muß.
Und beim ersten mal ausgeben sieht das immer gut aus...nur im Wiederholungsfall und zwar dann wenn sich die Stellenanzahl von dem Wert ändert dann sieht es auf dem Display etwas doof aus.... also einfach mal ausprobieren.
lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
30.03.2016, 20:38
Beitrag #13
RE: Schwellwert mit Taster ändern
Es lief nur kurz gut. Plötzlich wieder Krickel.
Mit den Hinweisen aus dem Kochbuch komme ich nicht klar. Die Überschift ist treffend :
Code:
Sie müssen eine Zahl in einen String umwandeln, etwa um sie auf einem LCD auzugeben.
Aber der Lösungs Code:
Code:
/*
* NumberToString
* Creates a string from a given number
*/

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

char buffer[5];  // long data type has 11 characters (including the
                  // minus sign) and a terminating null

void loop()
{
long value = 12345;
  ltoa(value, buffer, 10);
  Serial.print( value);
  Serial.print(" has  ");
  Serial.print(strlen(buffer));
  Serial.println(" digits");
  value = 123456789;
  ltoa(value, buffer, 10);
  Serial.print( value);
  Serial.print(" has  ");
  Serial.print(strlen(buffer));
  Serial.println(" digits");
  delay(1000);
}
Bringt mich kein Stück weiter. Weil ich einen wechselnden Wert und keine given Number habe. Es haben doch alle variable Werte, weil alle Sensoren nunmal variabel sind. Im Seriellen Monitor wird jetzt
3x nacheinander:
12345 has 5 digits
123456789 has 9 digits
ausgegeben.
danach unendlich:
12345 has 9 digits
123456789 has 9 digits
usw.

Nur, was das soll?

Hinter meinen Temperaturwert habe ich jetzt
Code:
delay (500);
gesetzt. Nun flackert er nicht mehr.
Aber Deine Anregung bekomme ich nicht in meinem Sketch umgesetzt.
Er meckert, das obwohl in der Deklaration geschrieben:
Code:
char ausgabestring[8] = "";
Das "ausgabestring" nicht deklariert ist.


[Bild: 25042463th.jpg]

Ich habe 3 Werte a 2 Stellen an unterschiedlichen Stellen.
Muß jeder Wert formatiert werden?

5 Stunden später,

Achim

Die Götter müssen verrückt sein.
Ach es gibt gar keine?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 03:48
Beitrag #14
RE: Schwellwert mit Taster ändern
(30.03.2016 20:38)malsehen schrieb:  ....
Aber der Lösungs Code:
Code:
....
char buffer[5];  // long data type has 11 characters (including the
                  // minus sign) and a terminating null

void loop()
{
long value = 12345;
  ltoa(value, buffer, 10);
...
..nun ist sich doch klar, wenn du einen buffer mit 5 Zeichen Länge reservierst und dann 10 Zeichen bei itoa reinschreibst dann scheppert es im Speicher....geht nicht....der buffer muß immer länger sein als das was reingeschrieben wird. Ideal wäre die gleiche Anzahl an Zeichen...doch wer rechnet das so genau aus.... ich nicht.

Zitat:..., was das soll?
..JA was soll das wenn du nicht umsetzt was man dir erklärt...Rolleyes

....
Zitat:Er meckert, das obwohl in der Deklaration geschrieben:
Code:
char ausgabestring[8] = "";
Das "ausgabestring" nicht deklariert ist.
...na da mecker ich auch... wenn du ausgabestring durch buffer ersetzt dann solltest das auch überall machen...sonst versteht der Compiler nur Bahnhof.Rolleyes

Zitat:Ich habe 3 Werte a 2 Stellen an unterschiedlichen Stellen.
Muß jeder Wert formatiert werden?
..ja meinst du die anderen Zahlenwerte formatieren sich von alleine...Angel
Hier gilt wie immer der Grundsatz das Computer fürchterlich schnell sind....aber genau so dumm...
....also der macht nur was du ihm sagst was er tun muß...

lgbk

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.03.2016, 20:26
Beitrag #15
RE: Schwellwert mit Taster ändern
Danke an alle die nicht Aufgaben mir, was nicht einfach war, zu helfen.
Die Schaltung läuft jetzt stabil. In`s Gehäuse bekomme ich alles alleine. Immer wenn ich jetzt Boot fahren werde und auf die Tankanzeige sehe, oder die Heizung anspringt, werde ich nett über Euch denken.

Dankeschön

Achim

Die Götter müssen verrückt sein.
Ach es gibt gar keine?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
12.04.2016, 12:18
Beitrag #16
RE: Schwellwert mit Taster ändern
Hallo,

nun habe ich endlich den Tank-Geber bekommen. Folgende Widerstände sind, bedingt durch die Reedkontakte, in Schritten zu messen:

[Bild: 25181175zm.jpg]

Angezeigt werden soll der "Liter" Wert. Das geht auch. Das Problem ist aber, dass beim runterzählen, also von 26 auf 20, auf 14 alles Ok ist. Wenn es weiter runter geht, in den 1 Stelligen Bereich und 8 kommen soll, dann bleibt die 4 von 14 stehen und davor erscheint dann die 8. Weiter runter richtig die 5 aber dahinter bleibt die 4. Also steht dann dort 54.
Die Schaltung ist einfach:
AREF zum 1KΩ weiter zum Poti 250Ω weiter zu GND. Schleifer auf A0. Parallel dazu messe ich die Spannung. Die stimmt mit der Liste überein.

Code:
#include <LiquidCrystal.h>

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
const int numRows = 2;
const int numCols = 16;
const int literPin = A0;
char ausgabestring[8] = "";

void setup() {

  lcd.begin(numCols, numRows);//Start

  lcd.setCursor(8, 0); //1. Reihe 7.Zeichen
  lcd.print("Liter");  //Schreibt das Wort

}

void loop() {
  int val;  // Einen Wert vom Sensor einlesen
  val = analogRead(literPin);; // Einen Wert vom Sensor einlesen

  int Liter;  // Er heißt Liter

  analogReference(INTERNAL);  // Referenzspannung = 1,1V

  if (val >= -10) Liter = map(val, 0, 20,  2,  3);
  if (val >=  23) Liter = map(val, 23, 46,  4, 5);  
  delay(500);
  if (val >=  50) Liter = map(val, 50, 75, 7, 8);
  delay(500);
  if (val >=  83) Liter = map(val, 83, 97, 14, 15);
  delay(500);
  if (val >=  101) Liter = map(val, 101, 111, 20, 21);
  delay(500);
  if (val >= 114) Liter = map(val, 114, 129,  26, 27);  
  delay(500);
  if (val >= 131) Liter = map(val, 131, 152, 32, 33);  
  delay(500);
  if (val >= 156) Liter = map(val, 156, 178, 38, 39);
  delay(500);
  if (val >= 181) Liter = map(val, 181, 240, 44, 45);


  lcd.setCursor(1, 0); //1. Reihe 2. Feld
  sprintf(ausgabestring,"%5u",Liter);
  lcd.print( Liter); //Schreibe den Wert für Liter
  delay(1000);
}

Selbst wenn ich dieses nehme:

Code:
Liter = map(val,0,1023,0, 100);

passiert das genauso.
Ich habe schon extra die ganzen Delays eingefügt, weil ich dachte, es wäre ihm sonst zu schnell. Im Einsatz, wenn das Benzin schwabbert, wird es ja mit den Werten ziemlich wild.

??
Achim

Die Götter müssen verrückt sein.
Ach es gibt gar keine?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Taster als Schalter -> Blinker bino29 8 234 22.06.2017 07:21
Letzter Beitrag: hotsystems
  Sketch ändern für ACS712 Sandro2504 3 181 04.06.2017 05:55
Letzter Beitrag: Bitklopfer
  SD-Library pins ändern. möglich? stefan-87 3 459 14.03.2017 11:46
Letzter Beitrag: Tommy56
Smile Motorsteuerung mit Taster Eggi123 11 601 26.02.2017 15:48
Letzter Beitrag: MicroBahner
  Arduino-UNO LED über Taster digital zum leuchten zu bringen IvKriz 9 487 18.02.2017 08:33
Letzter Beitrag: renid55
  Hilfe bei Taster huber5093 11 487 14.02.2017 19:26
Letzter Beitrag: Tommy56
  8 Taster an einem Pin Kitt 9 665 04.02.2017 18:51
Letzter Beitrag: ardu_arne
  Led Impuls beim Taster betätigen clemens5555 11 643 17.01.2017 20:00
Letzter Beitrag: renid55
  Über drei Taster zwei externe Timer steuern Sidamo 23 850 09.01.2017 20:12
Letzter Beitrag: Tommy56
  Led mit taster ausschalten Frankeg 17 1.035 07.01.2017 21:17
Letzter Beitrag: renid55

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste