Sida 3 av 4

Re: Arduino Akvarie controller

Postat: 26 juni 2014, 16:43:39
av Arclight
Inte riktigt säker på hur du menar här?

Re: Arduino Akvarie controller

Postat: 26 juni 2014, 21:14:35
av Rohan
Du behöver ett "dött" område där du helt enkelt slår av och på lite för sent.

Re: Arduino Akvarie controller

Postat: 26 juni 2014, 21:17:17
av orvar-e
Så här har jag gjort i liknande problem, men då ville jag att temperaturen skall hålla sig inom värdet som finns i val_setL 25grader, och val_setH 27grader
Celsius är ingången från analoga porten där det sitter en temp-givare.

Program snutten fungerar så att är temperaturen under 25 grader så ligger värmen till, tills 27 grader har uppnåtts, då stängs värmen av tills 25 grader uppnåtts, fram och tillbaka.
M100 håller reda på vart i cykeln programmet är, är M100 = 1 så har 27 grader blivit upp nått, när 25 graders uppnås så resetas M100 till 0 och allt börjar om.

Kanske finns nått enklare sätt, men efter som jag är ny på arduino så kände jag inte till det.

Mitt kod snutt som jag delar är tillför att styra farsans pelletsbrännare så att den inte går till och från så ofta. Så den ska slå till brännaren vid 60 grader eller vad han ställer in på displayen och stängas av vid 85 -90 grader eller vad han ställer in som sagt.

Kod: Markera allt

 
 if (celsius > val_setH) {  // Higher then set value H
    
     M100 = 1;              //M100 memory for value have been higher then H
     relay_out = 0;
    }
 if (celsius <= val_setL) { //M100 reset, value have been lower then L
    M100 = 0;
    relay_out = 1;

  }   
 if ((celsius >= val_setL) && (celsius <= val_setH) &&(M100 = 0)){    
   
    relay_out = 1;  
    }
    
    relay = relay_out;
    
  if (relay == 1) {
 
 		digitalWrite(9,LOW);
	} else {
		digitalWrite(9,HIGH);
	}

 }

Re: Arduino Akvarie controller

Postat: 26 juni 2014, 21:45:59
av Arclight
Ah. tackar. ska prova den:)

Re: Arduino Akvarie controller

Postat: 27 juni 2014, 08:36:48
av orvar-e
Det kommer att fungera för koden fungerar i min applikation, iaf om du är noga att ändra alla variabel namn. Lättaste sättet att göra det är att klicka på Redigera och sedan sök, skriv in det namn du vill ändra och vilket namn som ska ersätta det, sedan tryck ersätt all, då missar man inget.

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 16:05:07
av Arclight
Får inte ihop det riktigt. :/

Så här ser det ut nu, men jag får bara "M100 was not declared in this scope"

Kod: Markera allt

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define ONE_WIRE_BUS 2
#define COOLFAN  3                        
#define WHITELIGHT  11                        
#define BLUELIGHT  12                        
#define RELAY4  13

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempProbe = { 0x28, 0xB0, 0x30, 0x7A, 0x05, 0x00, 0x00, 0x1B };
float tempC;

void setup(void)
{
Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    pinMode(COOLFAN, OUTPUT);       
    pinMode(WHITELIGHT, OUTPUT);
    pinMode(BLUELIGHT, OUTPUT);
    pinMode(RELAY4, OUTPUT);
sensors.begin();
sensors.setResolution(tempProbe, 9);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("ReefCon");
}
void printTempSerial(float temp)
{
}

void LCDTemp(float temp)
{
lcd.setCursor(0,1);

if (temp < -100) {
lcd.print("Error");
} else {
lcd.print (temp);
lcd.print(char(223));
}
}

void loop(void)
//TEMPERATURE RELAY FUNCTION
{
sensors.requestTemperatures();
tempC = sensors.getTempC(tempProbe);
printTempSerial(tempC);
LCDTemp(tempC);

 
 if (tempC > 27) {  // Higher then set value H

     M100 = 1;              //M100 memory for value have been higher then H
     relay_out = 0;
    }
 if (tempC <= 26) { //M100 reset, value have been lower then L
    M100 = 0;
    relay_out = 1;

  }   
 if ((tempC >= 26) && (tempC <= 27) &&(M100 = 0)){   
   
    relay_out = 1; 
    }
   
    relay = relay_out;
   
  if (relay == 1) {
 
       digitalWrite(COOLFAN,HIGH);
         lcd.setCursor(9,1);
  lcd.print("Fan/On ");
   } else {
      digitalWrite(COOLFAN,LOW);
        lcd.setCursor(9,1);
  lcd.print("Fan/Off");
   }

 }

//if (tempC > 27)
//{
//  digitalWrite(COOLFAN,HIGH);
//  lcd.setCursor(9,1);
//  lcd.print("Fan/On ");
//}
//else
//{
//  digitalWrite(COOLFAN,LOW);
//  lcd.setCursor(9,1);
//  lcd.print("Fan/Off");
//}

//CLOCK FUNCTION
DateTime now = RTC.now();
lcd.setCursor(11,0);
    if(now.hour() < 10){
      lcd.print("0");
      lcd.print(now.hour(), DEC);
    }
    else{
       lcd.print(now.hour(), DEC);
    }
lcd.print(':');
    if(now.minute() < 10){
      lcd.print("0");
      lcd.print(now.minute(), DEC);
    }
    else{
       lcd.print(now.minute(), DEC);
    }
    
// TIMER RELAY FUNCTION
  if (now.hour() >= 13 and now.hour() < 22) {
    digitalWrite(WHITELIGHT,HIGH);
  }
  else {
    digitalWrite(WHITELIGHT,LOW);
  }
  if (now.hour() >= 12 and now.hour() < 23) {
    digitalWrite(BLUELIGHT,HIGH);
  }
  else {
    digitalWrite(BLUELIGHT,LOW);
  }
  delay(1000);
}

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 16:34:22
av X-IL
Definiera den med "int M100;" under "float TempC;" till exempel.

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 16:34:57
av orvar-e
Du måste tala om vad M100 är för nånting i detta fall en integer och värdet i den.
Skriv int M100 = 0; före void setup.

Eller i ditt fall #define M100 borde kanske också fungera.

EDIT// X-IL var rappare i fingrarna. :)

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 16:36:12
av X-IL
Som orvar-e skriver är det ju bra att initiera den till ett känt värde också.

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 16:56:25
av Arclight
Tack, men blir fortfarande massa fel, jag fick samma meddelande på relay_out = 0 och sen på relay, så jag testade sätta dessa med likadant, men nu får jag ist fel på lcd.setCursor(11,0). i "Clock Function"

Förlåt om jag e lite dryg nu men kom ihåg att jag är ganska ny på kod;)

Kod: Markera allt

#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

#define ONE_WIRE_BUS 2
#define COOLFAN  3                        
#define WHITELIGHT  11                        
#define BLUELIGHT  12                        
#define RELAY4  13

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress tempProbe = { 0x28, 0xB0, 0x30, 0x7A, 0x05, 0x00, 0x00, 0x1B };
float tempC;
int M100 = 0;
int relay_out = 0;
int relay;

void setup(void)
{
Serial.begin(9600);
    Wire.begin();
    RTC.begin();
    pinMode(COOLFAN, OUTPUT);       
    pinMode(WHITELIGHT, OUTPUT);
    pinMode(BLUELIGHT, OUTPUT);
    pinMode(RELAY4, OUTPUT);
sensors.begin();
sensors.setResolution(tempProbe, 9);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.print("  Reef Control  ");
lcd.setCursor(0,1);
lcd.print("     v.1.0      ");
delay(4000);
lcd.clear();
}
void printTempSerial(float temp)
{
}

void LCDTemp(float temp)
{
lcd.setCursor(0,1);

if (temp < -100) {
lcd.print("Error");
} else {
lcd.print (temp);
lcd.print(char(223));
}
}

void loop(void)

//TEMPERATURE RELAY FUNCTION
{
sensors.requestTemperatures();
tempC = sensors.getTempC(tempProbe);
printTempSerial(tempC);
LCDTemp(tempC);

 if (tempC > 27) {  // Higher then set value H
     M100 = 1;              //M100 memory for value have been higher then H
     relay_out = 0;
    }
 if (tempC <= 26) { //M100 reset, value have been lower then L
    M100 = 0;
    relay_out = 1;
  }   
 if ((tempC >= 26) && (tempC <= 27) &&(M100 = 0)){   
    relay_out = 1;
    }
    relay = relay_out;
  if (relay == 1) {
       digitalWrite(COOLFAN,HIGH);
         lcd.setCursor(9,1);
  lcd.print("Fan/On ");
   } else {
      digitalWrite(COOLFAN,LOW);
        lcd.setCursor(9,1);
  lcd.print("Fan/Off");
   }
 }
//if (tempC > 27)
//{
//  digitalWrite(COOLFAN,HIGH);
//  lcd.setCursor(9,1);
//  lcd.print("Fan/On ");
//}
//else
//{
//  digitalWrite(COOLFAN,LOW);
//  lcd.setCursor(9,1);
//  lcd.print("Fan/Off");
//}

//CLOCK FUNCTION
DateTime now = RTC.now();
lcd.setCursor(11,0);
    if(now.hour() < 10){
      lcd.print("0");
      lcd.print(now.hour(), DEC);
    }
    else{
      lcd.print(now.hour(), DEC);
    }
lcd.print(':');
    if(now.minute() < 10){
      lcd.print("0");
      lcd.print(now.minute(), DEC);
    }
    else{
      lcd.print(now.minute(), DEC);
    }
// TIMER RELAY FUNCTION

  if (now.hour() >= 13 and now.hour() < 22) {
    digitalWrite(WHITELIGHT,HIGH);
      lcd.setCursor(0,0);
      lcd.print("Wh");
      lcd.print(char(42));
  }
  else {
    digitalWrite(WHITELIGHT,LOW);
      lcd.setCursor(0,0);
      lcd.print("Wh");
      lcd.print(" ");
  }
  if (now.hour() >= 12 and now.hour() < 23) {
    digitalWrite(BLUELIGHT,HIGH);
      lcd.setCursor(4,0);
      lcd.print("Bl");
      lcd.print(char(42));
  }
  else {
    digitalWrite(BLUELIGHT,LOW);
      lcd.setCursor(4,0);
      lcd.print("Bl");
      lcd.print(" ");
  }
  delay(1000);
}

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 17:06:36
av X-IL
Vad är det för felmeddelande?

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 17:09:12
av Arclight
blir en hel rad med fel, men börjar med


ReefControlV1_5:106: error: expected constructor, destructor, or type conversion before '.' token
ReefControlV1_5:107: error: expected unqualified-id before 'if'
ReefControlV1_5:111: error: expected unqualified-id before 'else'
ReefControlV1_5:114: error: expected constructor, destructor, or type conversion before '.' token
ReefControlV1_5:115: error: expected unqualified-id before 'if'
ReefControlV1_5:119: error: expected unqualified-id before 'else'
ReefControlV1_5:124: error: expected unqualified-id before 'if'
ReefControlV1_5:130: error: expected unqualified-id before 'else'
ReefControlV1_5:136: error: expected unqualified-id before 'if'
ReefControlV1_5:142: error: expected unqualified-id before 'else'
ReefControlV1_5:148: error: expected constructor, destructor, or type conversion before '(' token
ReefControlV1_5:149: error: expected declaration before '}' token

denna har ju funkat innan?

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 17:15:31
av Borre
Du har en } för mycket nånstans, jämför med koden som fungerade tidigare (den på förra sidan) så hittar du nog det. Den finns före lcd.setCursor(11,0);

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 17:26:37
av Arclight
Ah, tack. tog ca 1 sekund att hitta den bara jag visste vad jag skulle leta efter:) verkar funka nu:)

Re: Arduino Akvarie controller

Postat: 28 juni 2014, 17:39:37
av orvar-e
Kul att min kod snutt kommer till nytta i någon annans applikation. :)