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
Brennersteuerung
19.12.2013, 17:22
Beitrag #41
RE: Brennersteuerung
Hallo Ricardo,
heute ist ein nagelneues Display hier angekommen.
Ohne Rechnung.
Kann von Dir sein oder auch nicht, da ich ja zuvor eins von bestellt habe, wo die Lieferzeit recht lang ist..
Dieses ist aus Berl.
So, jetzt muß ich da erstmal einen EInstieg finden ;-)
Gruß Joe

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2013, 04:57 (Dieser Beitrag wurde zuletzt bearbeitet: 24.12.2013 14:56 von JoeDorm.)
Beitrag #42
RE: Brennersteuerung
Hallo Ricardo,

habe experimentiert.
Display geht gut,
Touch hat Probleme bei der Initialisierung,

Betreibe den Mega+Display mit Vcc über USB-Kabel.
Habe aber auch mit einem Batteriepack getestet, bei gleichem Ergebnis.

Reset(ausschalten und einschalten) bringt beim Touch nachfolgend merkwürdige Koordinaten.
Wenn ich mehrmals das Programm über USB in den Mega geht die Erkennung der Positionen irgendwann(so 2..10 mal probieren).
Man darf nur keinen Reset machen, oder ein-, ausschalten.

Schau mal ob da evtl. was kritisches im Code ist.

Code:
//Heizungssteuerung v0.4 Joe Dorman
//In diesem Fall angapaßt für einen ATMOS D20p; Es sollten sich aber auch andere Kessel optimieren lassen,
// die über keine Lambdasteuerung verfügen.
//Der Lambdawert der Verbrennung wird optimiert, mittels Luftschieber, realisiert mit einem einfachen Servo(Steuerung fertig,
// muß nur noch montiert werden).
//Sobald der Brenner mit der eigenen Funktion erfolgreich gestartet hat, wird die Pelletssteuerung übernommen(In Arbeit,
// Relaismontage steht an).
//Mittels einer Unterdrucksonde im Abgasrohr, der zugeführten Pelletsleistung und der Abgastemperatur,
// kann der Wirkungsgrad angezeigt werden(In Planung).
//kw kann vorgegeben werden(In Arbeit); Über Aussentemperatur und Innentemperatur, kann eine berechnete Leistung
// angefordert werden(In Planung).
//Eine Ascheaustragung mittels Schnecke und Antrieb ist auch in Planung, und im Code vorbereitet.
//Summasummarum wäre dann relativ preiswert ein Einfachkessel von z.B. Atmos nachrustbar.
//Es wird darauf  geachtet, das die Eingriffe minimal sind, sodaß sie im Falle einer Erfordernis auch zwischendurch schnell
//entfernt werden können.
//Hardware:: Ein Mega mit Touchscreen. Die noch freien Ports sollten insgesamt ausreichen. Wir werden sehen ;-)
#include <Servo.h>
#include <PString.h>
//#include <Wire.h>
//#include <LiquidCrystal.h>

// Declarations
// Servos plus was dazu gehört
Servo myServoLuft;
double myAngle = 0.15;   // Drehwinkel des Servos ca 0-180 Grad
double servoStep = 0.25;  // In-, Dekriminitätswert
double start = 60;
double center = 0;    // 0 Grad
double ende = 90;
// Ports
int analogPortLambda = A7; //welchen Port wegen Display?
int analogPortPhotozelle = A8; //welchen Port wegen Display?
int analogPortAbgasTemp = A9; //für Wirkungsgradberechnung
int analogPortAbgasDruck = A10; //für Wirkungsgradberechnung
int portLambdaServoOut = 13;
int portPelletsOut1 = 14;
int portPelletsOut2 = 15;
int portAscheOut = 16;
// Timingprozesse
long maxLong = 3999999999;
long nextMilliLambdaStart = 0;
long nextMilliPelletsEin = 0;
long nextMilliPelletsAus = 0;
long nextMilliAscheEin = 0;
long nextMilliAscheAus = 0;
// Lambdasteuerung und was dazu gehört
double LbdSoll = 2.53; //Voreinstellung
double LbdAbw  = 0.005; //Additions-,Subtraktionswert für Vergleich Lambda
int inp = 0, oldInp = 0; //analog Variable
double a_input; //umgerechneter Wert von inp
double pKwSoll  = 5.0; //voreinstellung kw. Läßt sich fast beliebig einstellen´
double pTestMin = 10; //Für Berechnung Pelletsmenge/Pause
double pTestKg  = 3.8; //3.8kg in 10 Min Dauerförderung
double pKgSek   = 0.00000; //Wird berechnet
double pGrSek   = 0.0;
double pBreWrt  = 4.9; //je nach Pellets-Herstellerangabe
double TEinSek  = 1.5; // Laufzeit der Pelletsschnecke
double TAusSek  = 35.0; //Pausenzeit der Pelletsschnecke
double pKwIst   = 0.0; //Für Ausgabe
int schwelPz    = 500; // Photozelle für Flammenerkennung R_1+2
// für PRINT und str
char buf[20]; //String Buffer für PString Methode
int statusPhotozelle = 0;
int statusPellets = 0;
int statusAsche = 0;

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

#include <UTFT.h>
#include <UTouch.h>
#define CAL_X 0x00850CD7UL
#define CAL_Y 0x03D3C196UL
#define CAL_S 0x000EF13FUL
// Declare which fonts we will be using
extern uint8_t SmallFont[];

// Uncomment the next two lines for the Arduino 2009/UNO
//UTFT        myGLCD(ITDB24D,19,18,17,16);   // Remember to change the model parameter to suit your display module!
//UTouch      myTouch(15,10,14,9,8);

// Uncomment the next two lines for the Arduino Mega
UTFT        myGLCD(ITDB32S, 38,39,40,41);   // Remember to change the model parameter to suit your display module!
UTouch      myTouch(6,5,4,3,2);

int x, y;

/*************************
**   Custom functions   **
*************************/

void doMenue() {
// Draw the upper row of buttons
  int anzButtons=10;
  int stp=17;
  for (x=0; x<=anzButtons; x++) {
    int i=x/2;
    if(i*2==x)
      myGLCD.setColor(0, 0, 200);
    else
      myGLCD.setColor(0, 0, 255);
    myGLCD.fillRoundRect(0, x*stp,  319, (x+1)*stp);
        
    myGLCD.setColor(255, 0, 0);
    if(x==0) myGLCD.print(" * 00 kwSoll   = "+str(pKwSoll,1) +"   | pKwIst = "+str(pKwIst,2)+"  ", LEFT, x*stp+2);
    if(x==1) myGLCD.print(" * 01 pTestMin = "+str(pTestMin,0)+"    |", LEFT, x*stp+2);
    if(x==2) myGLCD.print(" * 02 pTestKg  = "+str(pTestKg,1) +"   | pGrSek = "+str(pGrSek,2)+"  ", LEFT, x*stp+2);
    if(x==3) myGLCD.print(" * 04 pBreWrt  = "+str(pBreWrt,1) +"   |", LEFT, x*stp+2);
    if(x==4) myGLCD.print(" * 05 TEinSek  = "+str(TEinSek,1) +"   |", LEFT, x*stp+2);
    if(x==5) myGLCD.print(" * 06 TAusSek  = "+str(TAusSek,1) +"  |", LEFT, x*stp+2);
    if(x==6) myGLCD.print(" * 07 schwelPz = "+str(schwelPz,0)+"   | Ein    = 0     ", LEFT, x*stp+2);
    if(x==7) myGLCD.print(" * 08 LbdSoll  = "+str(LbdSoll,3) +" |", LEFT, x*stp+2);
    if(x==8) myGLCD.print(" * 09 LbdAbw   = "+str(LbdAbw,3)  +" |", LEFT, x*stp+2);
    if(x==9) myGLCD.print("   10 pAbgTemp = "+str(135,1)     +" |", LEFT, x*stp+2);
    if(x==10)myGLCD.print("   11 pAbgDruc = "+str(-15,0)      +"mb | WirkGrad = 96% ", LEFT, x*stp+2);
    
    if(x==10)myGLCD.print("+++", RIGHT, (x+1)*stp+2);
    if(x==10)myGLCD.print("---", RIGHT, (x+2)*stp+2);
    if(x==10)myGLCD.print("ook", RIGHT, (x+3)*stp+2);
  
    myGLCD.setColor(255, 255, 255);
    myGLCD.drawRoundRect (0, x*stp,  319, (x+1)*stp);
  }
}

void printStatus(int y=224, String s="HALLO, hier ist die Statuszeile") {
  myGLCD.setColor(0, 255, 0);
  myGLCD.print(s, LEFT, y);
}

double tmp=0.0;
int stp=18;
double edit(int i, double d, int nk) {
  tmp=d;
  double ste=0;
  if(nk==0) ste=1.0;
  else if(nk==1) ste=0.1;
  else if(nk==2) ste=0.01;
  else if(nk==3) ste=0.001;
  while(true) {
    myGLCD.setBackColor(0, 55, 55);
    myGLCD.print("    "+str(tmp,nk)+"    ", CENTER, 13*(stp-1));
    myTouch.read();
    int x=myTouch.getX();
    int y=myTouch.getY();
    if(y>=195 && y<=205 && x>=295) {
      tmp+=ste;
      doBrenner();
      doMenue();
    }
    else if(y>=210 && y<=220 && x>=295) {
      tmp-=ste;
      doBrenner();
      doMenue();
    }
    else if(y>=225 && x>=295) {
      myGLCD.setBackColor(0, 0, 0);
      myGLCD.print("              ", CENTER, 13*(stp-1));
      myGLCD.setBackColor(0, 0, 55);
      return(tmp);
    }
  }
  doBrenner();
  doMenue();
  return(d);
}

/*************************
**  Required functions  **
*************************/

void setup() {
// Initial setup
  myGLCD.InitLCD();
  myGLCD.clrScr();

  myTouch.InitTouch();
  //myTouch.setPrecision(PREC_LOW);
  //myTouch.setPrecision(PREC_MEDIUM);
  //myTouch.setPrecision(PREC_HI);
  myTouch.setPrecision(PREC_EXTREME);

  //myGLCD.setFont(BigFont);
  myGLCD.setFont(SmallFont);
  myGLCD.setBackColor(0, 0, 55);
  doMenue();  
  setupBrenner();
}

void loop() {
  while (true) {
    if (myTouch.dataAvailable()) {
      myTouch.read();
      x=myTouch.getX();
      y=myTouch.getY();
      printStatus(205," x="+str(x,0)+"  y="+str(y,0)+"    ");
      int anzButtons=10;
      //int stp=18;
      //for(int n=0; n<=anzButtons; n++) {
        //if(y>=n*stp && y<=n*stp && x>=180 && x<=220) {
        if(x>=110 && x<=130) {
          //waitForIt(n*stp, 180, (n+1)*stp, 220);
          int i=(y/(stp-1))-0;
          printStatus(224," "+str(i,0)+" ");
          if(i==0) pKwSoll=edit(i,pKwSoll,1);// 1 Nachkommastelle
          if(i==1) pTestMin=edit(i,pTestMin,1);// 1 Nachkommastelle
          if(i==2) pTestKg=edit(i,pTestKg,1);// 1 Nachkommastelle
          //if(i==3) pelletsKgSek=edit(pelletsKgSek,1);// 1 Nachkommastelle
          if(i==3) pBreWrt=edit(i,pBreWrt,1);// 1 Nachkommastelle
          if(i==4) TEinSek=edit(i,TEinSek,1);// 1 Nachkommastelle
          if(i==5) TAusSek=edit(i,TAusSek,1);// 1 Nachkommastelle
          if(i==6) schwelPz=edit(i,schwelPz,1);// 1 Nachkommastelle
          if(i==7) LbdSoll=edit(i,LbdSoll,3);// 1 Nachkommastelle
          if(i==8) LbdAbw=edit(i,LbdAbw,3);// 1 Nachkommastelle
          //if(i==10)kwIst=edit(kwIst,1);// 1 Nachkommastelle
        }
      //}
    }
    doMenue();
    doBrenner();
  }
}





//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void setupBrenner() {
  Serial.begin(57600);
  myServoLuft.attach(analogPortPhotozelle);
  myServoLuft.attach(analogPortLambda);
  pinMode(portPelletsOut1, OUTPUT); //Pelletsförderung Übernahme Relay
  pinMode(portPelletsOut2, OUTPUT); //Pelletsförderung Relay
  pinMode(portAscheOut, OUTPUT); //Asche Relay
  nextMilliLambdaStart = millis() + 1000 * 1; // in 1 Sekunde
  nextMilliPelletsEin = millis() + 1000 * 1; // in 1 Sekunde
  nextMilliPelletsAus = maxLong; // jetzt aus
  nextMilliAscheEin = millis() + 1000 * 60 * 60 * 24; // in 24 Std
  nextMilliAscheAus = maxLong;
  statusPhotozelle = 0;
  statusPellets = 0;
  statusAsche = 0;
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void doBrenner() {
  long loopzeit=millis();
  int test = 1;
  if (analogRead(analogPortPhotozelle) >= schwelPz || test == 1) {
    digitalWrite(portPelletsOut1, HIGH); // Pelletszuführung übernommen
    statusPhotozelle = 1;
    //lese Abgastemperatur Grad
    //lese Abgasrohrunterdruck millibar
    // Lambda
    if (millis() >= nextMilliLambdaStart) {
      doProc_Lambda();
      nextMilliLambdaStart = millis() + 1000 * 1;
    }
    // Pellets ein
    if (millis() >= nextMilliPelletsEin) {
      statusPellets = 1;
      digitalWrite(portPelletsOut2, HIGH);
      nextMilliPelletsEin = maxLong;
      nextMilliPelletsAus = millis() + 1000 * TEinSek;
    }
    // Pellets aus
    if (millis() >= nextMilliPelletsAus) {
      statusPellets = 0;
      digitalWrite(portPelletsOut2, LOW);
      nextMilliPelletsAus = maxLong;
      nextMilliPelletsEin = millis() + 1000 * TAusSek;
    }
    // Asche ein
    if (millis() >= nextMilliAscheEin) {
      statusAsche = 1;
      digitalWrite(portAscheOut, HIGH);
      nextMilliAscheEin = maxLong;
      nextMilliAscheAus = millis() + 1000 * 60 * 3; // 3 Minuten
    }
    // Asche aus
    if (millis() >= nextMilliAscheAus) {
      statusAsche = 0;
      digitalWrite(portAscheOut, LOW);
      nextMilliAscheAus = maxLong;
      nextMilliAscheEin = millis() + 1000 * 60 * 60 * 24;
    }
  } else
    statusPhotozelle = 0;
  printStatusHZ();
  //long restzeit=500-(millis()-loopzeit)-3;
  //if(restzeit>0)
  //  newDelay(restzeit);
}

//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void doProc_Lambda() {
  inp = analogRead(analogPortLambda);
  if (inp != oldInp) {
    calculateLambda();
    setServoLuft();
  }
  oldInp = inp;
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void doProcPellets() {
  //MEINE BAUSTELLE
  //int kw=5;//voreinstellung kw. Läßt sich fast beliebig einstellen´
  //double pelletsTestzeitMin=10;//Für Berechnung Pelletsmenge/Pause
  //double pelletsTestzeitKg=3.8;//3.8kg in 10 Min Dauerförderung
  //double pelletsKgSek=0.01;//Wird berechnet
  //double pelletsBrennwertKg=4.9;//je nach Pellets-Herstellerangabe
  //double pelletsAnSek=1;
  //double pelletsAusSek=35;
  pKgSek = pTestKg / pTestMin / 60; //Pellets kg/sek
  pGrSek=pKgSek*1000;
  PRINT(99, 99, "pGrSek=" + str(pGrSek, 2));
  
  double TGesSek = TEinSek + TAusSek;
  double TGesMin = 60 / TGesSek;
  PRINT(99, 99, "TGesMin=" + str(TGesMin, 5));
  
  double TGesStd = TGesMin * 60;
  PRINT(99, 99, "TGesStd=" + str(TGesStd, 5));
  
  double pKgMin = pKgSek * TEinSek * TGesMin;
  double pKgStd = pKgMin * 60;
  PRINT(99, 99, "pKgStd=" + str(pKgStd, 5));
  
  double pKwStd = pBreWrt * pKgStd;
  double pKwMin = pKwStd / 60;
  double pKwSek = pKwMin / 60;
  
  double pLfz1KwSek = 1 / (TGesMin * 60);
  pKwIst=pKwStd;
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void printStatusHZ() {
  String s = " ";
  if (statusPhotozelle == 1) s += "r1=1;"; else s += "r1=0;";
  if (statusPellets == 1) s += "r2=1;"; else s += "r2=0;";
  if (statusAsche == 1) s += "r3=1;"; else s += "r3=0;";
  "i=" + String(inp) + " ";
  s = s + "L=" + str(a_input, 3) + " ";
  s = s + "o=" + str(myAngle, 1) + " ";
  s = s + str(millis()/1000,0)+"";
  //Berechnung Tpause
  doProcPellets();
  PRINT(0, 3, s);
  printStatus(190,s);
  //newDelay(500);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
void calculateLambda() {
  int oldCenter = center;
  center = 60 + (pKwSoll * 2); //test mit je kw 2 Grad mehr Luft, um näher ans Ziel zu kommen
  int range = 90; // + - 90 Grad von center
  start = center - range;
  ende = center + range;
  PRINT(99, 99, "S=" + str(start, 1) +
        " C=" + str(center, 1) +
        " A=" + str(myAngle, 1) +
        " E=" + str(ende, 1) );
  if (myAngle == 0 || center != oldCenter)
    myAngle = center;
  a_input = 5.0 / 1024.0;
  a_input = a_input * (double)inp + 1;
  if (a_input > LbdSoll + LbdAbw && myAngle > start) {
    myAngle = myAngle - servoStep;
    PRINT(99, 99, "a_inp(" + str(a_input, 3) + ")>>(" + str(LbdSoll + LbdAbw, 3) + ")");
  }
  else if (a_input < LbdSoll - LbdAbw && myAngle < ende) {
    myAngle = myAngle + servoStep;
    PRINT(99, 99, "a_inp(" + str(a_input, 3) + ")<<(" + str(LbdSoll - LbdAbw, 3) + ")");
  }
  else
    PRINT(99, 99, "a_inp(" + str(a_input, 3) + ")==(" + str(LbdSoll, 3) + ")");
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
// Ersatzfunktion für delay() um den Arduino während des Wartens nicht stillzulegen
void newDelay(unsigned long diff) {
  unsigned long lastnow = millis();
  while (1) {
    if (millis() - lastnow > diff)  {
      lastnow = millis();
      break;
    }
  }
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
String str(double d, int nk) {
  PString(buf, sizeof(buf), d, nk);
  return (buf);
}
void PRINT(int x, int y, String str) {
  /*if (x != 99 && y != 99)
    lcd.setCursor(x, y);
  if (y == 99)
    lcd.print(str + "\n");
  else
    lcd.print(str);*/
  Serial.println(str);
}
void setServoLuft() {
  if (myAngle < start) myAngle = start;
  if (myAngle > ende)  myAngle = ende;
  myServoLuft.write(myAngle);
}
//XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Die Funktion ist einfach beim touch auf das jeweilige Gleichheitszeichen "=" die Zeilennummer zurückgeben, und nachfolgend in einen noch nicht funktionierenden Editmodus zu wechseln.
Dabei lasse ich erstmal unten x und y ausgeben, und darunter die Zeilennummer.
Die Beispiele laufen mit den Initialisierungsparametern. auch der Buttontest.
Muß also irgendwie an dem Code hier liegen.

Vielleicht schaust Du mal drüber, falls Du Zeit und Muße hast?

Gruß Joe

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2013, 11:14
Beitrag #43
RE: Brennersteuerung
Moin Joe,
vorab: der Code sieht sehr ordentlich aus. Man merkt dass du dich reinkniest Smile
Der Code läuft bei mir ohne Probleme, allerdings kannst du ihn bei dieser Auflösung nur mit einem Stift bedienen.
Zitat:Reset(ausschalten und einschalten) bringt beim Touch nachfolgend merkwürdige Koordinaten.
Der Reset des Arduino macht k e i n e n Reset des LCD. Ein Reset des LCD erfolgt nur durch wegnehmen der Spannung. Deshalb sollte man ersatzweise beim Start mit UTFT.clrScr() arbeiten.
Hast du den Touchscreen kalibriert?
Ich sehe deinen Code jedoch eher als Übung an, weil:
- du nutzt keine Buttons (deshalb die Abfrage des "="-Zeichens?)
- ich würde ein Hauptmenü mit den Punkten Leistung, Pellets und Lambda machen, und in den drei Punkten dann jeweils ein Untermenü setzen
- Die Untermenüs kann man mit einer "Universalfunktion" generieren. Dann wirds nicht soviel Code.
- es einfach die Augen schonen würdeSmile

Soweit erstmal.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2013, 15:12 (Dieser Beitrag wurde zuletzt bearbeitet: 21.12.2013 16:30 von JoeDorm.)
Beitrag #44
RE: Brennersteuerung
Hallo Ricardo,

jepp ich habe mehrfach kalibriert.

Ich resete mit Spannung weg, also AEG, wobei G für gut steht, was aber nicht der Fall ist.
Was mir bei meiner Lösung gefällt, ist, das ich alles auf einen Blick sehe. Sowas liebe ich ;-) ich nehme gerne die Stiftvariante in Kauf.

Das Editieren mache ich mit der Übernahme der errechnetet Zeilennummer, welche ich abfrage und die zugehörige Variable in einen temporäre übernehme, mit + und - verändere und mit ok dann in die eigentliche Variable zurückschreibe.

So sollte es erstmal gehen, sobald die Initialisierung des Touch regelmäßig beim Einschalten funktioniert, was dieses Shield im Moment noch nicht tut.

Bald kommt das neue Display, sollte das Gleiche sein. Wenn es da funzt, dann ist klar wo das Prob liegt.

Letzter Code:
Habe den nochmal angefaßt, da mit nochwas gefehlt hat. zudem lasse ich mal eine permanent Berechnung und Anzeigeanpassung laufen, damit ich dann gleich sehen kann wie sich die Veränderung auswirkt. Natürlich wird dann bei jeder kleinen Veränderung zurückgeschrieben. Experimentiere noch gerne ;-)

Was mir aufgefallen ist, das ich das Programm bei mehrmaligen Übertragen in den Rechner über USB, auch zum Laufen bekomme.
Bei Stromweg und wieder an, mit Batteriepack, gehts gar nicht mit den Koordinaten. Dabei ist doch mehr Power vorhanden, als nur mit dem USB.
Wollte halt testen, wie es mit einer anderen Stromversorgung aussieht.

Werde wohl aufs neue Display warten müssen, falls Dir da nicht nochwas auffällt.
Ich sehe da nämlich nix.

Ist es bei Dir so, das Du auch nur ohne Batteriepack die Touchinitialisierung hinbekommst? Probiers mal bitte, falls möglich.

Gruß Joe

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.12.2013, 18:59 (Dieser Beitrag wurde zuletzt bearbeitet: 22.12.2013 12:48 von JoeDorm.)
Beitrag #45
RE: Brennersteuerung
Hallo alle zusammen

Ich suche sowas wie eine um 90Grad abgewinkelte Stiftleiste, mit der ich freie Ports nach aussen legen kann. da der UTFT/UTouch Shield sehr dicht die noch freien Ports verdeckt.
Eigentlich sollten die verbleibenen freien Ports für mein Anlegen ausreichen.

Hat da jemand eine Idee?

Gruß Joe
PS: Stelle grade fest, das alle zusammen, wohl um diese Jahreszeit doch etwas wenig sind.
Habe auch den Programmcode oben auf den aktuellen Stand gebracht.

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
22.12.2013, 18:40
Beitrag #46
RE: Brennersteuerung
Hallo Joe,

Zitat:jepp ich habe mehrfach kalibriert.

Und die ermittelten Werte dann auch in die Datei eingetragem?

bei mir liefen beide Displays,das was jetzt bei du jatzt hast und das was ich noch habe, ohne Probleme mit allen möglichen Codes. Wenn sich das zugeschickte als Schrott erweist, dann wegschmeißen.
Kannst du nochmal sagen worin genau das Problem besteht?
Ich werde zwischenzeitlich deinen jetzigen Code mal auf dem Display was ich noch habe testen.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.12.2013, 19:48 (Dieser Beitrag wurde zuletzt bearbeitet: 26.12.2013 05:52 von JoeDorm.)
Beitrag #47
RE: Brennersteuerung
Hallo Ricardo,

keine Eile und kein Stress.
Denke, das ich zwischen den Jahren vielleicht noch Post bekomme.

Habe gestern noch einen Sensorshield bekommen.
Ärgere mich ein bissel, weil die nicht alle Pins nach oben weiterreichen.
Menno, die müssen in der Branche noch zulernen.

Ja, ich habe die 3 Werte in die h-Datei eingetragen, sonst würde es ja nicht manchmal perfekt laufen.
Könnte ja auch sein, das die Kommunikation auf den Ports nicht sauner läuft, und ich einen anderen Mega bräuchte.
Das werde ich erst rausbekommen, wenn ich die Hardware tauschen kann.

Frohes Fest
Gruß Joe
PS: Code nochmal geupdated(Edit geht jetzt auch, wenn auch nicht besonders hübsch ;-)
die 3 Koordinaten sind auch im Code zusätzlich nochmal drin. Sind die gleichen wie in der UTouchCD.h
Bringt natürlich an dieser Stelle nichts. Ist nur zur Info, wie meine Kalibrierungsdaten aussehen.

Unser Projekt Rolleyes http://global-science-circle.net http://global-science-circle.org http://global-science-circle.info UND http://radio-gsc1.info
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
27.12.2013, 14:19
Beitrag #48
RE: Brennersteuerung
Hallo Joe,

ich habe mir jetzt deinen Code nochmal angesehen und glaube die ursache für die unsaubere Initialiserung gefunden zu haben.
Eigentlich ist es nicht ein Problem beim Init sondern ein genrelles Huh
Da du nicht Buttons bzw. deren Abfrage benutzt, sondern fast ausschlisslich mit print arbeitest, bist du gezwungen doMenue() unter anderem im Loop() aufzurufen.
Und das ist doof (sorry). Was passiert?
Das was du siehst ist eigentlich nur das Ergebnis der Trägheit des Displays. In Wirklichkeit wird doMenue() innerhalb Loop() noch x-mal schneller abgearbeitet.
Naja und da kommt das Display nicht hinterher und bringt (meistens) Fehler in der Abfrage der Koordinaten.
Tu dir selbst ein gefallen und nimm die üblichen Funktionen zur Darstellung von Buttons und deren Abfrage.
Ich bin mir ziemlich sicher, dass das neue Display da keine Änderung bringen wird.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Gehe zu:


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