szla0056
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)
szla0056
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)
Vargham
2017.01.19
0 0
2755
Nincs rajta bootloader. Megoldás: Tegyél rá. (Van működő Arduinod?)
UNO bootloader van rajta. Megoldás: Válaszd az UNO-t a board listából.
Zárlatos / szakadt a panel. Megoldás: Javítsd meg.
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
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.
Törölt nick
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
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
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
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
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ó leszfloat 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
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)
titusz99
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
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
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
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
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)
titusz99
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
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)
Törölt nick
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(); } }
Ha kedveled azért, ha nem azért nyomj egy lájkot a Fórumért!