Keresés

Részletes keresés

szla0056 Creative Commons License 2017.01.20 0 0 2763

Bocs az értetlenkedésért, de ezek szerint ez a kommunikáció csak az illesztővel történt eddig?

És mit takar a VID, a PID és a BN?

A bekapcsolás után folyamatosan villogó L led azt jelzi hogy fut egy bootloader?

És a hibaüzenet szerint a kontroller nem válaszol?

Előzmény: Vargham (2762)
Vargham Creative Commons License 2017.01.20 0 0 2762

> Az jó, ha most nem számít. De mit is jelent? És ezt a Nanoból kapta vissza? Akkor valami kommunikáció már van, vagy ez még nem jelenti azt?

A nano, mint minden Arduino, két fő részből áll. A cél mikrokontrollerből, ami itt ATmega 328P-PU, és a soros USB illesztő mikrokontrollerből, ami itt CH340. Tehát ez az információ semmi mást nem jelent, mint azt, hogy sikeresen lekérdezte USB kapcsolaton az illesztő VID/PID párosát.

Előzmény: szla0056 (2761)
szla0056 Creative Commons License 2017.01.20 0 0 2761

Az jó, ha most nem számít. De mit is jelent? És ezt a Nanoból kapta vissza? Akkor valami kommunikáció már van, vagy ez még nem jelenti azt?

Előzmény: Vargham (2760)
Vargham Creative Commons License 2017.01.20 0 0 2760

"BN: Unknown board
VID: 1A86
PID: 7523"

 

Jelen esetben ez nem számít semmit.

Előzmény: szla0056 (2758)
szla0056 Creative Commons License 2017.01.19 0 0 2759

Próbáld meg teljesen másik USB portról!

Úgy érted, hogy dugjam át a PC-n egy másik USB portra? Megtettem. A COM port száma más lett, (erre átírtam,) de az eredmény nem változott.

Előzmény: Prof (2757)
szla0056 Creative Commons License 2017.01.19 0 0 2758

1. Az L LED villog, ez nem azt jelenti, hogy van bootloader? Ha mégsincs rajta, hogy tudok tenni rá? Nincs másik Arduinom.

 

2. Kipróbáltam UNO-ra állítva. Így sem ment, de a hibaüzenet más volt:

avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x60

És ezt ismételte 10-szer. Az Rx leden pici felvillanások látszanak is.

Nano-t választva 2 programmer is not responding próbálkozás után ezt teszi hozzá:

avrdude: error reading signature data for part "ATmega328P", rc=-1
Mi itt a signature data? Ad ez valami infót? Nekem sajnos nem.

 

3. Nem látszik a panelen se zárlat, se szakadás.

 

4. Ezzel még várnék. :-)

 

Inkább 3$, de igazad van, most már én sem egyet rendelnék.

A "Get board info" válasz mond valakinek valamit?

"BN: Unknown board
VID: 1A86
PID: 7523"

 

Tudok rajta még tesztelni, ellenőrizni valamit?

Előzmény: Vargham (2755)
Prof Creative Commons License 2017.01.19 0 0 2757

Próbáld meg teljesen másik USB portról!

Előzmény: szla0056 (2754)
Prof Creative Commons License 2017.01.19 0 0 2756

Nekem volt eddig egy (kb. 15-ből), meg egyet én téglásítottam. Mondjuk nem a 2 dolláros, hanem az 5 dollárosok között válogattam inkább.

Előzmény: Vargham (2755)
Vargham Creative Commons License 2017.01.19 0 0 2755
  1. Nincs rajta bootloader. Megoldás: Tegyél rá. (Van működő Arduinod?)
  2. UNO bootloader van rajta. Megoldás: Válaszd az UNO-t a board listából.
  3. Zárlatos / szakadt a panel. Megoldás: Javítsd meg.
  4. Döglött az MCU. Megoldás: Dobd ki.

> Programmer-nek "USBasp"-t

Ez itt nem játszik, mindegy.

 

Egyet rendeltél? 2 dolláros termékről van szó, érdemes többet rendelni, mint újra várni hetekig, ha hibás. Mondjuk én eddig még nem találkoztam hibással.

Előzmény: szla0056 (2754)
szla0056 Creative Commons License 2017.01.19 0 0 2754

Sziasztok!

Rendeltem egy Nano V3.0 ATmega328 16M kínai klónt CH340G USB vezérlővel, hogy ismerkedjem az Ardunio rendszerrel. Első próbálkozásként letöltöttem és telepítettem hozzá az IDE-t (v. 1.8.1), és a CH430 USB driver-t. XP alatt látszik mint COM6, ezt, és a Nano-t, processzort (328) beállítottam az IDE-ben. Programmer-nek "USBasp"-t.

A panelen a zöld Power LED világít, egy piros villog. (Ez azt jelzi, hogy a Boot loader várja az infót az USB-n?)

 

Elsőként a minták közül kiválasztottam a "Blink"-et. A fordítás lefutott, de a letöltés nem:

 

"Arduino: 1.8.1 (Windows XP), Board: "Arduino Nano, ATmega328"
Sketch uses 2068 bytes (6%) of program storage space. Maximum is 30720 bytes.
Global variables use 186 bytes (9%) of dynamic memory, leaving 1862 bytes for local variables. Maximum is 2048 bytes.
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_recv(): programmer is not responding
avrdude: error reading signature data for part "ATmega328P", rc=-1
avrdude: error reading signature data, rc=-1
avrdude: error reading signature data, rc=-1

 

A "Get board info"-ra ezt kaptam:

 

"BN: Unknown board
VID: 1A86
PID: 7523"

 

Rossz lehet a panel, vagy valami még hiányzik a beállításokból?

 Előre is köszönöm a választ.

 

titusz99 Creative Commons License 2017.01.17 0 0 2753

A Dallasok kiolvasása még nem az igazi.

Feleslegesen sokáig tart.

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

Így már tökéletes.

Kezd hasonlítani egy programra.....

A stabilitás eldöntheti végre, szoftveres, vagy hardveres oka van a teljes lefagyásnak.

Stabil működés esetén jöhet a megás, due fejlesztés.

Előzmény: titusz99 (2751)
titusz99 Creative Commons License 2017.01.17 0 0 2751

Pedig mennie kellene.

 

Helyette:

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;
}


és 4*1000*4 -ből vedd le az egyik "*4"-et.

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

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();
}

A kód ezen része részlegesen fut, lcd2 és lcd3 megjelenik az lcd-n,

lcd0 és lcd1 nem fut le.

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

Köszi.

Javult a helyzet:

Sketch uses 26364 bytes (81%) of program storage space. Maximum is 32256 bytes.
Global variables use 1528 bytes (74%) of dynamic memory, leaving 520 bytes for local variables. Maximum is 2048 bytes.

Előzmény: titusz99 (2748)
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)

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