Keresés

Részletes keresés

titusz99 Creative Commons License 2017.01.17 0 0 2748

Küldtem mailt.

Ha több ram kell, lehet a Serial bufferek méretét csökkenteni.

 

Üdv.:Titusz

Előzmény: Törölt nick (2746)
titusz99 Creative Commons License 2017.01.16 0 0 2747

Van egy csomó változód amiket feleslegesen többször deklarálod.

Ezek biztosan feleslegesek:

void kiolvas_t()
{

temppufferfent = sensors.getTempC(pufferfent);

temppuffer1_3 = sensors.getTempC(puffer1_3);
temppuffer2_3 = sensors.getTempC(puffer2_3);
temppufferlent = sensors.getTempC(pufferlent);
tempkintihofok = sensors.getTempC(kintihofok); 

 

float T1 = sensors.getTempC(pufferfent); //float hiba, emiatt lokális változó lesz
float T2 = sensors.getTempC(puffer1_3);
float T3 = sensors.getTempC(puffer2_3);
float T4 = sensors.getTempC(pufferlent);
float T9 = sensors.getTempC(kintihofok); 

van+ több is.

 

Holnap megnézem.

Sajnos az SD falja a RAM-ot.

 

Mára már jóéjszakát!

Előzmény: Törölt nick (2746)
Törölt nick Creative Commons License 2017.01.16 0 0 2746

Sketch uses 26602 bytes (82%) of program storage space. Maximum is 32256 bytes.
Global variables use 1662 bytes (81%) of dynamic memory, leaving 386 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur.

A kód, amiből lehetne gyomlálni

 

[code]
/*Arduino Uno, ATmega328
Multiple DS18B20 Temperature Sensors
DS18B20 Pinout (Left to Right, pins down, flat side toward you)
- fekete = Ground
- sárga = Signal (Pin 2): (with 3.3K to 4.7K resistor to +5 or 3.3 )
- zöld = +5 or +3.3
Displayed on 4x20 character LCD display
DS3231 RTC
MAX6675 + K' thermocouple
DS1624 Temperature Sensors
*/
#include <SPI.h>
#include <SD.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <DS1624.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <MAX6675.h>
DS1624 temperature1(0x48);
DS1624 temperature2(0x4E);
DS1624 temperature3(0x4D);
DS1624 temperature4(0x4F);
#define DS3231_I2C_ADDRESS 0x68

// Convert normal decimal numbers to binary coded decimal
byte decToBcd(byte val)
{
return( (val/10*16) + (val%10) );
}
// Convert binary coded decimal to normal decimal numbers
byte bcdToDec(byte val)
{
return( (val/16*10) + (val%16) );
}
/*-----( Declare Constants and Pin Numbers )-----*/
// Data wire is plugged into port 2 on the Arduino (can be changed)
#define ONE_WIRE_BUS 2 // NOTE: No ";" on #define
#define SZV1START 3 // relay1
#define SZV2START 4 // relay2
#define PUFFER 5 // relay3
#define LAKAS1 6 // relay4
#define BYPASS 7 // relay5
#define LAKAS2 8 // relay6
/*-----( Declare objects )-----*/
// Setup a oneWire instance to communicate with any OneWire devices
// (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);

// Pass address of our oneWire instance to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Start the LCD display library
LiquidCrystal_I2C lcd(0x27,20,4); // set the LCD address to 0x27 for a 20 chars and 4 line display
int LED1 = 13; // Status LED Pin
int CS = 10; // CS pin on MAX6675
int SO = 11; // SO pin of MAX6675
int SCLK = 9; // SCLK pin of MAX6675
int units = 1; // Units to readout temp (0 = raw, 1 = ˚C, 2 = ˚F)
float fusthofok = 0.0; // Temperature output variable
float lakaskW = 0.0;
float kazankW = 0.0;
// Initialize the MAX6675 Library for our chip
MAX6675 temp(CS,SO,SCLK,units);


// Setup Serial output and LED Pin
// MAX6675 Library already sets pin modes for MAX6675 chip!
/*-----( Declare Variables )-----*/
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// http://arduino-info.wikispaces.com/Brick-Temperature-DS18B20#Read%20individual

// WP 1
DeviceAddress pufferfent = { 0x28, 0xAC, 0xFA, 0x26, 0x06, 0x00, 0x00, 0x8C }; // "T1"
DeviceAddress puffer1_3 = { 0x28, 0x61, 0xBB, 0x26, 0x06, 0x00, 0x00, 0x7D }; // "T2"
DeviceAddress puffer2_3 = { 0x28, 0x99, 0x10, 0x26, 0x06, 0x00, 0x00, 0xED }; // "T3"
DeviceAddress pufferlent = { 0x28, 0x15, 0x1F, 0x28, 0x06, 0x00, 0x00, 0x00 }; // "T4"
DeviceAddress kintihofok = { 0x28, 0x49, 0xFE, 0x26, 0x06, 0x00, 0x00, 0x51 }; // "T9"
float temppufferfent = 0.0;
float temppuffer1_3 = 0.0;
float temppuffer2_3 = 0.0;
float temppufferlent = 0.0;
float tempkintihofok = 0.0;
float T1 = sensors.getTempC(pufferfent);
float T2 = sensors.getTempC(puffer1_3);
float T3 = sensors.getTempC(puffer2_3);
float T4 = sensors.getTempC(pufferlent);
float T9 = sensors.getTempC(kintihofok);
float kW1 = ((T1+T2+T2+T3+T3+T4)/6)-37 ;
float kW = kW1*1.2771 ;
float szazalek = kW/64*100;
float T5 = temperature1.getTemp();
float T6 = temperature2.getTemp();
float T7 = temperature3.getTemp();
float T8 = temperature4.getTemp();
float lakaskW1 = (T5-T6)*0.001161*12.5*60;
float kazankW1 = (T7-T8)*0.001161*28*60;

void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte
dayOfMonth, byte month, byte year)
{
// sets time and date data to DS3231
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set next input to start at the seconds register
Wire.write(decToBcd(second)); // set seconds
Wire.write(decToBcd(minute)); // set minutes
Wire.write(decToBcd(hour)); // set hours
Wire.write(decToBcd(dayOfWeek)); // set day of week (1=Sunday, 7=Saturday)
Wire.write(decToBcd(dayOfMonth)); // set date (1 to 31)
Wire.write(decToBcd(month)); // set month
Wire.write(decToBcd(year)); // set year (0 to 99)
Wire.endTransmission();
}
void readDS3231time(byte *second,
byte *minute,
byte *hour,
byte *dayOfWeek,
byte *dayOfMonth,
byte *month,
byte *year)
{
Wire.beginTransmission(DS3231_I2C_ADDRESS);
Wire.write(0); // set DS3231 register pointer to 00h
Wire.endTransmission();
Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
// request seven bytes of data from DS3231 starting from register 00h
*second = bcdToDec(Wire.read() & 0x7f);
*minute = bcdToDec(Wire.read());
*hour = bcdToDec(Wire.read() & 0x3f);
*dayOfWeek = bcdToDec(Wire.read());
*dayOfMonth = bcdToDec(Wire.read());
*month = bcdToDec(Wire.read());
*year = bcdToDec(Wire.read());
}
void kiolvas_t()
{
//puffer hőfok DS18B20-ból
sensors.requestTemperatures(); // Send the command to get temperatures
temppufferfent = sensors.getTempC(pufferfent);
temppuffer1_3 = sensors.getTempC(puffer1_3);
temppuffer2_3 = sensors.getTempC(puffer2_3);
temppufferlent = sensors.getTempC(pufferlent);
tempkintihofok = sensors.getTempC(kintihofok);
float T1 = sensors.getTempC(pufferfent);
float T2 = sensors.getTempC(puffer1_3);
float T3 = sensors.getTempC(puffer2_3);
float T4 = sensors.getTempC(pufferlent);
float T9 = sensors.getTempC(kintihofok);
float kW1 = ((T1+T2+T2+T3+T3+T4)/6)-37 ;
float kW = kW1*1.2771 ;
float szazalek = kW/64*100;

//hőfok kiolvasása DS1624-ből
float T5 = temperature1.getTemp();
float T6 = temperature2.getTemp();
float T7 = temperature3.getTemp();
float T8 = temperature4.getTemp();
float lakaskW1 = (T5-T6)*0.001161*12.5*60;
float kazankW1 = (T7-T8)*0.001161*28*60;
//lakástermosztát fűtésre kapcsol= A3=5V
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
//hőfok kiolvasása MAX6675-ből
fusthofok = temp.read_temp();
if (LAKASFUTES > 0)
{
lakaskW = lakaskW1;
}
else
{
lakaskW = 0;
}
if(T7 > 47)
{
kazankW = kazankW1;
}
else
{
kazankW = 0;
}
}
void serial_print()
{
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
Serial.println(LAKASFUTES);
Serial.println(fusthofok);
Serial.println(T1);
Serial.println(T2);
Serial.println(T3);
Serial.println(T4);
Serial.println(T5);
Serial.println(T6);
Serial.println(T7);
Serial.println(T8);
Serial.println(T9);
Serial.println(kW);
Serial.println(szazalek);

}
void sd_iras()
{
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
SD.begin(A0);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
String dataString = "";
dataString += String(dayOfMonth, DEC);
dataString += ";";
dataString += String(hour, DEC);
dataString += ";";
dataString += String(minute, DEC);
dataString += ";";
dataString += String(second, DEC);
dataString += ";";
dataString += String(LAKASFUTES);
dataString += ";";
dataString += String(fusthofok);
dataString += ";";
dataString += String(T1);
dataString += ";";
dataString += String(T2);
dataString += ";";
dataString += String(T3);
dataString += ";";
dataString += String(T4);
dataString += ";";
dataString += String(T5);
dataString += ";";
dataString += String(T6);
dataString += ";";
dataString += String(T7);
dataString += ";";
dataString += String(T8);
dataString += ";";
dataString += String(T9);
dataString += ";";
dataString += String(kazankW);
dataString += ";";
dataString += String(lakaskW);
dataString += ";";
dataString += String(kW);
dataString += ";";
dataString += String(szazalek);
dataString += ";";
dataString.replace('.',',');
File dataFile = SD.open("datalog.csv", FILE_WRITE);

// if the file is available, write to it:
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
}
}
void lcd_idopont ()
{
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(5,0);
lcd.print("20");
lcd.setCursor(7,0);
lcd.print(year, DEC);
lcd.setCursor(9,0);
lcd.print(".");
lcd.setCursor(10,0);
lcd.print(month, DEC);
lcd.setCursor(12,0);
lcd.print(".");
lcd.setCursor(13,0);
lcd.print(dayOfMonth, DEC);
lcd.setCursor(15,0);
lcd.print(".");
lcd.setCursor(5,1);
lcd.print(hour, DEC);
lcd.setCursor(7,1);
lcd.print(":");
lcd.setCursor(8,1);
lcd.print(minute, DEC);
lcd.setCursor(10,1);
lcd.print(":");
lcd.setCursor(11,1);
lcd.print(second,DEC);
lcd.setCursor(1,3);
lcd.print(dayOfWeek);
lcd.setCursor(2,3);
lcd.print(".");
lcd.setCursor(5,3);
lcd.print("nap a heten");
}
void lcd_puffer ()
{
float T1 = sensors.getTempC(pufferfent);
lcd.clear();
lcd.home(); lcd.backlight();
lcd.setCursor(8,0);
lcd.print("PUFFER");
lcd.setCursor(0,1);
lcd.print("T1=");
lcd.setCursor(4,1);
lcd.print(T1);
lcd.setCursor(11,1);
lcd.print("T2=");
lcd.setCursor(14,1);
lcd.print(T2);
lcd.setCursor(0,2);
lcd.print("T3=");
lcd.setCursor(4,2);
lcd.print(T3);
lcd.setCursor(11,2);
lcd.print("T4=");
lcd.setCursor(14,2);
lcd.print(T4);
lcd.setCursor(0,3);
lcd.print("kW=");
lcd.setCursor(4,3);
lcd.print(kW);
lcd.setCursor(11,3);
lcd.print("%=");
lcd.setCursor(14,3);
lcd.print(szazalek);
}
void lcd_teljesitmeny()
{
float T7 = temperature3.getTemp();
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(4,0);
lcd.print("LAKAS:");
lcd.setCursor(11,0);
lcd.print(lakaskW);
lcd.setCursor(0,1);
lcd.print("T5=");
lcd.setCursor(4,1);
lcd.print(T5);
lcd.setCursor(11,1);
lcd.print("T6=");
lcd.setCursor(14,1);
lcd.print(T6);
lcd.setCursor(4,2);
lcd.print("KAZAN:");
lcd.setCursor(11,2);
lcd.print(kazankW);
lcd.setCursor(0,3);
lcd.print("T7=");
lcd.setCursor(4,3);
lcd.print(T7);
lcd.setCursor(11,3);
lcd.print("T8=");
lcd.setCursor(14,3);
lcd.print(T8);
}
void lcd_fusthofok()
{
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(8,0);
lcd.print("FUSTHOFOK");
lcd.setCursor(0,1);
lcd.print("fusthofok=");
lcd.setCursor(11,1);
lcd.print(fusthofok);
lcd.setCursor(8,2);
lcd.print("KINTIHOFOK");
lcd.setCursor(0,3);
lcd.print("kintihofok=");
lcd.setCursor(12,3);
lcd.print(T9);
}
void szabalyozas()
{
float T7 = temperature3.getTemp();
if(T7 > 55 && fusthofok > 130)
{

digitalWrite(LAKAS1,LOW );
digitalWrite(SZV1START,HIGH);
digitalWrite(PUFFER, HIGH);
}
else
{
if(T7 > 47)
{
digitalWrite(PUFFER, LOW);
digitalWrite(LAKAS1, HIGH);
digitalWrite(SZV1START, HIGH);
}
else
{
digitalWrite(PUFFER, LOW);
digitalWrite(LAKAS1, HIGH);
digitalWrite(SZV1START, LOW);
}
}
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);
if ( LAKASFUTES > 4 && szazalek >1)
{
digitalWrite(BYPASS, HIGH);
digitalWrite(LAKAS2, LOW); // 6. RELÉ 8d
digitalWrite(SZV2START, HIGH); // 2. RELÉ 4d
}
else
{
digitalWrite(LAKAS2, HIGH);
digitalWrite(BYPASS, LOW); // 5. RELÉ 7d
digitalWrite(SZV2START, LOW); // 2. RELÉ 4d
}
}
#include "Timer.h"
#define INTERVAL_SD 3000 // sd kártya írás ciklus
#define INTERVAL_LCD 4000 // lcd írás ciklus
#define INTERVAL_PROG 6000 //program futás ciklus
Timer t;
void setup() {
t.every(3*1000, kiolvas_t); //3 másodpercenként
t.every(3*1000, serial_print); //3 másodpercenként
t.every(60*1000, sd_iras); //percenként
t.every(6*1000, szabalyozas); //6 másodpercenként
t.every(4*1000*4, lcd0); //sorban 4 másodpercenként a 4 kijelzési kép
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(9600);
// set the initial time here:
//DS3231 seconds, minutes, hours, day, date, month, year
//setDS3231time(30,12,11,13,13,04,16);

//------- Initialize the Temperature measurement library--------------
sensors.begin();
// set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)
sensors.setResolution(pufferfent, 10); //T1
sensors.setResolution(puffer1_3, 10); //T2
sensors.setResolution(puffer2_3, 10); //T3
sensors.setResolution(pufferlent, 10); //T4
sensors.setResolution(kintihofok, 10); //T9
temperature1.start();
temperature2.start();
temperature3.start();
temperature4.start();
pinMode(LED1, OUTPUT);
pinMode(SZV1START, OUTPUT);
pinMode(LAKAS1, OUTPUT);
pinMode(PUFFER, OUTPUT);
pinMode(SZV2START,OUTPUT);
pinMode(LAKAS2,OUTPUT);
pinMode(BYPASS,OUTPUT);
digitalWrite(SZV1START, HIGH); // szv1 áll
digitalWrite(LAKAS1, HIGH);
digitalWrite(PUFFER, HIGH); // pufferre állítja az irányváltó1-et
digitalWrite(SZV2START, HIGH); // szv2 áll
digitalWrite(LAKAS2, HIGH);
digitalWrite(BYPASS, HIGH); // bypassra állítja irányváltó2-őt

pinMode(A0, OUTPUT);
SD.begin(A0);
if (!SD.begin(A0)) {

Serial.println("initialization failed!");
return;
}
Serial.println("initialization done.");

if (SD.exists("datalog.csv")) {
Serial.println("datalog.csv exists.");
}
else {
Serial.println("datalog.csv doesn't exist.");
}
}
void loop() {
t.update();
}
void lcd0() {
lcd_idopont();
t.after(INTERVAL_LCD , lcd1);
}
void lcd1() {
lcd_puffer();
t.after(INTERVAL_LCD , lcd2);
}
void lcd2() {
lcd_teljesitmeny();
t.after(INTERVAL_LCD , lcd3);
}
void lcd3() {
lcd_fusthofok();
}
[/code]

Előzmény: titusz99 (2744)
Törölt nick Creative Commons License 2017.01.16 0 0 2745

Megnézem, már az előző is alakul.

Előzmény: titusz99 (2744)
titusz99 Creative Commons License 2017.01.16 0 0 2744

Ez a Timer is a millis-t használja.

Mennyi ideig tartanak a hőmérések?

 

kb ennyi: 

void setup() {
t.every(3*1000, kiolvas_t); //3 másodpercenként

t.every(3*1000, serial_iras); //3 másodpercenként

t.every(60*1000, sd_iras); //percenként
t.every(6*1000, szabalyozas); //6 másodpercenként
t.every(4*1000*4, lcd0); //sorban 4 másodpercenként a 4 kijelzési kép
}
void loop() {
t.update();
}
void lcd0() {
lcd_idopont();
t.after(INTERVAL_LCD , lcd1);
}
void lcd1() {
lcd_puffer();
t.after(INTERVAL_LCD , lcd2);
}
void lcd2() {
lcd_teljesitmeny();
t.after(INTERVAL_LCD , lcd3);
}
void lcd3() {
lcd_fusthofok();
}

Előzmény: Törölt nick (2743)
Törölt nick Creative Commons License 2017.01.16 0 0 2743

Megnézem.

Amit ki szeretnék hozni a kódból:

delay() nélkül legyen // mert az jó,

6 mp-ént szabályozzon,

legyen elég idő a hőfok mérésekre // 3 mp,

4 mp-ig olvasható egy-egy kiírás az lcd-n,

írjon serial-ra is.

Ez egy Timerrel menni fog?

 

 

Előzmény: titusz99 (2741)
titusz99 Creative Commons License 2017.01.16 0 0 2742

Timer library val így néz(het) ki (f1-f9-ig a lépések):

#include "Timer.h"
#define INTERVAL_SD 3000 // sd kártya írás ciklus
#define INTERVAL_LCD 4000 // lcd írás ciklus
#define INTERVAL_PROG 6000 //program futás ciklus
Timer t
void setup() {
t.after(INTERVAL_SD, f1);
}
void loop() {
t.update();
}
void f1()
{
kiolvas_t();
sd_iras();
serial_print();
t.after(INTERVAL_LCD , f2);
}
void f2()
{
lcd_idopont();
kiolvas_t();
t.after(INTERVAL_PROG , f3);
}
void f3()
{
szabalyozas();
t.after(INTERVAL_LCD , f4);
}
void f4()
{
lcd_puffer();
kiolvas_t();
t.after(INTERVAL_PROG 00, f5);
}
void f5()
{
szabalyozas();
kiolvas_t();
t.after(INTERVAL_LCD , f6);
}
void f6()
{
lcd_teljesitmeny();
kiolvas_t();
t.after(INTERVAL_PROG , f7);
}
void f7()
{
szabalyozas();
kiolvas_t();
t.after(INTERVAL_LCD , f8);
}
void f8()
{
lcd_fusthofok();
kiolvas_t();
t.after(INTERVAL_PROG , f9);
}
void f9()
{
szabalyozas();
serial_print();
t.after(INTERVAL_SD , f1);
}

Előzmény: Törölt nick (2740)
titusz99 Creative Commons License 2017.01.16 0 0 2741

Tehát ezek szerint 1 loop ciklus 43 sec?

 

Nézd meg a Timer library-t.

Nagyon meg tudja könnyíteni a program írását.

És sokkal átláthatóbbá válik.

Előzmény: Törölt nick (2740)
Törölt nick Creative Commons License 2017.01.16 0 0 2740

kiolvas_t //minden hőmérőt kiolvas

3 mp után

sd_iras // sd-re ment adatokat

serial_print // serial-ra kiír adatokat

+4 mp után

lcd_idopont // lcd-re kiírja az időpont adatokat

kiolvas_t // frissíti a hőfok adatokat

+6 mp után

szabalyozas // az adatok alapján elvégzi a szabályozást

+4 mp után

.

.

.

.

8 ciklus összesen =43 mp

Előzmény: titusz99 (2738)
halaloszto Creative Commons License 2017.01.16 0 0 2739

én másképp vagyok bekötve. nekem nyilván a nagyvilágból kell elérni, ha otthon vagyok tudom kb mennyi fok van.

Előzmény: titusz99 (2736)
titusz99 Creative Commons License 2017.01.16 0 0 2738

Egy loop-on belül:

Egyszer lefutnak 3 másodpercenként:

sd_iras();
serial_print();

 

Egyszer lefutnak 4 másodpercenként:

lcd_idopont();
kiolvas_t();

De nem futnak le:

lcd_puffer();
kiolvas_t();

 

és

lcd_teljesitmeny();
kiolvas_t();

és

lcd_fusthofok();
kiolvas_t();

 

 

Egyszer lefutnak 6 másodpercenként:

szabalyozas();

de nem futnak le:

szabalyozas();
kiolvas_t();

 

és

szabalyozas();
kiolvas_t();

és

szabalyozas();
serial_print();

 

 

 

Előzmény: Törölt nick (2735)
titusz99 Creative Commons License 2017.01.16 0 0 2737

Ha időzítések kellenek használjátok a Timer könyvtárat.

https://github.com/JChristensen/Timer

 

Ha az arduino-t havonta egyszer újraindítjátok akkor a millis használata elmegy.

De így kb. az 50. napon meghülyül (millis túlcsordul).

Helyesen(az első):

if(millis() - sdTimestamp >= INTERVAL_SD)

 

Minek az a sok kiolvas_t();

Több feltételben is használod ugyan azokat a timestamp-okat.

Egyébként ezért nem fut le némelyik.

Előzmény: Törölt nick (2735)
titusz99 Creative Commons License 2017.01.16 0 0 2736

Nyílván nem a nagyvilágból kell elérni.

Talán elég az otthoni hálózatból.

Előzmény: halaloszto (2734)
Törölt nick Creative Commons License 2017.01.16 0 0 2735

Valamit nem jól csináltam, nem futnak le egymás után az egyes ciklusok, csak az lcd_idopont (); ismétlődik:

#define INTERVAL_SD 3000 // sd kártya írás ciklus
#define INTERVAL_LCD 4000 // lcd írás ciklus
#define INTERVAL_PROG 6000 //program futás ciklus
unsigned long sdTimestamp =0; // millis-hez állítja sd ciklus idejét
unsigned long lcdTimestamp =0; //millis-hez állítja lcd ciklus idejét
unsigned long progTimestamp =0; // millis-hez állítja prog ciklus idejét

.

.

.

.

.

void loop()
{
kiolvas_t();

if(sdTimestamp + INTERVAL_SD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
sd_iras();
serial_print();
sdTimestamp = millis();
}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_idopont();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
progTimestamp = millis();

}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_puffer();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
kiolvas_t();
progTimestamp = millis();

}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_teljesitmeny();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
kiolvas_t();
progTimestamp = millis();

}
if(lcdTimestamp + INTERVAL_LCD < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
lcd_fusthofok();
kiolvas_t();
lcdTimestamp = millis();

}
if(progTimestamp + INTERVAL_PROG < millis())
{
digitalWrite(LED1, !digitalRead(LED1)); // toggles the LED on/off
szabalyozas();
serial_print();
progTimestamp = millis();

}
}

halaloszto Creative Commons License 2017.01.16 0 0 2734

ahhoz még kell dinamikus dns és portforward a routereden. érteni is kell hozzá meg nem is veszélytelen

Előzmény: titusz99 (2732)
titusz99 Creative Commons License 2017.01.16 0 0 2733

És mit mérsz?

Dallas-val nincs gond (kivéve ha fake).

MAX6675-nél adódhatnak problémák.

Előzmény: stinky14 (2730)
titusz99 Creative Commons License 2017.01.16 0 0 2732

Ha ESP-t +ban webszerverként programozod fel, akkor közvetlenül is lekérdezheted telefonról.

Előzmény: stinky14 (2730)
titusz99 Creative Commons License 2017.01.16 0 0 2731

Igen.

Tulajdonképpen thingspeak szerverére el kell juttatni az adatokat.

A telefonon levő program meg onnan veszi le.

Ezért a legegyszerűbb arduino-t helyettesíteni ESP-vel.

A barométerem is így megy. A tápját egy szgép adja USB-n.

Előzmény: stinky14 (2729)
stinky14 Creative Commons License 2017.01.16 0 0 2730

Szerkeszteni már nem tudtam. 

Sajnos még csak bluetoothon tudok kommunikálni. Tesztelgetem a rendszereket, hogy végül minek a felhasználásával építsem meg teljesen a ház vezérlését. De egy wifi modul még belefér próbának. 

Előzmény: stinky14 (2729)
stinky14 Creative Commons License 2017.01.16 0 0 2729

Még csak rálestem a programra, de jól látom, hogy kötelező hozzá wifi vagy enternet modul? 

Előzmény: titusz99 (2728)
titusz99 Creative Commons License 2017.01.16 0 0 2728

Az enyémet ezen a címen lehet elérni.

Jelenleg csak egy barométer (ESP8266) küldi az adatokat.

Előzmény: stinky14 (2727)
stinky14 Creative Commons License 2017.01.16 0 0 2727

Tökéletes!! Köszönöm! 

Előzmény: titusz99 (2726)
titusz99 Creative Commons License 2017.01.16 0 0 2726

pl.: thingspeak

Előzmény: stinky14 (2725)
stinky14 Creative Commons License 2017.01.16 0 0 2725

Létezik olyan androidos program, amelyikkel ki tudnám rakni a mért hőmérsékletet widgetként a főképernyőre? 

 

titusz99 Creative Commons License 2017.01.16 0 0 2724

Amikor a millis() átfordul, lesznek meglepetések.

Előzmény: Vargham (2723)
Vargham Creative Commons License 2017.01.16 0 0 2723

Miért is?

Előzmény: titusz99 (2722)
titusz99 Creative Commons License 2017.01.16 0 0 2722

Amit még javítani kellene:

 

       (timestampButton + BUTTON_SHORT < millis())

 

helyett

       (millis() - timestampButton > BUTTON_SHORT)

 

És persze a többi millis() sorokat is. (41, 47 és 64-es sorokban)

 

Üdv.:Titusz

Előzmény: Vargham (2720)
Nooorbi91 Creative Commons License 2017.01.15 0 0 2721

Köszönöm, így már tökéletesen működik! :)

Előzmény: Vargham (2720)
Vargham Creative Commons License 2017.01.15 0 0 2720

Ezt az értéket növelted?

#define LAMP_TIMEOUT    5000 //ms

Kell egy L (long int jelölése) a végére

#define LAMP_TIMEOUT    5000L //ms

 

Valamint int helyett:

unsigned int timestampLamp = 0;
unsigned int timestampButton = 0;

long

unsigned long timestampLamp = 0;
unsigned long timestampButton = 0;

 

Ezeket javítottam, itt a link

https://gist.github.com/vargham/772c6b116f4aec4f0792dd573ee00137

 

Mást is átírtál a kódban?

Előzmény: Nooorbi91 (2719)
Nooorbi91 Creative Commons License 2017.01.15 0 0 2719

Végre elkészült a lámpa és fel is szereltem a helyére.
Viszont amikor a világítási időt feljebb vettem jöttek a bajok.

5mp idővel még semmi gond.  De veszem egyre feljebb egyre gyakrabban fagy le.
2 perces időt akarok beállítani egyenlőre, de ott már mindig gond van vele.
2 perc után lekapcsol ahogy kell, de aztán a következő gombnyomásra már rögtön a folyamatosan világító üzemmódba kapcsol(világít az ezt jelző LED) és hiába nyomkodom a gombot, le se lehet kapcsolni.

Próbapanelen, uno vezérlővel ugyan ez csinálja. (a kész lámpába nano került)

Előzmény: Vargham (2597)

Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!