Loading...
  Show Posts
Pages: 1 ... 4 5 [6] 7 8 9
76  International / Deutsch / Re: Startknopf on: December 08, 2012, 01:07:44 pm
Das problem ist nicht programm1, das klapt einwandfrei so wie ich es will, aber nur mit der alten variante des startknopfes :
Code:
buttonState = digitalRead(knopf1);
  if (buttonState != lastButtonState && buttonState == HIGH) {
    buttonPushCounter++;
  }
  lastButtonState = buttonState;
  if (buttonPushCounter % 2 == 0 && status == 0) {
    digitalWrite(k[0], HIGH);
  } else {
    programm1();
  }
Aber das problem an dieser variante ist das ich das programm1 nur 1mal anschalten kann, danach kann ich es nicht verlassen oder reseten ich muss erst den ganzen arduino reseten.
Und das ist mein problem nicht programm1 sondern der teil im sketch mit dem startknopf.
Deswegen habe ich versucht mein problem mit bounce zu lösen also so:
Code:
if ( bouncer.update() ) {
     if ( bouncer.read() == HIGH) {
       if ( buttonState == LOW ) {
         programm1();
         buttonState = HIGH;
       } else {
         uint8_t i;
  for (i = 0; i < 4; i++) {
    digitalWrite(k[i], HIGH);
  }
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
   
         buttonState = LOW;
       
      }
   }
}

Doch bei dieser variante ist das problem das programm1 sich an und ausschaltet wie es will und das das programm1 nicht läuft k[1] geht zwar beim start des programms an aber weiter geht es nicht.
77  International / Deutsch / Re: Startknopf on: December 08, 2012, 10:47:04 am
loop:
- Temperaturen messen
- Druck messen
- Messwerte Temperatur und Druck auf LCD anzeigen
- Fadewert anzeigen
- Startknopf (knopf1) abfragen:
    -startet programm1
    -resetet und verlässt es wenn es läuft

programm1:
1.relais k0 einschalten (LOW = an)
2.wenn Sensor1 25.8 °C erreicht/überschreitet soll k1 aus gehen (HIGH = aus)
3.nachdem k0 aus ist soll eine minute gewartet werden(ohne delay),nach dieser minute sollen relais k1 , k2 und k3 angehen (also LOW)
4.gleichzeitig soll mit den relais k1 und k2 und k3 eine LED mit einem PWM signal von 51 aufleuchten, denn sollen 2min gewartet werden(ohne delay)
5.nach diesen 2 min soll die LED leuchtkraft auf ein PWM signal von 102 steigen,denn sollen 3 min gewartet werden(ohne delay)
6.nach diesen 3 min soll die LED leuchtkraft auf ein PWM signal von 153 steigen,denn sollen 4 min gewartet werden(ohne delay)
7.nach diesen 4 min soll die LED leuchtkraft auf ein PWM signal von 255 steigen und so bleiben bis das programm beendet ist
8.wenn Sensor1 27°C ereicht/überschreitet soll k1 ausgehen (HIGH)
9.denn sollen 5 min gewartet werden(ohne delay)
10.nach diesen 5 min soll k2 und k3 ausgehen(HIGH)
11.wenn nach diesen 5 min k2 un k3 aus sind soll das Programm1 verlassen werden und wiederverwendbar sein

(die zeiten temp.werte und fadewerte sind nur testwerte und beispiele)
78  International / Deutsch / Re: Startknopf on: December 08, 2012, 09:22:56 am
Code:
void loop(){
  // check if conversion is done
  if (oneWire.read_bit()) {
    
    uint8_t i;
    for (i = 0; i < 4; i++) {
      lcd.setCursor(0, i);
      lcd.print("T");
      lcd.print(i+1, DEC);
      lcd.print(":");
      if (sensors.isConnected(Sensor[i])) {
        lcd.print(sensors.getTempC(Sensor[i]));
        lcd.print("C");
      } else {
        lcd.print("AUS   ");
      }
    }
    // start next conversion
    sensors.requestTemperatures();
  
    mpx = analogRead(mpxPin);
    pkPa = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(pkPa);
    lcd.print("mb   ");
    lcd.setCursor(10, 1);
  lcd.print(fade);
  }
    
  
  
  if ( bouncer.update() ) {
     if ( bouncer.read() == HIGH) {
       if ( buttonState == LOW ) {
         programm1();
         buttonState = HIGH;
       } else {
         uint8_t i;
  for (i = 0; i < 4; i++) {
    digitalWrite(k[i], HIGH);
  }
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
    
         buttonState = LOW;
      
      }
   }
}
}
Das ist der teil wo die sensorwerte und der fadewert abgefragt und auf das display übertragen wird. Und der meine frage betreffende teil mit dem startknopf ist enthalten:
Code:
if ( bouncer.update() ) {
     if ( bouncer.read() == HIGH) {
       if ( buttonState == LOW ) {
         programm1();
         buttonState = HIGH;
       } else {
         uint8_t i;
  for (i = 0; i < 4; i++) {
    digitalWrite(k[i], HIGH);
  }
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
    
         buttonState = LOW;
      
      }
   }
}
Der nächste teil ist das programm1 das mit dem startknopf(knopf1) gestartet und resetet werden soll, sodass man es wieder verwenden kann:
Code:
void programm1() {
  
 if (status == 0){
    digitalWrite(k[0], LOW);
    status = 1;
  } else if (sensors.getTempC(Sensor[0]) >= 22.5 && status == 1) {
    digitalWrite(k[0], HIGH);
    status = 2;
    nextMillis = millis() + 30000L;
  } else if (status == 2 && millis() > nextMillis) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    fade = 51;
    analogWrite(ledPin, fade);
  
status = 3;
nextMillis = millis() + 30000L;

  } else if (status == 3 && millis() > nextMillis) {
    fade = 102;
    analogWrite(ledPin, fade);
      status = 4;
      nextMillis = millis() + 30000L;
  } else if (status == 4 && millis() > nextMillis) {
    fade = 153;
    analogWrite(ledPin, fade);
  
      status = 5;
      nextMillis = millis() + 30000L;
    
  } else if (status == 5 && millis() > nextMillis) {
    fade = 255;
      status = 6;
    
  }
  if (sensors.getTempC(Sensor[0]) >= 22.7 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis() + 30000L;
  } else if (thresholdMillis && millis() > thresholdMillis) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
    fade = 0;
  }  
}
Frag einfach falls ich etwas schlecht beschreibe oder du noch fragen hast.
79  International / Deutsch / Re: Startknopf on: December 08, 2012, 06:45:11 am
Quote
Dein Relais klappert beim Anstecken des Stroms immer noch einmal klick-klack, oder?
Nein es klappert nicht denn im setup ist ja folgendes eingefügt:
Code:
uint8_t i;
  for (i = 0; i < 4; i++) {
    pinMode(k[i], OUTPUT);
    digitalWrite(k[i], HIGH);
  }

Im loop geht es nur drum, das die 4 Temp. sensoren ausgelesen werden und auf dem lcd angezeigt werden genauso wie der mpx drucksensor.
Desweiteren soll der wert "fade" angezeigt werden. Und wenn ich den knopf1 drücke soll das programm1 angehen und bei wiederholten drücken wieder aus gehen und wiederverwendbar sein.
Was nicht klappt ist der teil nach status1 wo eigentlich nach 30sec k[1-3] angehen sollen. Und das funktioniert nicht. Statdessen geht das programm1 an und aus wie es will und funktioniert ab status1 nicht.
80  International / Deutsch / Re: Startknopf on: December 08, 2012, 06:19:03 am
Danke,
den kann man doch garnicht falsch reinstecken sonst passt er nicht.
Ist den mit dem sketch (teil mit bounce) alles richtig?
81  International / Deutsch / Re: Startknopf on: December 08, 2012, 04:48:37 am
Hab ne fritzingdatei mitrangehängt.
82  International / Deutsch / Re: Startknopf on: December 07, 2012, 11:41:27 am
Hallo,
ich hab jetz ne zeitlang am programm gearbeitet (mit hilfe).
Dabei ist mir aufgefallen das meine variante des startknopfes nicht die beste ist also habe ich versucht das ganze mit bounce umzusetzen, das sieht bei mir so aus:
Code:
#include <Bounce.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>


#define ONE_WIRE_BUS 30  // Temperatursensor pin 30
#define FADE_DELAY 3 // Verzögerung beim Faden
LiquidCrystal lcd(22, 23, 24, 25, 26, 27, 28);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Sensor[] = {{0x28, 0xCD, 0x9B, 0xDA, 0x03, 0x00, 0x00, 0xF2},
                          {0x28, 0x1F, 0xA3, 0xDA, 0x03, 0x00, 0x00, 0xE2},
                          {0x28, 0x2D, 0xB9, 0xDA, 0x03, 0x00, 0x00, 0xA0},
                          {0x28, 0x37, 0x88, 0xDA, 0x03, 0x00, 0x00, 0x7D}};

int backLight = 29;
uint8_t k[] = {31, 32, 33, 35};   //relais HIGH = Aus; LOW = An

uint8_t knopf1 = 34;
uint8_t buttonState = 0; //knopf
int buttonPushCounter = 0;
uint8_t lastButtonState = 0;
Bounce bouncer = Bounce( knopf1, 5 );

uint32_t previousMillis = 0;


int   mpxPin =  5; //drucksensor
int   mpx;
float pkPa;

uint8_t ledPin = 9; // (kemo)
uint8_t fade;
uint8_t status;

 uint32_t nextMillis = 0;
 uint32_t thresholdMillis = 0;

void setup() {
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);
  lcd.begin(20, 4);
  sensors.begin();
  uint8_t i;
  for (i = 0; i < 4; i++) {
    pinMode(k[i], OUTPUT);
    digitalWrite(k[i], HIGH);
  }
  pinMode(knopf1, INPUT);
 
  status=0;
  sensors.setWaitForConversion(false);
  sensors.requestTemperatures();
}

void loop(){
  // check if conversion is done
  if (oneWire.read_bit()) {
   
    uint8_t i;
    for (i = 0; i < 4; i++) {
      lcd.setCursor(0, i);
      lcd.print("T");
      lcd.print(i+1, DEC);
      lcd.print(":");
      if (sensors.isConnected(Sensor[i])) {
        lcd.print(sensors.getTempC(Sensor[i]));
        lcd.print("C");
      } else {
        lcd.print("AUS   ");
      }
    }
    // start next conversion
    sensors.requestTemperatures();
 
    mpx = analogRead(mpxPin);
    pkPa = (mpx/1023.0-0.04)/0.0018;
    lcd.setCursor(10, 0);
    lcd.print(pkPa);
    lcd.print("mb   ");
    lcd.setCursor(10, 1);
  lcd.print(fade);
  }
   
 
 
  if ( bouncer.update() ) {
     if ( bouncer.read() == HIGH) {
       if ( buttonState == LOW ) {
         programm1();
         buttonState = HIGH;
       } else {
         uint8_t i;
  for (i = 0; i < 4; i++) {
    digitalWrite(k[i], HIGH);
  }
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
   
         buttonState = LOW;
       
      }
   }
}
}

void programm1() {
 
 if (status == 0){
    digitalWrite(k[0], LOW);
    status = 1;
  } else if (sensors.getTempC(Sensor[0]) >= 22.5 && status == 1) {
    digitalWrite(k[0], HIGH);
    status = 2;
    nextMillis = millis() + 30000L;
  } else if (status == 2 && millis() > nextMillis) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    fade = 51;
    analogWrite(ledPin, fade);
 
status = 3;
nextMillis = millis() + 30000L;

  } else if (status == 3 && millis() > nextMillis) {
    fade = 102;
    analogWrite(ledPin, fade);
      status = 4;
      nextMillis = millis() + 30000L;
  } else if (status == 4 && millis() > nextMillis) {
    fade = 153;
    analogWrite(ledPin, fade);
 
      status = 5;
      nextMillis = millis() + 30000L;
   
  } else if (status == 5 && millis() > nextMillis) {
    fade = 255;
      status = 6;
   
  }
  if (sensors.getTempC(Sensor[0]) >= 22.7 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis() + 30000L;
  } else if (thresholdMillis && millis() > thresholdMillis) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
    fade = 0;
  }   
}

Der nachteil beim alten sketch war das ich es nur 1mal anschalten konnte. Jetzt kann ich es beliebig oft an und aus schalten.
Das problem ist aber das sich das programm1 machmal von alleine an und ausschaltet,manchmal auch ganz schnell hintereinander.
Und ein weiterer Fehler ist ,dass  bei start nur relais 1 angeht(k[0]=LOW) also status 1 weiter geht das programm nicht( mit der anderen varieante des startknopfes schon).

Was habe ich falschgemacht? Wo liegt mein Fehler?

Mfg

strohhirn
83  International / Deutsch / Re: Delay ohne delay on: November 27, 2012, 12:18:22 pm
Hallo,
verzeihung das ich so lange nicht mehr zurückgeschrieben habe.Hab einfach kurz mal pause gemacht und mir das alles in ruhe angeschaut.
Quote
Dieses Forum ist eigentlich kein Programmierservice, sondern soll Hilfestellungen geben.
Ja ich weiss, anfangs war meine frage ja eigentlich nur wie man delay ohne delay hinbekommt, aber irgendwie hat sich das ganze ausgeweitet.
Quote
Der Knopf kommt an Pin 30 (nach meinem Sketch).
Selbstverständlich habe ich auch die entsprechende pin nummer im sketch auf 36 geändert. Und der Wiederstand geht vom GND des arduino zum knopfpin von dem auch ein kabel zum pin 36 führt.
Quote
Dieser Code macht gar nichts, da die Variable start nicht definiert ist.
Natürlich habe ich die variablenn definiert, ich habe es bloß nicht aufgeschrieben weil ich dachte das wäre selbstverständlich.

Mir ist aufgefallen das du den code für die knöpfe verändert hast, weswegen sie wahrscheinlich nicht funktionieren, denn das programm1 ist beim anschalten des arduino sofort an und lässt sich weder ausschalten noch pausieren.
Das programm1 läuft zwar aber ohne wartezeiten, d.h. nachdem k[0] ausgeganden ist und k[1-3] angehen, fadet die led in einer tour durch ohne wartezeiten.
Könnte das vielleicht daran liegen das du folgendes:
Code:
else if (status == 3 && millis() - previousMillis > 60000L)
beim aktuellsten sketch durch:
Code:
else if (status == 3 && millis() > nextMillis)
ersetzt hast?
Das mit den statusen habe ich jetzt einiger maßen verstanden deswegen habe ich programm1 ganz am anfang verändert, da ja beim start von programm1 k[0] angehen soll:
Code:
void programm1() {
  if (status == 0){
    digitalWrite(k[0], LOW);
    status = 1;
  } else if (sensors.getTempC(Sensor[0]) >= 25.8 && status == 1) {
    digitalWrite(k[0], HIGH);
    status = 2;
    nextMillis = millis() + 60000L;
  } else if (status == 2 && millis() > nextMillis) {
    digitalWrite(k[1], LOW);
    digitalWrite(k[2], LOW);
    digitalWrite(k[3], LOW);
    fade = 0;
    analogWrite(ledPin, fade);
    nextMillis += FADE_DELAY;
    status = 3;
  } else if (status == 3 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 51) {
status = 4;
nextMillis = millis() + 120000L;
}
  } else if (status == 4 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    status = 5;
  } else if (status == 5 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 102) {
      status = 6;
      nextMillis = millis() + 180000L;
    }
  } else if (status == 6 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    status = 7;
  } else if (status == 7 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 153) {
      status = 8;
      nextMillis = millis() + 240000L;
    }
  } else if (status == 8 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    status = 9;
  } else if (status == 9 && millis() > nextMillis) {
    nextMillis += FADE_DELAY;
    analogWrite(ledPin, ++fade);
    if (fade >= 255) {
      status = 10;
    }
  }
  if (sensors.getTempC(Sensor[0]) >= 30.0 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis() + 300000L;
  } else if (thresholdMillis && millis() > thresholdMillis) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
  }  
}
84  International / Deutsch / Re: Delay ohne delay on: October 29, 2012, 02:36:07 pm
Relais k1 schaltet eine heizung an die ja solange heizt bis 25,8°C ereicht werden denn wird sie aus geschaltet und nach 1 min schalten sich k2-4 an, k2 ist eine andere Heizung bei der die stromstärke dur fade reguliert wird, k3 ist ein lüfter und für k4 habe ich erst mal keine verwendung.Die temperatur sensoren dienen der überwachung der heizungen, wobei sensor1 ja am wichtigsten sind die anderen dienen nur der information genauso wie der drucksensor.

Das neue programm hat einen paar fehler, programm1 ist sofort an ohne knopfdruck und sobald gefadet wird klettert der wert gleich auf 255 ohne zwischenpausen und der pausenknopf, den ich an pin 36 angeschlossen habe und mit einem 10k wiederstand versehen habe, funktioniert auch nicht.

kleine randbemerkungen:
in den letzten programmen hast du immer die fade anzeige vergessen:
Code:
lcd.setCursor(10, 1);
  lcd.print(fade);
und eigentlich soll ja beim programm1 start immer k1 angehen, aber da habe ich mir immer so weitergeholfen:
Code:
if(start < 2){
    digitalWrite(k[0], LOW);
    start++;
  }
Und weiterhin Danke für deine Mühe und Hilfe.
85  International / Deutsch / Re: Delay ohne delay on: October 28, 2012, 07:02:32 am
Das ende des programmes ist:
Code:
if (sensors.getTempC(Sensor[0]) >= 28.0 && thresholdMillis == 0) {
    digitalWrite(k[1], HIGH);
    thresholdMillis = millis() + 60000L;
  } else if (thresholdMillis && millis() > thresholdMillis) {
    digitalWrite(k[2], HIGH);
    digitalWrite(k[3], HIGH);
    analogWrite(ledPin, 0);
    thresholdMillis = 0;
    nextMillis = 0;
    status = 0;
  }   
}
wenn dieser teil zu ende ist also status = 0;

Quote
Mit der Änderung aus dem letzten Post?
Ja mit der änderung aus dem letzten post.
Quote
Definiere aber bitte, was Du unter pausieren verstehst.
Ich wollte anfangs das ich nur das programm1 an einer beliebigen stelle anhalten kann z.B fade ist auf 51 und es muss 2 min gewartet werden bis es sich auf 102 steigert, bei 1,20 min drücke ich den pausen/start knopf, das programm bleibt an dieser stelle stehen, das display aktualisiert sich weiterhin, nach ner beliebigen zeit drücke ich wieder den knopf und das programm geht an der pausierten stelle weiter also wartet es die  restlichen 0,8 min. So würde ich das gerne haben. Ist das möglich?
Und der reset knopf während des programms funktioniert auch nicht, die led fadet komischerweise nicht und die relais ( k1,..) bleiben auch an.
86  International / Deutsch / Re: Delay ohne delay on: October 25, 2012, 01:42:01 pm
Ich habe jetzt die aktuelle version der DallasTemperatue-Bibliothek : 372Beta
Ich hatte das programm mit dem code "if (oneWire.read_bit()) {" benutzt.
Mit dem neuen programm geht das auf jedenfall schon deutlich schneller , nur noch 3,6 sek um von 0 auf 51 zu kommen, das ist aber immerboch ziemlich viel.
Verzeihung fals ich etwas noch nicht erwähnt habe.
Ich möchte den knopf als an und ausschalt knopf für das programm1 benutzen. d.h. der knopf soll beim drücken während des proggrammes1 als eine art reset knopf fungieren.
Und wenn das programm1 am ende ist soll das programm1 resetet werden (also auch fade auf 0) und verlassen werden, so das ich es wiederverwenden kann wenn ich den knopf drücke.
Eigentlich wollte ich das programm auch  an einer beliebigen  stelle pausieren und fortsetzen können, aber das wurde mir als unmöglich erklärt, deswegen habe ich mir das erst mal aus dem kopf geschlagen.
87  International / Deutsch / Re: Delay ohne delay on: October 24, 2012, 01:23:10 pm
Ich habe jetzt mal die bibliothek aktualisiert und das neu programm ausprobiert.
Das faden geht geht jetzt wirklich schneller und die anzeige aktualisiert sich auch, aber den knopf kann ich nur zum anschalten benutzen nicht zum ausschalten während des programmes.
Wenn ich die verzögerung beim faden auf 3 stelle denn braucht es 8 sek um von 0 auf 51 zu faden, diese 8 sek verschieben aber auf dauer alles.
Währe es nicht möglich einfach folgendes einzufügen:
Code:
for(int fade = 51 ; fade <= 102; fade +=1) {
    analogWrite(ledPin, fade);             
    delay(30);   
  }
Das dauert nur 1 sek.
Desweitern wird der fadewert zum schluss nicht auf 0 gesetzt.
Verzei mir bitte meine pingeligkeit.
Ich danke dir für deine Arbeit und weiß deine Mühe zu schätzen.
88  International / Deutsch / Re: Delay ohne delay on: October 22, 2012, 09:25:50 am
Ich hab jetzt einfach den code in das aktuelle programm eingefügt, bei setup, und den serielen monitor geöffnet, der " Wire powered" angezeigt hat.
Und ,ja, die TMP36-Sensoren sind platzhalter
89  International / Deutsch / Re: Delay ohne delay on: October 19, 2012, 07:41:47 am
Hier mal eine Fritzing datei wie ich es angeschlossen habe.
Was soll ich daran ändern?
90  International / Deutsch / Re: Delay ohne delay on: October 18, 2012, 12:37:27 pm
Was ist jetzt genau mit einer seperaten Versorgungsspannung geleint?
Könnte ich zum beispiel anstatt der arduino stromversorgung die One-wire sensoren an eine 5V batterie anschließen?
Pages: 1 ... 4 5 [6] 7 8 9