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:
  • 1 Bewertungen - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Hilfe bei einer Füllstandsanzeige für eine Zisterne
30.05.2015, 18:35 (Dieser Beitrag wurde zuletzt bearbeitet: 30.05.2015 21:27 von jgrothe.)
Beitrag #1
Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hallo,
hat einer von euch mal Lust mir zu helfen
soll eine Füllstandsanzeige für eine Zisterne
werden.
Ausgabe in cm auf TFT_Display und bei niedrigen Stand
Alarm über ein Pin ausgeben.

Leider kein Ultraschall funkt nicht und der Wasserstand
wird nicht eingeblendet.

Code:
// Konstanten
     // Pins fuer USS
    
     int pingPin = 31; // Ping
     int inPin = 33; // Trigger
     //const unsigned int gndPin = 17; // Ground
     // Messintervall in ms
     int messintervall = 100;
     // Alarmpin
     int alarmPin = 39;
     int alarmdistanz = 100; // in cm
     // Variablen
     // Stringvariable für Ausgabe Entfernung
     String numberString = " ";
     // Entfernungswert
     unsigned long cm;

   void setup(){
      
    
    
            //Serial.begin(9600);
            //Serial.println("Display Test..\r\n");
        LCD_Init();
        LCD_SetDisplayDirect(3);
            //LCD_SetOrientation(2);
            //LCD_fillScreen(LCD_GRAY1);
            //LCD_PaintScreen(LCD_BLACK);
              //DisplayDirect = UP2DOWN;
      LCD_DrawString(60,20," cm ",5,LCD_RED);
        LCD_DrawString(20,140," ",5,LCD_BLUE);
        LCD_DrawString(180,40,"Wassertank ",3,LCD_WHITE);
        LCD_DrawString(120,20,"Inhalt in cm ",3,LCD_WHITE);
            
            //LCD_FillRectangle(0,0,239,319,LCD_YELLOW);
        /*
            for(uint8_t x=0;x<200;x++)
        {
            LCD_DrawLine(x,0,x,100,LCD_YELLOW);
        }
            */
        //Read Device ID
        //static uint16_t identifier;
        //uint16_t identifier = LCD_ReadRegister(0x0);
        //Serial.println(identifier,HEX);
    }
    
        
          
    
    
    
    void loop()
  
  {
  // Variablen für Dauer der ping,
      // Und der Abstand Ergebnis in Zoll und Zentimeter:
      long duration, inches, cm;
    
      // Der PING wird mit einem High-Impuls von 2 oder mehr Mikrosekunden ausgelöst.
      // Geben Sie eine kurze LOW Impuls vorher um eine saubere HIGH-Impuls zu gewährleisten:
      pinMode(alarmPin, OUTPUT);
      pinMode(pingPin, OUTPUT);
      digitalWrite(pingPin, LOW);
      delayMicroseconds(2);
      digitalWrite(pingPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(pingPin, LOW);
      // Der gleiche Ping dient dazu, das Signal von der PING)) zu lesen
      // dessen Dauer ist die Zeit (in Mikrosekunden) vom Senden
      // Die Verbindungsgeschwindigkeit mit dem Empfang sein echo off von dem Objekts.
      pinMode(inPin, INPUT);
      duration = pulseIn(inPin, HIGH);
    
      // Hier wird die Zeit in eine entfernung umgewandelt
      cm = microsecondsToCentimeters(duration);
      
       if(cm > 50)
        {
       digitalWrite(alarmPin, HIGH);
        }
       else
       {
       digitalWrite(alarmPin, LOW);
       }
      
    
      delay(100);
    
      }
      
      long microsecondsToInches(long microseconds){
        // Nach Parallax das Datenblatt für den PING))), gibt es
        // 73,746 Mikrosekunden pro Zoll (dh Schall bei 1130 Fuß pro
        // Sekunde). Dies gibt die Wegstrecke vom Ping,
        // Und zurück, so dass wir durch 2 teilen, müssen um den Abstand zum Hindernisses zu bekommen.
        return microseconds / 74 / 2;}
      
      long microsecondsToCentimeters(long microseconds){
        // Die Schallgeschwindigkeit beträgt 340 m / s oder 29 Mikrosekunden pro Zentimeter.
        return microseconds / 29 / 2;}

Ich sage schon mal Danke und hoffe doch auf einen guten Tipp.ConfusedHuh

(30.05.2015 18:35)jgrothe schrieb:  Hallo,
hat einer von euch mal Lust mir zu helfen
soll eine Füllstandsanzeige für eine Zisterne
werden.
Ausgabe in cm auf TFT_Display und bei niedrigen Stand
Alarm über ein Pin ausgeben.

Leider kein Ultraschall funkt nicht und der Wasserstand
wird nicht eingeblendet.

Code:
// Konstanten
     // Pins fuer USS
    
     int pingPin = 31; // Ping
     int inPin = 33; // Trigger
     //const unsigned int gndPin = 17; // Ground
     // Messintervall in ms
     int messintervall = 100;
     // Alarmpin
     int alarmPin = 39;
     int alarmdistanz = 100; // in cm
     // Variablen
     // Stringvariable für Ausgabe Entfernung
     String numberString = " ";
     // Entfernungswert
     unsigned long cm;

   void setup(){
      
    
    
            //Serial.begin(9600);
            //Serial.println("Display Test..\r\n");
        LCD_Init();
        LCD_SetDisplayDirect(3);
            //LCD_SetOrientation(2);
            //LCD_fillScreen(LCD_GRAY1);
            //LCD_PaintScreen(LCD_BLACK);
              //DisplayDirect = UP2DOWN;
      LCD_DrawString(60,20," cm ",5,LCD_RED);
        LCD_DrawString(20,140," ",5,LCD_BLUE);
        LCD_DrawString(180,40,"Wassertank ",3,LCD_WHITE);
        LCD_DrawString(120,20,"Inhalt in cm ",3,LCD_WHITE);
            
            //LCD_FillRectangle(0,0,239,319,LCD_YELLOW);
        /*
            for(uint8_t x=0;x<200;x++)
        {
            LCD_DrawLine(x,0,x,100,LCD_YELLOW);
        }
            */
        //Read Device ID
        //static uint16_t identifier;
        //uint16_t identifier = LCD_ReadRegister(0x0);
        //Serial.println(identifier,HEX);
    }
    
        
          
    
    
    
    void loop()
  
  {
  // Variablen für Dauer der ping,
      // Und der Abstand Ergebnis in Zoll und Zentimeter:
      long duration, inches, cm;
    
      // Der PING wird mit einem High-Impuls von 2 oder mehr Mikrosekunden ausgelöst.
      // Geben Sie eine kurze LOW Impuls vorher um eine saubere HIGH-Impuls zu gewährleisten:
      pinMode(alarmPin, OUTPUT);
      pinMode(pingPin, OUTPUT);
      digitalWrite(pingPin, LOW);
      delayMicroseconds(2);
      digitalWrite(pingPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(pingPin, LOW);
      // Der gleiche Ping dient dazu, das Signal von der PING)) zu lesen
      // dessen Dauer ist die Zeit (in Mikrosekunden) vom Senden
      // Die Verbindungsgeschwindigkeit mit dem Empfang sein echo off von dem Objekts.
      pinMode(inPin, INPUT);
      duration = pulseIn(inPin, HIGH);
    
      // Hier wird die Zeit in eine entfernung umgewandelt
      cm = microsecondsToCentimeters(duration);
      
       if(cm > 50)
        {
       digitalWrite(alarmPin, HIGH);
        }
       else
       {
       digitalWrite(alarmPin, LOW);
       }
      
    
      delay(100);
    
      }
      
      long microsecondsToInches(long microseconds){
        // Nach Parallax das Datenblatt für den PING))), gibt es
        // 73,746 Mikrosekunden pro Zoll (dh Schall bei 1130 Fuß pro
        // Sekunde). Dies gibt die Wegstrecke vom Ping,
        // Und zurück, so dass wir durch 2 teilen, müssen um den Abstand zum Hindernisses zu bekommen.
        return microseconds / 74 / 2;}
      
      long microsecondsToCentimeters(long microseconds){
        // Die Schallgeschwindigkeit beträgt 340 m / s oder 29 Mikrosekunden pro Zentimeter.
        return microseconds / 29 / 2;}

Ich sage schon mal Danke und hoffe doch auf einen guten Tipp.ConfusedHuh

Ach ja das ist für Mega 2560 und HC-SR04


Hallo, wurde noch ´mal überarbeitet leider ohne erfolg
kann einer helfen. Danke
Code:
void setup(){
      
    
    
              //Serial.begin(9600);
              //Serial.println("Display Test..\r\n");
              LCD_Init();
              LCD_SetDisplayDirect(3);
            //LCD_SetOrientation(2);
            //LCD_fillScreen(LCD_GRAY1);
            //LCD_PaintScreen(LCD_BLACK);
              //DisplayDirect = UP2DOWN;
      
            
            //LCD_FillRectangle(0,0,239,319,LCD_YELLOW);
        /*
            for(uint8_t x=0;x<200;x++)
        {
            LCD_DrawLine(x,0,x,100,LCD_YELLOW);
        }
            */
        //Read Device ID
        //static uint16_t identifier;
        //uint16_t identifier = LCD_ReadRegister(0x0);
        //Serial.println(identifier,HEX);
    }
    
        
          
    
    
    
    void loop()
  
  {
  // Variablen für Dauer der ping,
      // Und der Abstand Ergebnis in Zoll und Zentimeter:
      long duration, inches, cm;
    
      // Der PING wird mit einem High-Impuls von 2 oder mehr Mikrosekunden ausgelöst.
      // Geben Sie eine kurze LOW Impuls vorher um eine saubere HIGH-Impuls zu gewährleisten:
      pinMode(alarmPin, OUTPUT);
      pinMode(pingPin, OUTPUT);
      digitalWrite(pingPin, LOW);
      delayMicroseconds(2);
      digitalWrite(pingPin, HIGH);
      delayMicroseconds(10);
      digitalWrite(pingPin, LOW);
      // Der gleiche Ping dient dazu, das Signal von der PING)) zu lesen
      // dessen Dauer ist die Zeit (in Mikrosekunden) vom Senden
      // Die Verbindungsgeschwindigkeit mit dem Empfang sein echo off von dem Objekts.
      pinMode(inPin, INPUT);
      duration = pulseIn(inPin, HIGH);
    
      // Hier wird die Zeit in eine entfernung umgewandelt
      cm = microsecondsToCentimeters(duration);
      
       if(cm > 50)
        {
       digitalWrite(alarmPin, LOW);
        }
       else
       {
       digitalWrite(alarmPin, HIGH);
       }
       {
      LCD_DrawString(60,20,"cm ",5,LCD_RED);
      LCD_DrawString(60,140,"???",4,LCD_YELLOW);
      LCD_DrawString(180,40,"Wassertank ",3,LCD_WHITE);
      LCD_DrawString(120,20,"Inhalt in cm ",3,LCD_WHITE);
            


       }
      
    
      delay(100);
    
      }
      
      long microsecondsToInches(long microseconds){
        // Nach Parallax das Datenblatt für den PING))), gibt es
        // 73,746 Mikrosekunden pro Zoll (dh Schall bei 1130 Fuß pro
        // Sekunde). Dies gibt die Wegstrecke vom Ping,
        // Und zurück, so dass wir durch 2 teilen, müssen um den Abstand zum Hindernisses zu bekommen.
        return microseconds / 74 / 2;}
      
      long microsecondsToCentimeters(long microseconds){
        // Die Schallgeschwindigkeit beträgt 340 m / s oder 29 Mikrosekunden pro Zentimeter.
        return microseconds / 29 / 2;}
CoolHuhUndecided
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.05.2015, 11:18
Beitrag #2
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hallo,
der Code sieht schon etwas eigenartig aus. Die Befehle für pinMode(...) gehören doch meiner Meinung nach in den Setup-Bereich, da sie nur einmal aufgerufen werden müssen.

(30.05.2015 18:35)jgrothe schrieb:  Leider kein Ultraschall funkt nicht und der Wasserstand
wird nicht eingeblendet.

In welcher Zeile Code steht denn die Ausgabe des Füllstandes auf´s Display? Wink

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.05.2015, 12:32 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2015 12:35 von jgrothe.)
Beitrag #3
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hallo, die Ausgabe für cm ??? stehe in der dritten Zeile

pinMode() in der Loop wegen Ultraschall.

Danke das Du hilfst es Funkt jest auch schon der Ultraschall nur die Ausgabe macht
Probleme.
[/code] // Konstanten
// Pins fuer USS

int pingPin = 12; // Echo Ping
int inPin = 11; // Trigger
//const unsigned int gndPin = 17; // Ground
// Messintervall in ms
int messintervall = 100;
// Alarmpin
int alarmPin = 10;
int alarmdistanz = 100; // in cm
// Variablen
// Stringvariable für Ausgabe Entfernung
String numberString = " ";
// Entfernungswert
unsigned long cm;[code]

das ist der neue Belegungs Pin-Plan
und es ist ein Uno 3 nicht mehr Mega 2560

Danke Jörg
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.05.2015, 12:53 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2015 13:11 von torsten_156.)
Beitrag #4
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hallo Jörg,
welchen Fehler erhälst du denn?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.05.2015, 14:18
Beitrag #5
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hi,
ich persönlich würde es erst einmal mit einer Ausgabe auf Serial versuchen. Gib doch einfach mal sowohl die Mikrosekunden als auch die Zentimeter nach dem Messen jeweils über Serial aus. Dann weißt Du zumindest, ob das Ding richtig misst und rechnet.
Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.05.2015, 15:22
Beitrag #6
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Wenn du mit
Code:
LCD_DrawString(60,20,"cm ",5,LCD_RED);

den Füllstand (cm) ausgeben möchtest, sollte so ja nur der String 'cm ' ausgebene werden. Denn so wird ja nur ein String ( "cm ") ausgegeben und nicht die Var cm.
Also, entferne die beiden " und mal sehen was dann kommt. Vermutlich musst du noch cm vom Datentyp long nach string convertieren. Oder es gibt evt. eine Funktion zum Ausgeben von long-Typen (evt. LCD_DrawLong... oder so).

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
31.05.2015, 19:28 (Dieser Beitrag wurde zuletzt bearbeitet: 31.05.2015 19:46 von jgrothe.)
Beitrag #7
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hallo, danke für die guten Ansätze an euch beiden
das ausgeben am seriellen Monitor habe ich schon gemacht
das so wie der Alarm funktionieren nur die Ausgabe auf den
TFT-LCD macht Probleme und ein Fehler wird nicht ausgegeben.

Danke Jörg

Hallo Torsten,
nach ändern auf " LCD_Drawlong(60,140,"cm ",5,LCD_RED);
leider auch eine Fehler Ausgabe.

Arduino: 1.7.3 (Windows 7), Platine: "Arduino Uno"

sketch_may20Display24vorbereitetmitPing1.ino: In Funktion "Leere Schleife () ':

sketch_may20Display24vorbereitetmitPing1.ino: 820: 42: Fehler: »LCD_Drawlong 'wurde in diesem Gültigkeitsbereich deklariert

Fehler beim kompilieren.

Of this Bericht hätte mehr Informationen mit
"Ausführliche Ausgabe während der Kompilierung"
aktiviert in Datei> Einstellungen

Danke JörgAngryAngryAngry
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.06.2015, 07:06
Beitrag #8
RE: Hilfe bei einer Füllstandsanzeige für eine Zisterne
Hallo Jörg,

du hast da ein Klammernpaar zu viel. Und zwar hier:

Code:
{
      LCD_DrawString(60,20,"cm ",5,LCD_RED);
      LCD_DrawString(60,140,"???",4,LCD_YELLOW);
      LCD_DrawString(180,40,"Wassertank ",3,LCD_WHITE);
      LCD_DrawString(120,20,"Inhalt in cm ",3,LCD_WHITE);
            


      }
Entferne mal die beiden (geschweiften) Klammern.

Ok, LCD_Drawlong(...) gibt es nicht. Dann solltest du aus dem Long-Wert 'cm' einen String-Wert machen (Convertierung). Denn dann kann die Funktion "LCD_DrawString(...)" mit diesem Wert umgehen können. Du solltest im Netzt einige Lösungen dazu finden Wink

Gruß
Torsten
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Ausschaltverzögerung bei einer PV Heizung Hans_Maulwurf 27 718 29.11.2016 23:38
Letzter Beitrag: georg01
  Hilfe: IR Remote Steuerung, MSGEQ7 + RGB-LED Streifen dastob 1 120 14.10.2016 21:40
Letzter Beitrag: hotsystems
Sad Ich brauche Hilfe Prosac 4 233 09.10.2016 18:39
Letzter Beitrag: Prosac
  at24c256 Hilfe Gandalf 6 249 29.08.2016 18:59
Letzter Beitrag: MKc
Smile Progammier Neuling Codeschloss bittet um Hilfe Donalonso 2 285 27.08.2016 18:23
Letzter Beitrag: Binatone
  Hilfe gesucht. Webserver Statsiche und Dynamische HTMl Seite b3ta 11 450 22.08.2016 08:07
Letzter Beitrag: b3ta
  Hilfe: Mega2560 - ENC 28J60 - MYSQL Gandalf 1 181 28.07.2016 16:30
Letzter Beitrag: Gandalf
  Innenwiderstand einer Batterie (Rundzelle 1,5V) Einsteiger94 2 206 24.07.2016 11:42
Letzter Beitrag: SkobyMobil
  Selbstfahrender Roboter Programm änderung hilfe ? arekklone 11 543 06.07.2016 14:59
Letzter Beitrag: Binatone
  Fehlermeldung das eine reimundko 3 306 08.06.2016 08:56
Letzter Beitrag: hotsystems

Gehe zu:


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