Keresés

Részletes keresés

Törölt nick Creative Commons License 2017.02.12 0 0 2818

Üdv Mindenkinek

Innen letölthető az Ignis kijelző minta vezérlő programja arduinohoz. Ez pedig a forrás.

Jó bütykölést

Prof Creative Commons License 2017.02.12 0 0 2817

Szia,

Van három alap mintaprogram az Arduino IDE oktatási anyagában (Button, Fading és AnalogInput). Ezeket kell összegyúrni. Sokkal többet érsz vele, ha rászánod ezt a délutánt (estig meglesz), mintha valaki megírja helyetted 10-15 perc alatt.

Előzmény: ucs69 (2816)
ucs69 Creative Commons License 2017.02.12 0 0 2816

Szeretnék segítséget kérni arduino programozáshoz. Egy egyszerű programra lenne szükségem, de sehol nem találok ilyet.

A következő lenne : A nyomógombbal bekapcsoljuk a ledet. Amikor világít az 1 db led, akkor 1db potméterrel  szabályozzuk a fény erejét( PWM). És amikor a nyomógombbot újra nyomjuk, akkor a led kikapcsol. 

Előre is köszönöm.

 

Tomiali Creative Commons License 2017.02.08 0 0 2815

Szia. Köszi. Nézegettem a webszervert  de nekem még kínai. :(

Előzmény: balage8888 (2814)
balage8888 Creative Commons License 2017.02.07 0 0 2814

webserver az arduionon, a gepen meg idonkent lefut egy lekerdezes, ami menti az adatokat...

Előzmény: Tomiali (2808)
Törölt nick Creative Commons License 2017.02.07 0 0 2813

Fűtés végén kiderül, újra indít-e a wdt.

7 14 58 2

7 14 58 17
7 14 58 32
7 14 58 47
7 14 59 2
7 14 59 17
7 14 59 32
7 15 0 42 itt lett feltöltve az új kód
7 15 0 57
7 15 1 18 továbbra is 15 másodpercenként ír sd-re, nincs újra indítás.
7 15 1 33
7 15 1 48
7 15 2 3
7 15 2 18
7 15 2 33
7 15 2 48
7 15 3 3
7 15 3 18
7 15 3 33
7 15 3 48
7 15 4 3
7 15 4 18
7 15 4 33
7 15 4 48
7 15 5 3
7 15 5 18
7 15 5 33
7 15 5 48
7 15 6 3
7 15 6 18
7 15 6 33
7 15 6 48

Előzmény: titusz99 (2812)
titusz99 Creative Commons License 2017.02.07 0 0 2812

Erre szerintem nincs szükség:

t.every(8*1000, wdtreset); 8 másodpercenként reseteli wdt-ert

 

Hiszen a loop-ba beteszed a wdtresetet és kész.

 

 

Egyébként szerintem állandóan újraindul a rendszered vagy nagyon határesetben működik.

 

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

A program futása a fűtés vége felé megakad, a kazán szivattyú üzemel, de nem állítja le a hőfok visszaesése.

A wdt beszúrása működne, ha egyébként működik:

kiolvas_t();

t.every(5*1000, kiolvas_t); //5 másodpercenként
t.every(5*1000, serial_print); //5 másodpercenként
t.every(15*1000, sd_iras); //15 másodpercenként
t.every(6*1000, szabalyozas); //6 másodpercenként
t.every(4*1000, lcd0); //sorban 4 másodpercenként a 4 kijelzési kép
t.every(8*1000, wdtreset); 8 másodpercenként reseteli wdt-ert

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

Serial.println(F("initialization failed!"));
return;

}
Serial.println(F("initialization done."));

if (SD.exists("datalog.csv")) {
Serial.println(F("datalog.csv exists."));
}
else {
Serial.println(F("datalog.csv doesn't exist."));
}
wdt_enable(WDTO_8S);
}
void loop()
{
t.update();
}
void lcd0()
{
static int c = 0;
if (c==0) lcd_idopont();
if (c==1) lcd_puffer();
if (c==2) lcd_teljesitmeny();
if (c==3) lcd_fusthofok();
c=(c+1) % 4;
}

Előzmény: titusz99 (2795)
Zizikus Creative Commons License 2017.02.04 0 0 2810

Itt egy teljes program VB.Net-re. Nem próbáltam, csak mutatom, hogy lehet sajátot is csinálni.

 

http://www.martyncurrey.com/arduino-and-visual-basic-part-1-receiving-data-from-the-arduino/

Erre kerestem rá:

 

"serial communication between PC and Arduino vb.net"

 

Persze más nyelvekre is jó.

Előzmény: Tomiali (2808)
Zizikus Creative Commons License 2017.02.04 0 0 2809

Szia

 

Ha jól emlékszem, akkor egyszerűen nem, de lehet írni kis programokat erre a célra, vagy esetleg soros terminált, vagy ahhoz hasonló programmal megoldhatod.

A serialprint utasítások a sorosportra írnak, szóval a mai VS rendszerben pl elég könnyen lehet íni olyan programot, ami figyeli a megadott portot, és ha jön adat akkor rögzíti.

 

De lehet jönnek mások, akik már megoldották ezt.

Előzmény: Tomiali (2808)
Tomiali Creative Commons License 2017.02.04 0 0 2808

Sziasztok.

Össze van kötve az arduinom egy számítógéppel hőmérsékleteket mérek. Meg lehet valahogy oldani, hogy időnként mentse az adatokat a gépre?

 

Köszönöm

Prof Creative Commons License 2017.01.30 0 0 2807

Műszerdoboz, kötőszekrény, fa doboz (DIY), a kijelző köré pedig keret (rendszerint mindent kapni).

Előzmény: gibsongityo (2806)
gibsongityo Creative Commons License 2017.01.30 0 0 2806

Sziasztok

 

Érdekelne milyen burkolatokat tudtok 2 és 4 soros kijelzőhöz 

 

Ilyeneket tennék fel a falra és jó lenne valami faja burkolat 

 

 

 

Tomiali Creative Commons License 2017.01.28 0 0 2805

Köszi meg nézem.

Előzmény: halaloszto (2804)
halaloszto Creative Commons License 2017.01.27 0 0 2804

olvass utánna a PID szabályozás témának. Amit leírsz, az a D belóle. neked egy PD is elég. 

 

az is jó lehet, ha keresel egy arduino PID példaprogramot, és játszol kicsit a paraméterekkel.

 

Vajk

Előzmény: Tomiali (2803)
Tomiali Creative Commons License 2017.01.27 0 0 2803

Sziasztok.

Egy kis segítséget kérnék.

Mérek egy hőmérsékletet, van egy beállított hőmérsékletem ha alá megy a mért meg húz egy relét x ideig, majd elengedi és vár hogy menjen feljebb a hőmérséklet.

Ha letelik a várakozás és nem ment feljebb a beállított fölé megint meg húz. Ez így megy addig míg el nem éri a beállítottat. Hogy lehetne azt megoldani, hogy ha nem érte el a beállítottat de emelkedik a hőmérséklet akkor ne húzza be a relét?

 

Köszönöm

halaloszto Creative Commons License 2017.01.26 0 0 2802

ez király!!

 

ezeket a motorokat nem szánták tartós üzemre ugye. 50-60fok nem árthat neki, szóval amíg a kezed állja, addig ok.


Vajk

Előzmény: Trike. (2801)
Trike. Creative Commons License 2017.01.26 0 1 2801

Mire jó a hideg? Nincs kedvem kimozdulni, ergó van időm otthon :)

 

Már minden szép és jó, csak baromira melegszenek a motorok.

 

10mA a nyugalmi áramfelvétele.

 

Előzmény: Trike. (2800)
Trike. Creative Commons License 2017.01.25 0 0 2800

Közben sikerült, de úgy kattog, mint a ...

 

Az eredeti felhasználási helyén szép csendben zümmögött. Tuti még valami nem stimmel a Settins-ben :(

Előzmény: Trike. (2799)
Trike. Creative Commons License 2017.01.24 0 1 2799

Épített már valaki CD-ROM CNC-t?

 

Nekem összeállt, de a GRBL Settings kifogott rajtam :(

 

Törölt nick Creative Commons License 2017.01.24 0 0 2798

Feltöltöttem a vezérlőre, de meg kellett hagyni:

 

void sd_iras()
{
SD.begin(A0); // elhagyva nem nyitja meg a datalog.csv-t
freeRam();

 

 

Előzmény: Törölt nick (2796)
szf10 Creative Commons License 2017.01.24 0 0 2797

Üdvözlök mindenkit itt a fórumon.

Elakadtam egy NODEMCU-val szerettem volna illeszteni hozzá egy hőelemet MAX6675-el.

De 


#include <avr/pgmspace.h>

 

hiányolja.

 

De ezt nem tudom pótolni, amit a GIThub-ról letöltök avval sem jutottam előrébb.

 Remélem tud valaki segíteni.

 

Köszönöm

Törölt nick Creative Commons License 2017.01.24 0 0 2796

Javítások után:

 

1.8.0

Sketch uses 26414 bytes (81%) of program storage space. Maximum is 32256 bytes.
Global variables use 1367 bytes (66%) of dynamic memory, leaving 681 bytes for local variables. Maximum is 2048 bytes.

 

1.6.4

Sketch uses 29 490 bytes (91%) of program storage space. Maximum is 32 256 bytes.
Global variables use 1 357 bytes (66%) of dynamic memory, leaving 691 bytes for local variables. Maximum is 2 048 bytes.

 

Tetszik az 1.8.0, vajon miért jeleníti meg az I2C lcd-n a karaktereket?

Library gond nem lehet, mindkettő ugyan azt használja.

Előzmény: titusz99 (2795)
titusz99 Creative Commons License 2017.01.24 0 0 2795

Javítások:
Timer.h:
   #define MAX_NUMBER_OF_EVENTS (10) helyett #define MAX_NUMBER_OF_EVENTS (5)


void sd_iras()
{
SD.begin(A0);

helyett csak:

void sd_iras()
{
freeRam();


Ezt másképpen (és persze a többit is): dataString += String(dayOfMonth, DEC);
dataString += dayOfMonth;


A Serial.println(freeRam());-eket törölheted.
Elég lesz az egy is.

A dataString.reserve(150); szükséges, de tényleg jól meg kell saccolnod a méretét.
E nélkül folyamatosan növeli a dataString bufferének méretét.

A soros sebességet emeld meg.
Esetleg irasd ki az dataString-et Serial-ra.



Ez csere:
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.");
}

Erre:
if (!SD.begin(A0)) {

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

if (SD.exists("datalog.csv")) {
Serial.println(F("datalog.csv exists."));
}
else {
Serial.println(F("datalog.csv doesn't exist."));
}



Setup-on belül:
SD.begin(A0);
if (!SD.begin(A0)) {

Felesleges az eslő SD.begin, csak egyszer kell meghívni.



Ezek után NANO-ra:
1.6.12v:
Sketch uses 26 012 bytes (84%) of program storage space. Maximum is 30 720 bytes.
Global variables use 1 365 bytes (66%) of dynamic memory, leaving 683 bytes for local variables. Maximum is 2 048 bytes.

1.7.11v:
Sketch uses 29 530 bytes (96%) of program storage space. Maximum is 30 720 bytes.
Global variables use 1 355 bytes (66%) of dynamic memory, leaving 693 bytes for local variables. Maximum is 2 048 bytes.

1.8.1v:
Sketch uses 26008 bytes (84%) of program storage space. Maximum is 30720 bytes.
Global variables use 1363 bytes (66%) of dynamic memory, leaving 685 bytes for local variables. Maximum is 2048 bytes.

Előzmény: Törölt nick (2792)
titusz99 Creative Commons License 2017.01.23 0 0 2794

Ami zavar, hogy a két verzió első freeram-ja lényegesen eltér egymástól.

Ha jól látom 180 byte.

 

Olyan mintha az F() makró figyelmen kívűl lenne hagyva.

 

Ha lesz időm holnap megnézem, hogy SD mit eszik.

 

 

Előzmény: Törölt nick (2792)
Törölt nick Creative Commons License 2017.01.23 0 0 2793

Conclusions:
Free Memory functions for Arduino are a little bit voodoo magic, don’t take the absolute value for granted!

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

Minden azonos.

 

Az 1.6.4v tölti fel az üzemelő vezérlőre a  RAM vizsgálatát nem tartalmazó kódot, az I2C LCD csak azzal jeleníti meg helyesen a karaktereket.

 

[code]
//Sketch uses 26 502 bytes (86%) of program storage space. Maximum is 30 720 bytes.
//Global variables use 1 528 bytes (74%) of dynamic memory, leaving 520 bytes for local variables. Maximum is 2 048 bytes.

/*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"
#include "Timer.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 T1 = 0;
float T2 = 0;
float T3 = 0;
float T4 = 0;
float T9 = 0;
float kW1 = 0;
float kW = 0;
float szazalek = 0;
float T5 = 0;
float T6 = 0;
float T7 = 0;
float T8 = 0;
float lakaskW1 = 0;
float kazankW1 = 0;

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
T1 = sensors.getTempC(pufferfent);
T2 = sensors.getTempC(puffer1_3);
T3 = sensors.getTempC(puffer2_3);
T4 = sensors.getTempC(pufferlent);
T9 = sensors.getTempC(kintihofok);
kW1 = ((T1+T2+T2+T3+T3+T4)/6)-37 ;
kW = kW1*1.2771 ;
szazalek = kW/64*100;

//hőfok kiolvasása DS1624-ből
T5 = temperature1.getTemp();
T6 = temperature2.getTemp();
T7 = temperature3.getTemp();
T8 = temperature4.getTemp();
lakaskW1 = (T5-T6)*0.001161*12.5*60;
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()
{
SD.begin(A0);
byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
// retrieve data from DS3231
readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month,
&year);

// Lakástermosztát fűtésre kapcsol= A3=5V
int sensorValue = analogRead(A3);
float LAKASFUTES = sensorValue * (5.0 / 1023.0);

String dataString ="";
//dataString.reserve(150);
Serial.println(freeRam());
dataString += String(dayOfMonth, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(hour, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(minute, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(second, DEC);
dataString += ';';
Serial.println(freeRam());
dataString += String(LAKASFUTES);
dataString += ';';
Serial.println(freeRam());
dataString += String(fusthofok);
dataString += ';';
Serial.println(freeRam());
dataString += String(T1);
dataString += ';';
Serial.println(freeRam());
dataString += String(T2);
dataString += ';';
Serial.println(freeRam());
dataString += String(T3);
dataString += ';';
Serial.println(freeRam());
dataString += String(T4);
dataString += ';';
Serial.println(freeRam());
dataString += String(T5);
dataString += ';';
Serial.println(freeRam());
dataString += String(T6);
dataString += ';';
Serial.println(freeRam());
dataString += String(T7);
dataString += ';';
Serial.println(freeRam());
dataString += String(T8);
dataString += ';';
Serial.println(freeRam());
dataString += String(T9);
dataString += ';';
Serial.println(freeRam());
dataString += String(kazankW);
dataString += ';';
dataString += String(lakaskW);
dataString += ';';
Serial.println(freeRam());
dataString += String(kW);
dataString += ';';
Serial.println(freeRam());
dataString += String(szazalek);
dataString += ';';
Serial.println(freeRam());
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(F("nap a heten"));
}
void lcd_puffer ()
{
lcd.clear();
lcd.home(); lcd.backlight();
lcd.setCursor(8,0);
lcd.print(F("PUFFER"));
lcd.setCursor(0,1);
lcd.print(F("T1="));
lcd.setCursor(4,1);
lcd.print(T1);
lcd.setCursor(11,1);
lcd.print(F("T2="));
lcd.setCursor(14,1);
lcd.print(T2);
lcd.setCursor(0,2);
lcd.print(F("T3="));
lcd.setCursor(4,2);
lcd.print(T3);
lcd.setCursor(11,2);
lcd.print(F("T4="));
lcd.setCursor(14,2);
lcd.print(T4);
lcd.setCursor(0,3);
lcd.print(F("kW="));
lcd.setCursor(4,3);
lcd.print(kW);
lcd.setCursor(11,3);
lcd.print(F("%="));
lcd.setCursor(14,3);
lcd.print(szazalek);
}
void lcd_teljesitmeny()
{
lcd.clear();
lcd.home();
lcd.backlight();
lcd.setCursor(4,0);
lcd.print(F("LAKAS:"));
lcd.setCursor(11,0);
lcd.print(lakaskW);
lcd.setCursor(0,1);
lcd.print(F("T5="));
lcd.setCursor(4,1);
lcd.print(T5);
lcd.setCursor(11,1);
lcd.print(F("T6="));
lcd.setCursor(14,1);
lcd.print(T6);
lcd.setCursor(4,2);
lcd.print(F("KAZAN:"));
lcd.setCursor(11,2);
lcd.print(kazankW);
lcd.setCursor(0,3);
lcd.print(F("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(F("FUSTHOFOK"));
lcd.setCursor(0,1);
lcd.print(F("fusthofok="));
lcd.setCursor(11,1);
lcd.print(fusthofok);
lcd.setCursor(8,2);
lcd.print(F("KINTIHOFOK"));
lcd.setCursor(0,3);
lcd.print(F("kintihofok="));
lcd.setCursor(12,3);
lcd.print(T9);
}
void szabalyozas()
{
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
}
}
int freeRam () {
extern int __heap_start, *__brkval;
int v;
int fr = (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval);
Serial.print("Free ram: ");
Serial.println(fr);

}
Timer t;
void setup() {
lcd.init(); // initialize the lcd
lcd.backlight();
Serial.begin(115200);
// 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

kiolvas_t();

t.every(5*1000, kiolvas_t); //5 másodpercenként
t.every(5*1000, serial_print); //5 másodpercenként
t.every(15*1000, sd_iras); //15 másodpercenként
t.every(6*1000, szabalyozas); //6 másodpercenként
t.every(4*1000, lcd0); //sorban 4 másodpercenként a 4 kijelzési kép

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()
{
static int c = 0;
if (c==0) lcd_idopont();
if (c==1) lcd_puffer();
if (c==2) lcd_teljesitmeny();
if (c==3) lcd_fusthofok();
c=(c+1) % 4;
}

[/code]

Előzmény: titusz99 (2791)
titusz99 Creative Commons License 2017.01.23 0 0 2791

Úgy látom lehet összehasonlítgatni a két verziót.

Változtattál valamit a core-n belül?

Sok az a kb. 140 byte különbség.

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

IDE 1.6.4

Sketch uses 30 296 bytes (93%) of program storage space. Maximum is 32 256 bytes.
Global variables use 1 530 bytes (74%) of dynamic memory, leaving 518 bytes for local variables. Maximum is 2 048 bytes.

Free ram: 437

5
Free ram: 431
5
Free ram: 431
5
Free ram: 425
5
Free ram: 424
5
Free ram: 417
5
Free ram: 408
5
Free ram: 398
5
Free ram: 388
5
Free ram: 378
5
Free ram: 370
5
Free ram: 365
5
Free ram: 360
5
Free ram: 355
5
Free ram: 350
5
Free ram: 342
5
Free ram: 332
5
Free ram: 324
5
Free ram: 316

 

IDE 1.8.0

Sketch uses 27080 bytes (83%) of program storage space. Maximum is 32256 bytes.
Global variables use 1540 bytes (75%) of dynamic memory, leaving 508 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur.

Free ram: 255
5
Free ram: 249
5
Free ram: 249
5
Free ram: 243
5
Free ram: 242
5
Free ram: 235
5
Free ram: 226
5
Free ram: 216
5
Free ram: 206
5
Free ram: 205
5
Free ram: 204
5
Free ram: 199
5
Free ram: 194
5
Free ram: 189
5
Free ram: 184
5
Free ram: 183
5
Free ram: 173
5
Free ram: 172
5
Free ram: 171
5

Előzmény: titusz99 (2789)
titusz99 Creative Commons License 2017.01.23 0 0 2789

Azt már jeleztem, hogy az SD-re írásod kritikus.

Azt a részt át kell írni, mert nagyon sok RAM-ot eszik.

A "reserve(200)" lehet, hogy sok, ki kell számolni, de jobban jársz ha beállítod.

Javaslom, hogy serialra írasd ki a freemem értékét minden egyes sor előtt.

Akkor kiderül, hogy mi a helyzet.

Az "= String(valami);" helyett "=valami;".

 

(Kevés RAM esetén a String-ek nem működnek. Ilyenkor üresek lesznek.)

Előzmény: Törölt nick (2787)

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