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

Ich kann kaum etwas lernen, vergesse das auch wieder. Aber wenn ich etwas immer wieder klar vor Augen habe, kann ich verdammt viel damit anfangen
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!

Ich kann kaum etwas lernen, vergesse das auch wieder. Aber wenn ich etwas immer wieder klar vor Augen habe, kann ich verdammt viel damit anfangen
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

Ich kann kaum etwas lernen, vergesse das auch wieder. Aber wenn ich etwas immer wieder klar vor Augen habe, kann ich verdammt viel damit anfangen
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

Ich kann kaum etwas lernen, vergesse das auch wieder. Aber wenn ich etwas immer wieder klar vor Augen habe, kann ich verdammt viel damit anfangen
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

Ich kann kaum etwas lernen, vergesse das auch wieder. Aber wenn ich etwas immer wieder klar vor Augen habe, kann ich verdammt viel damit anfangen
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  mehrere Taster entprellen Kitt 15 489 24.10.2016 21:17
Letzter Beitrag: georg01
  Taster für mehrere Funktionen matthias3579 5 345 16.08.2016 16:00
Letzter Beitrag: StephanBuerger
  Steuern von 4 Servo mittels eines Taster und eines Potis Jackie09 17 748 16.07.2016 11:43
Letzter Beitrag: Binatone
  3 Schrittmotoren, 2 LED's 1 Taster cichla 0 388 31.03.2016 15:21
Letzter Beitrag: cichla
  Arduino Alarmanlage mit Taster erweitern Vengance 0 515 22.03.2016 17:54
Letzter Beitrag: Vengance
  Taster abfragen Rudi 3 683 25.02.2016 14:03
Letzter Beitrag: hotsystems
  digitalOutputpin mit Taster an- oder ausschalten Raptor 2 564 26.12.2015 20:59
Letzter Beitrag: torsten_156
  Problem mit Taster eddykett 0 777 23.08.2015 10:16
Letzter Beitrag: eddykett
  Taster-Programm TheTerrawr 2 1.053 06.08.2015 16:24
Letzter Beitrag: TheTerrawr
  Schalter als Taster perfekte Lösung? julius858 4 911 28.07.2015 11:44
Letzter Beitrag: Thorsten Pferdekämper

Gehe zu:


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