Show Posts
Pages: 1 [2] 3 4 ... 8
16  International / Deutsch / Re: Nicht alle Libarys werden in der IDE angezeigt on: November 25, 2013, 04:58:29 pm
Hallo
vielen Dank für die Antworten .
So wie es aussieht lässt sich das Problem nicht beheben aber jetzt bin ich einwenig schlauer.

Nochmals Danke Rudi
17  International / Deutsch / Nicht alle Libarys werden in der IDE angezeigt on: November 24, 2013, 03:53:00 pm
Hallo Zusammen

ich benutze die IDE 1.0 unter Linux 12.04 LTS

und habe ein kleines Problem:

Es werden in der IDE unter  import Libary nicht alle Libarys die ich ins Verzeichnis kopiert habe angezeigt.


- Wenn das Fenster aufklappt dann reicht die Fläche von ganz Oben bis ganz Unten auf dem Bildschirm.
- Es sieht so aus als ob die Biblioteken nicht zwei-Spaltig angezeigt werden können.
- Seltsamerweise werden aber nicht die letzten oder Ersten Bibliotheken abgeschnitten.
- Unter den angezeigten Libarys sind auch welche die ich selber reinkopiert habe.
- Wenn ich im Porogrammfenster die Lib von hand eintrage ( #include ) dann wird die Lib auch erkannt ( rote Farbe )
   und die Kompeilierung funktioniert dann auch.
- Unter Exampels werden auch nicht alle Libs angezeigt aber immerhin mehr als unter Import Libarys.

Vieleicht kann mir ja jemand helfen Grüße Rudi
18  International / Deutsch / Re: Lipo überwachung on: April 01, 2013, 04:00:58 pm
Hi Alex

Das Problem ist doch das dass bei Allen, außer der Ersten Zelle, die jeweiligen Spannungen nicht auf Masse bezogen sind .
Der Ardu die Spannungsmessung aber gegen Masse macht.

Wenn Du die einzelnen Zellen mittels eines Operationsverstärker misst und den Ausgang dann mit dem Eingängen des Arduinos misst.
Der OPV misst die Differenzspannung zwischen seinen zwei Eingängen und gibt diese Spannung ( wenn seine Verstärkung auf 1 eingestellt ist ) am Ausgang gegen Masse aus.
Es währe auch möglich die Spannung der ersten Zelle gegen Masse messen -> Zellenspannung Zelle 1

                                       die Spannung der ersten und der zweiten Zelle gegen Masse messen und die
                                                              Spannung   der ersten Zelle abziehen-> Zellenspannung Zelle 2

u.s.w.

Aber Achtung die Spannung am Eingang darf 5V nicht überschreiten also mit Spannungsteilern arbeiten.
19  International / Deutsch / Re: Arduino Oszilloscope bauen on: March 24, 2013, 05:22:25 pm
Hi zusammen

also übertragen lässt er sich nur hab ich noch keine Anzeige muss mal die Verdrahtung überprüfen.
Da gibts auch noch zwei Ungereimtheiten zwischen Plan und meinem Display.
Aber jetzt ist Feierabend denn morgen gehts wieder zur Arbeit
20  International / Deutsch / Re: Arduino Oszilloscope bauen on: March 24, 2013, 04:02:44 pm
Hi Uwe

danke für die schnelle Antwort.
Ich dachte nur dass der Sketch für nen UNO zu groß währe.
Ich lese aus deiner Antwort dass es geht dann werde ich das mal probieren.

Grüße Rudi
21  International / Deutsch / Arduino Oszilloscope bauen on: March 24, 2013, 02:07:57 pm
Hallo Zusammen

Ich möchte mir folgendes Oszi bauen: http://n.mtng.org/ele/arduino/oscillo.html

Kann ich dieses Oszi mit einem Uno realisieren wohl eher nicht hier nochmals der Sketch:

Code:
/*
 * Arduino Oscilloscope using a graphic LCD
 * The max sampling rates are 4.3ksps with 2 channels and 8.6ksps with a channel.
 * Copyright (c) 2009, Noriaki Mitsunaga
 */

#include <ks0108.h>
#include <Arial14.h>  // font definitions

#define txtLINE0   0
#define txtLINE1   16
#define txtLINE2   30
#define txtLINE3   46

const int LCD_WIDTH = 128;
const int LCD_HEIGHT = 64;
const int SAMPLES = 100;
const int ad_sw = 3;                    // Analog 3 pin for switches
const int ad_ch0 = 4;                   // Analog 4 pin for channel 0
const int ad_ch1 = 5;                   // Analog 5 pin for channel 1
const unsigned long VREF[] = {49, 98, 244, 488, 976}; // reference voltage 5.0V ->  50 :   1V/div range (100mV/dot)
                                        //                        -> 100 : 0.5V/div
                                        //                        -> 250 : 0.2V/div
                                        //                        -> 500 : 100mV/div
                                        //                       -> 1000 :  50mV/div
const int MILLIVOL_per_dot[] = {100, 50, 20, 10, 5}; // mV/dot
const int MODE_ON = 0;
const int MODE_INV = 1;
const int MODE_OFF = 2;
const char *Modes[] = {"ON", "INV", "OFF"};
const int TRIG_AUTO = 0;
const int TRIG_NORM = 1;
const int TRIG_SCAN = 2;
const int TRIG_ONE  = 3;
const char *TRIG_Modes[] = {"Auto", "Norm", "Scan", "One"};
const int TRIG_E_UP = 0;
const int TRIG_E_DN = 1;
#define RATE_MIN 0
#define RATE_MAX 13
const char *Rates[] = {"F1-1", "F1-2 ", "F2  ", "5ms", "10ms", "20ms", "50ms", "0.1s", "0.2s", "0.5s", "1s", "2s", "5s", "10s"};
#define RANGE_MIN 0
#define RANGE_MAX 4
const char *Ranges[] = {" 1V ", "0.5V", "0.2V", "0.1V", "50mV"};
byte range0 = RANGE_MIN;
byte range1 = RANGE_MIN;
byte ch0_mode = 0, ch1_mode = 0, rate = 5;
byte trig_mode = TRIG_AUTO, trig_lv = 30, trig_edge = TRIG_E_UP, trig_ch = 0;
byte Start = 1, menu = 0;
short ch0_off = 0, ch1_off = 0;
unsigned long startMillis;
byte data[4][SAMPLES];                   // keep twice of the number of channels to make it a double buffer
byte sample=0;                           // index for double buffer

void setup(){
  GLCD.Init(NON_INVERTED);   // initialise the library, non inverted writes pixels onto a clear screen
  GLCD.SelectFont(Arial_14); // you can also make your own fonts, see playground for details  
 
  Serial.begin(9600);
  GLCD.ClearScreen();
  DrawGrid();
  DrawText();
}

void CheckSW() {
  static unsigned short oain[2];
  static unsigned long Millis = 0, oMillis = 0;
  unsigned long ms;
  unsigned short ain = analogRead(ad_sw);
  
  ms = millis();
  if ((ms - Millis)<5)
    return;
  Millis = ms;
  
  if (!(abs(oain[0] - oain[1])>10 && abs(oain[1] - ain)<2)) {
    oain[0] = oain[1];
    oain[1] = ain;
    return;
  }
  oain[0] = oain[1];
  oain[1] = ain;
  
  if (ain > 950 || (Millis - oMillis)<200)
    return;
  oMillis = Millis;

  // Serial.println(ain);
  
  int sw;
  for (sw = 0; sw < 10; sw ++) {
    const int sw_lv[] = {889, 800, 700, 611, 514, 419, 338, 231, 132, 70};
    if (ain > sw_lv[sw])
      break;
  }
  // Serial.println(sw);
  
  switch (menu) {
  case 0:
  default:
    menu0_sw(sw);
    break;
  case 1:
    menu1_sw(sw);
    break;
  case 2:
    menu2_sw(sw);
    break;
  }
  
  DrawText();
}

void menu0_sw(int sw) {  
  switch (sw) {
   case 0:
    // START/HOLD
    if (Start)
       Start = 0;
     else
       Start = 1;
    break;
   case 1:
    // CH0 RANGE -
    if (range0 < RANGE_MAX)
      range0 ++;
    break;
   case 2:
    // CH1 RANGE -
    if (range1 < RANGE_MAX)
      range1 ++;
    break;
   case 3:
    // RATE FAST
    if (rate > 0)
      rate --;
    break;
   case 4:
    // TRIG MODE
    if (trig_mode < TRIG_ONE)
      trig_mode ++;
    else
      trig_mode = 0;
    break;
   case 5:
    // SEND
    SendData();
    break;
   case 6:
    // TRIG MODE
    if (trig_mode > 0)
      trig_mode --;
    else
      trig_mode = TRIG_ONE;
    break;
   case 7:
    // RATE SLOW
    if (rate < RATE_MAX)
      rate ++;
    break;
   case 8:
    // CH1 RANGE +
    if (range1 > 0)
      range1 --;
    break;
   case 9:
    // CH0 RANGE +
    if (range0 > 0)
      range0 --;
    break;
   case 10:
   default:
    // MENU SW
    menu ++;
     break;
  }
}

void menu1_sw(int sw) {  
  switch (sw) {
   case 0:
    // START/HOLD
    if (Start)
       Start = 0;
     else
       Start = 1;
    break;
   case 1:
    // CH0 offset +
    if (ch0_off < 1023)
      ch0_off += 1024/VREF[range0];
    break;
   case 2:
    // CH1 offset +
    if (ch1_off < 1023)
      ch1_off += 1024/VREF[range1];
    break;
   case 3:
    // trigger level +
    if (trig_lv < 60)
      trig_lv ++;
    break;
   case 4:
   case 6:
    // TRIG EDGE
    if (trig_edge == TRIG_E_UP)
      trig_edge = TRIG_E_DN;
    else
      trig_edge = TRIG_E_UP;
    break;
   case 5:
    // SEND
    SendData();
    break;
   case 7:
    // trigger level -
    if (trig_lv > 0)
      trig_lv --;
    break;
   case 8:
    // CH1 OFF -
    if (ch1_off > -1023)
      ch1_off -= 1024/VREF[range1];
    break;
   case 9:
    // CH0 OFF -
    if (ch0_off > -1023)
      ch0_off -= 1024/VREF[range0];
    break;
   case 10:
   default:
    // MENU SW
    menu ++;
     break;
  }
}

void menu2_sw(int sw) {  
  switch (sw) {
   case 0:
    // START/HOLD
    if (Start)
       Start = 0;
     else
       Start = 1;
    break;
   case 1:
    if (ch0_mode < 2)
      ch0_mode ++;
    break;
   case 2:
    if (ch1_mode < 2)
      ch1_mode ++;
    break;
   case 3:
   case 7:
    // TRIG channel
    if (trig_ch == 0)
      trig_ch = 1;
    else
      trig_ch = 0;
    break;
   case 5:
    // SEND
    SendData();
    break;
   case 8:
    if (ch1_mode > 0)
      ch1_mode --;
    break;
   case 9:
    if (ch0_mode > 0)
      ch0_mode --;
    break;
   case 10:
    // MENU SW
    menu = 0;
     break;
   case 4:
   case 6:
   default:
    // none
    break;
  }
}

void SendData() {
  Serial.print(Rates[rate]);
  Serial.println("/div (10 samples)");
  for (int i=0; i<SAMPLES; i ++) {
      Serial.print(data[sample + 0][i]*MILLIVOL_per_dot[range0]);
      Serial.print(" ");
      Serial.println(data[sample + 1][i]*MILLIVOL_per_dot[range1]);
   }
}

void DrawGrid() {
    for (int x=0; x<=SAMPLES; x += 2) { // Horizontal Line
      for (int y=0; y<=60; y += 10) {
        GLCD.SetDot(x, y, BLACK);
        CheckSW();
      }
    }
    for (int x=0; x<=SAMPLES; x += 10 ) { // Vertical Line
      for (int y=0; y<=60; y += 2) {
        GLCD.SetDot(x, y, BLACK);
        CheckSW();
      }
    }
}

void DrawText() {
    GLCD.FillRect(101,txtLINE0,28,64, WHITE);  // clear text area that will be drawn below
Leider musste ich den Sketch einkürzen ( die  Zeilen am Schluss) da sonst die zulässige Zeichenlänge überschritten wird.

Eventuell kann jemand ja was aus den Code oder dem Plan rauslesen.
22  International / Deutsch / Re: DS18B20 als defekt erkennen on: February 17, 2013, 04:03:44 pm
Hallo mwyraz

danke für die Antwort.
Die -127°C überprüfe ich schon in meinem Sketch und wenn ich dann noch die 85°C auswerte dann müssten eigentlich alle Fehler erschlagen sein.
Die Differenz zwischen den Sensoren kann ich leider nicht auswerten da sie sich in zwei verschiedenen Speichern sind und deshalb schon von Haus aus verschiedene Temperaturwerte haben können.

Vielen Dank Rudi
23  International / Deutsch / Re: IDE 1.0 unter Ubuntu Fehlermeldungen on: February 16, 2013, 07:51:04 pm
Hi

nur kann ich die nicht installieren . Bin halt in Linux noch Anfänger.
So installiere ich die IDE immer unter der Ubuntu Softwareverwaltung und da wird nur die Version 1.0 angeboten aber jetzt klappst ja .

Danke noch für alle Hilfe
24  International / Deutsch / Re: IDE 1.0 unter Ubuntu Fehlermeldungen on: February 16, 2013, 06:43:18 pm
Wow super
das Lib-Ubdate hat geholfen


Besten Dank Für die Hilfe
25  International / Deutsch / Re: IDE 1.0 unter Ubuntu Fehlermeldungen on: February 16, 2013, 06:35:18 pm
Geht das denn bei Ubuntu ( die 1.0 IDE ist meines Wissen die aktuellste die für Linux erhältlich ist )
Di Lib werde ich aktualisieren.
26  International / Deutsch / Re: Anfänger Braucht hilfe mit Reedsensor! on: February 16, 2013, 06:28:26 pm
Hi

da die Mopedzündungen oft nur einen festen Zündzeitpunkt haben wäre , ein Zündzeitpunkt der nur aufgrund der Drehzahl verändert wird, auf jeden Fall ein Fortschritt.
Ichhabe mir da auch schon einige Gedanken gemacht denn eine Zündung für Modellmotoren wollte ich mal bauen.
Es ist aber nicht so einfach den Zündzeitpunkt zu berechnen.
denn man kann den Zündimpuls nicht nur um eine bestimmte Zeit verzögern denn wenn sich die Drehzahl verändert dann verändert sich auch der zeitliche Abstand zwischen den Zündungen.
Ist dann die Zeitverzögerung konstant dann wandert der Zündzeitpunkt z.B. bei steigender Drehzahl nach spät und das wäre kontraproduktiv da ja eher eine frühzeitiger Zundzeitpunkt erforderlich wäre.
Ich habe mir da folgendes ausgedacht.
- Der Controller misst die Dauer einer Umdrehung
- er unterteilt dann jede Umdrehung in z.B. 36 gleiche Zeitabschnitte
- mittels der Drehzahl errechnet er die erforderliche Vorzündung
- diese Zeit fügt er dem nächsten Zündimpuls hinzu

Wie du siehst ist es nicht so einfach aber es ist durchaus machbar denke ich in diesem Link ist es auch beschrieben:http://www.sportdevices.com/ignition/ignition.htm

Ein Reedsensor ist eigentlich ungeeignet denn er unterliegt einem Verschleiß und bei den vielen Schaltungen wird er nicht lange durchhalten auch prellt dieser sowie hat auch Schaltverzögerungen die bei den Schaltgeschwindigkeiten wahrscheinlich schon sehr relevent sind.Außerdem ist die Schaltgeschwindigkeit und damit die maximale Drehzahl begrenzt
27  International / Deutsch / Re: DS18B20 als defekt erkennen on: February 16, 2013, 06:08:51 pm
Hallo

Danke für die Antwort.
Das hört sich interessant an. Doch leider reichen meine bescheidenen Kenntnisse noch nicht aus diese Befehlsfolge zu verstehen.
Kannst Du mir die Befehle näher beschreiben?
28  International / Deutsch / IDE 1.0 unter Ubuntu Fehlermeldungen on: February 16, 2013, 05:59:44 pm
Hallo

da ich mittlerweile fast nur noch Ubuntu nutze möchte ich auch die Arduino Programmierumgebung auch unter Linux nutzen.
Doch leider spuckt diese viele Fehlermeldungen aus unter Win funktioniert die Kompilierung.
Hier mal die Meldungen:

Code:
In file included from /usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:191:0,
                 from /usr/share/arduino/libraries/DS18S20/OneWire.cpp:66:
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:116:83: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, const char*)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:115:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, const String&)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:117:73: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, char)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:116:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, const char*)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:118:84: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, unsigned char)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:117:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, char)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:119:74: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, int)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:118:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, unsigned char)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:120:83: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, unsigned int)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:119:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, int)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:121:75: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, long int)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:120:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, unsigned int)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:122:84: error: declaration of C function ‘StringSumHelper& operator+(const StringSumHelper&, long unsigned int)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/WString.h:121:27: error: previous declaration ‘StringSumHelper& operator+(const StringSumHelper&, long int)’ here
In file included from /usr/share/arduino/libraries/DS18S20/OneWire.cpp:66:0:
/usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:195:33: error: declaration of C function ‘uint16_t makeWord(byte, byte)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:194:10: error: previous declaration ‘uint16_t makeWord(uint16_t)’ here
/usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:205:17: error: declaration of C function ‘long int random(long int)’ conflicts with
/usr/lib/gcc/avr/4.5.3/../../../avr/include/stdlib.h:504:13: error: previous declaration ‘long int random()’ here
/usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:206:23: error: declaration of C function ‘long int random(long int, long int)’ conflicts with
/usr/share/arduino/hardware/arduino/cores/arduino/Arduino.h:205:6: error: previous declaration ‘long int random(long int)’ here

Kann mir da jemand weiter helfen.
29  International / Deutsch / Re: MiniMover5 Versuchsprojekt on: February 16, 2013, 06:50:19 am
Hi

ich hab noch nie Schrittmotoren mittels Arduino angesteuert deshalb fehlt mir da die direkte Erfahrung aber was ich weiß müssen Schrittmotoren mittels einer Rampe beschleunigt und abgebremst werden ob das die Lib oder die Hardware erledigt oder das das Programm macht kann ich nicht sagen aber es sieht so aus als ob der Schrittmotor bei höheren Drehraten einige Schritte überspringt .
Dies ist das  Verhalten wenn keine Rampen verwendet werden.
Die maximale Drehzahl ist auch begrenzt und hängt auch von der Belastung und der Versorgungsspannung ab.
30  International / Deutsch / Re: DS18B20 als defekt erkennen on: February 11, 2013, 02:39:58 pm
Hi

jetzt komme ich endlich an den Sketch.

Code:
/*
  Differenztemperatursteuerung Sonnenkolektor mit 1XPT100 im Kollektor
                                                  1XDS18B20 im Speicher 1
                                                  1XDS18B20 im Speicher 2
*/

// Laden der Libary:
#include <LiquidCrystal.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// initialisieren der LCD Pins ( Für das Orginal Arduino-Pad )
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);


#define ONE_WIRE_BUS A3

///char buffer[20] = "";                                     // Speicherbereich für Datenkonvertierung

OneWire oneWire(ONE_WIRE_BUS);                            // Library für Datenleitung des Tempatursensors Dallas DS18xx
DallasTemperature sensors(&oneWire);


//die Variablen deklarieren

float tempK;
float tempS1;
float tempS2;
int tempPin1 = 1;
int Pumpe1 = 13;
int Pumpe2 = 12;
int SpeichertempPin1 = A3;        //Temperatur SpeichertempPin1 wird an Analogpin3 angeschlossen
int DifferenztemperaturS1 = 0;      //Hier nichts eingeben
int DifferenztemperaturS2 = 0;      //Hier nichts eingeben
int Schalttemperatur = 14;         //Hier die Schalttemperatur der Differenz Kolektor -> Speicher, bei der die Pumpe gestartet wird, eingeben
int SpeicherTempAusStufe1 = 50; //Hier schaltet die Ladund auf den anderen Speicher um
int SpeicherTempladebereit = 70;//Hier schaltet die Ladepumpe wieder ein
int SpeicherTempAusVoll = 75; //Hier schaltet die Ladung entgültig aus
int SpeicheTempVollwiederBereit =31; //Hier ist der Speiche wieder bereit für die Ladung Stufe 1
int SpeicherTempMax = 85;         //Hier die Maxtemperatur des Speichers, bei der die Pumpe ausgeschaltet wird und eine Fehlermeldung ausgegebeb wird ( muss quittiert werden ) eingeben
int KolektorTempMax = 130;        //Hier die Maxtemperatur des Kolektors, bei der die Pumpe ausgeschaltet wird  und eine Fehlermeldung ausgegebeb wird ( muss quittiert werden ) eingeben
int KolektorTempMaxHysterese = 2; //Hier die Hysterese der Ausschaltemperatur des Kolektors, bei der die Pumpe wieder eingeschaltet wird, eingeben
int SpeicherTempUnplausibel = 8; //Unter 8°C ist Meßwert im Speicher unplausibel
int FehlereldungSpeicher1MaxVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
int FehlereldungSpeicher2MaxVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
int FehlereldungSpeicher1UnplausibelVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
int FehlereldungSpeicher2UnplausibelVariable = 0; //zum speichern des Fehlers auch wenn die Fehlerursache wieder verschwindet
// Datendraht an Pin A3
#define ONE_WIRE_BUS A3


DeviceAddress SensorS1 = { 0x28, 0xB2, 0x4B, 0xA1, 0x03, 0x00, 0x00, 0x2C };


DeviceAddress SensorS2 = { 0x28, 0xF2, 0x75, 0xA1, 0x03, 0x00, 0x00, 0x7F };


[font=Verdana]hier oben sind die Zwei Sensoren die an einem Eingang hängen sie werden durch die Adresse identifiziert . Es müßte doch möglich sein über diese Adressen azufragen ob die Sensoren vorhanden sind[/font]



void setup(){
  
  byte addr[8];  
  Serial.begin(9600);
  sensors.begin();
  sensors.setResolution(SensorS1, 10);
  sensors.setResolution(SensorS2, 10);
  
  
  
  
  
  

  pinMode (Pumpe1, OUTPUT);
  pinMode (Pumpe2, OUTPUT);
}

void loop(){
  
  //Start Abfrage DS18B20
  sensors.requestTemperatures();
  
  //Temperaturen DS18B20 in Variable ablegen
  float tempS1 = sensors.getTempC(SensorS1); //zwischenspeichern in Variable tempZ1
  float tempS2 = sensors.getTempC(SensorS2); //zwischenspeichern in Variable tempZ2
  
  
  sensors.requestTemperatures();  
  
 
   lcd.begin(20, 4);//LCD hat 20 Zeichen und 4 Spalten
  
  
  
 
  
  // das Ergebnis ans Display senden
 
 
 
 
  
  if(DifferenztemperaturS1  > ( Schalttemperatur + 2 ) && tempS1 < SpeicherTempladebereit && tempK < KolektorTempMax - KolektorTempMaxHysterese) // Pumpe einschalten für Stufe1
  digitalWrite(Pumpe1, HIGH); // Pumpe wird eingeschaltet Pin 13
 
 if(DifferenztemperaturS1  > ( Schalttemperatur + 2 ) && tempS1 < SpeicheTempVollwiederBereit && tempK < KolektorTempMax - KolektorTempMaxHysterese) // Pumpe einschalten für Stufe1
  digitalWrite(Pumpe1, HIGH); // Pumpe wird eingeschaltet Pin 13
 
  if(DifferenztemperaturS1 < ( Schalttemperatur - 2 )  || FehlereldungSpeicher1MaxVariable == 1 || tempK > KolektorTempMax || tempS1 < SpeicherTempUnplausibel || tempS1 > SpeicherTempAusStufe1) // Pumpe abschalten
  digitalWrite(Pumpe1, LOW); // Pumpe wird ausgeschaltet Pin 13
  
  if(DifferenztemperaturS1 < ( Schalttemperatur - 2 )  || FehlereldungSpeicher1MaxVariable == 1 || tempK > KolektorTempMax || tempS1 < SpeicherTempUnplausibel || tempS1 > SpeicherTempAusVoll) // Pumpe abschalten
  digitalWrite(Pumpe1, LOW); // Pumpe wird ausgeschaltet Pin 13
  
  //Betriebsmeldung in Zeile 4
 lcd.setCursor(13, 1);
 if(tempS1 < SpeicherTempMax & FehlereldungSpeicher1MaxVariable == 0){ //wenn diese zwei Störungsmeldungen nicht anstehen werden die Betriebsmeldungen geschrieben
 lcd.setCursor (3,2);
 lcd.print(digitalRead(Pumpe1) == HIGH? "laden":"warten"); // Anzeige Beladen oder Standby
 lcd.setCursor (0, 2);
 lcd.write ("S1-");}
 if (tempS1 > SpeicherTempAusStufe1){ //Die Betriebsmeldung Speicher Stufe1 wird geschrieben
 lcd.write("Stufe1   ");}
  
 
  
  (DifferenztemperaturS1 = tempK - tempS1);
  (DifferenztemperaturS2 = tempK - tempS2);
  
  lcd.setCursor(0, 3);
  lcd.print("Diff=") ;
  if (DifferenztemperaturS1 > 0){    // Der Differenztemperaturwert wird nur geschrieben wenn er positiv ist
  lcd.setCursor(5, 3);
  lcd.print(DifferenztemperaturS1,1); // Die Differenztemperatur wird geschrieben
  lcd.print("K   ");}
  else
  lcd.setCursor(6, 3);
  lcd.print("<0");     //Wenn die Differenztemperatur negativ ist wird dies geschrieben
  
  
// Anzeige der Speichertemperatur und der Speicher1 Fehlermeldungen

lcd.setCursor(0, 1);
  lcd.print("S1=");
  lcd.setCursor(3, 1);
  lcd.print(tempS1,1);// Ausgabe des Variablen S1 Inhalt, die 1 sind die Anzahl der Stellen nach Komma
  lcd.write(0xD0 + 15); // das ° Zeichen wird geschrieben
  lcd.write("C");
 
 
  
 
  
  if(tempS2 < SpeicherTempMax & FehlereldungSpeicher1MaxVariable == 0){ //wenn diese zwei Störungsmeldungen nicht anstehen werden die Betriebsmeldungen geschrieben
 lcd.setCursor (11,2);
 lcd.write ("S2-");
 lcd.print(digitalRead(Pumpe2) == HIGH? "laden":"warten"); // Anzeige Beladen oder Standby
  }
 
 
  lcd.setCursor(0, 2);
  lcd.write("S1-");
if (tempS1 > SpeicherTempAusStufe1){ //Die Betriebsmeldung Speicher Stufe1 wird geschrieben
lcd.write("Stufe1");}
if (tempS1 > SpeicherTempAusVoll){ //Die Betriebsmeldung Speicher Voll wird geschrieben
lcd.write("Voll  ");}  
 if(tempS1 > SpeicherTempMax)(  // Die Fehlermeldung UebtmpSp wird geschrieben
 FehlereldungSpeicher1MaxVariable = 1);
  
 if (FehlereldungSpeicher1MaxVariable == 1){
 lcd.setCursor(0, 3);
 lcd.write("UebertempSp1");}
 
  lcd.setCursor(11, 3);
  lcd.print("Diff=") ;
  if (DifferenztemperaturS2 > 0){    // Der Differenztemperaturwert wird nur geschrieben wenn er positiv ist
  lcd.setCursor(16, 3);
  lcd.print(DifferenztemperaturS2,1); // Die Differenztemperatur wird geschrieben
  lcd.print("K");}
  else
  lcd.setCursor(17, 3);
  lcd.print("<0");     //Wenn die Differenztemperatur negativ ist wird dies geschrieben
 
 
 // Anzeige der Speichertemperatur und der Speicher2 Fehlermeldungen
 
  lcd.setCursor(11, 1);
  lcd.print("S2=");
  lcd.setCursor(14, 1);
  lcd.print(tempS2,1);// Ausgabe des Variablen S2 Inhalt, die 1 sind die Anzahl der Stellen nach Komma
  lcd.write(0xD0 + 15); // das ° Zeichen wird geschrieben
  lcd.write("C");
  
  
  //  Stufe1 Speicher1 wird bis zu 35°C geladen
   if(DifferenztemperaturS2 > ( Schalttemperatur + 3 ) && tempS2 < SpeicherTempladebereit  && tempK < KolektorTempMax - KolektorTempMaxHysterese && digitalRead(Pumpe1) == LOW && tempS2 < 35 ) // Pumpe einschalten
  digitalWrite(Pumpe2, HIGH); // Pumpe2 wird eingeschaltet füe Stufe1Pin 12

 if(DifferenztemperaturS2 < ( Schalttemperatur -2 )  || FehlereldungSpeicher2MaxVariable == 1 || tempK > KolektorTempMax || tempS2 < SpeicherTempUnplausibel || tempS2 > SpeicherTempMax || tempS2 > SpeicherTempAusStufe1 || digitalRead(Pumpe1) == HIGH || tempS2 > 30 ) // Pumpe abschalten
  digitalWrite(Pumpe2, LOW); // Pumpe2 wird ausgeschaltet für Stufe1 Pin 12

  
   if(DifferenztemperaturS2 > ( Schalttemperatur + 3 ) && tempS2 < SpeicherTempladebereit  && tempK < KolektorTempMax - KolektorTempMaxHysterese && digitalRead(Pumpe1) == LOW && tempS1 > SpeicherTempladebereit ) // Pumpe einschalten
  digitalWrite(Pumpe2, HIGH); // Pumpe2 wird eingeschaltet füe Stufe1Pin 12
  
  if(DifferenztemperaturS2 < ( Schalttemperatur -2 )  || FehlereldungSpeicher2MaxVariable == 1 || tempK > KolektorTempMax || tempS2 < SpeicherTempUnplausibel || tempS2 > SpeicherTempMax || tempS2 > SpeicherTempAusStufe1 || digitalRead(Pumpe1) == HIGH ) // Pumpe abschalten
  digitalWrite(Pumpe2, LOW); // Pumpe2 wird ausgeschaltet für Stufe1 Pin 12
  
  

ich habe den letzten Teil des Sketches weggelassen da er sonst zu groß ist.
Er ist auch ziemlich unübersichtlich aber ich bin gerade am überarbeiten.

Pages: 1 [2] 3 4 ... 8