praegune kellaaeg 19.06.2025 00:41:24
|
Hinnavaatlus
:: Foorum
:: Uudised
:: Ärifoorumid
:: HV F1 ennustusvõistlus
:: Pangalink
:: Telekavad
:: HV toote otsing
|
|
autor |
|
Terror
HV veteran

liitunud: 08.11.2001
|
12.12.2014 23:37:32
Arduino koodijupp - keskkütte automaatika |
|
|
Tahaks kesküttepumpa juhtida vastavalt toa temperatuurile.
Ühte osa koodist ei saa tööle nagu tahaks:
if(toaC < 20 && radikaC > 35){
digitalWrite(relayRadiator, HIGH);
do{
delay(250);
double toaC = (analogRead(toatemp) * 3.3) / 4095*100;
double radikaC = (analogRead(radikatemp) * 3.3) / 4095*100;
}while(toaC > 22);
digitalWrite(relayRadiator, LOW);
} |
Tahaks et see töötaks nii: Kui toa temp on alla 20C ning vesi paagis on üle 35c siis lülitub pump sisse. Ning töötab niikaua kui toa temp on üle 22c (et vältida relee klõpsimist 20c piirimail). Hetkel hakkab miskipärast relee sisse välja plõksima kui temp alla 20c läheb.
Progemises olen suht võhik muidu ning vbl "do while" ei sobi?
viimati muutis Terror 30.01.2015 19:35:57, muudetud 2 korda |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
karu
HV kasutaja
liitunud: 08.08.2002
|
13.12.2014 01:11:05
|
|
|
tsitaat: |
while(toaC > 22);
|
while(toaC < 22);
|
|
Kommentaarid: 1 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
1 |
|
tagasi üles |
|
 |
LKits
HV Guru

liitunud: 06.09.2007
|
13.12.2014 11:02:42
|
|
|
Väga huvitavalt lahendatud kood... Ei saa muidugi aru, miks pumba sisselülitamise tingimust ainult ühe korra kontrollitakse, aga no võib-olla on see tõesti vajalik.
Mina lahendaksin selle olukorra robustselt, arusaadavalt.
PS: Kuna pole Arduinoga tuttav, siis võib esineda pisikesi syntaxi vigu. Eeldan, et suudad need ise lahendada
double toaC = 0.0; //defineeritakse muutujad
double radikaC = 0.0;
int c = 0; //kontrollmuutuja, et relee ei hakkaks pidevalt sisse/välja lülituma
digitalWrite(relayRadiator, LOW); //enne lõpmatut kordust lülitatakse relee "LOW" asendisse
while(true) {
toaC = (analogRead(toatemp) * 3.3) / 4095*100; //arvutatakse temperatuurid
radikaC = (analogRead(radikatemp) * 3.3) / 4095*100;
if(toaC < 20 && radikaC > 35 && c == 0) {
c = 1;
digitalWrite(relayRadiator, HIGH); //paneb relee "HIGH" asendisse
}
if(toaC > 22 && c == 1) {
c = 0;
digitalWrite(relayRadiator, LOW); //paneb relee "LOW" asendisse
}
delay(250);
} |
_________________
itLahendused - Arvutite remont ja hooldus, veebilehtede loomine, soodne veebimajutus. Võta ühendust! Tel: +372 555 268 97 ja e-post info@itlahendused.ee |
|
Kommentaarid: 13 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
13 |
|
tagasi üles |
|
 |
matukaz
HV kasutaja

liitunud: 24.05.2006
|
13.12.2014 13:32:20
|
|
|
Arduino main funktsioon käivitub iga tsükli tagant uuesti nii, et pumba sisselülitamise if lauset kontrollitaksegi koguaeg.
Ühesõnaga main funktsioon on igaveses loopis.
|
|
Kommentaarid: 28 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
LKits
HV Guru

liitunud: 06.09.2007
|
|
Kommentaarid: 13 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
13 |
|
tagasi üles |
|
 |
RassK
HV Guru

liitunud: 17.01.2007
|
13.12.2014 15:05:42
|
|
|
LKits, main on täpselt sama hea kui while(true)... seega toimib täiesti.
|
|
Kommentaarid: 116 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
101 |
|
tagasi üles |
|
 |
LKits
HV Guru

liitunud: 06.09.2007
|
|
Kommentaarid: 13 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
13 |
|
tagasi üles |
|
 |
bladerunner
HV Guru
liitunud: 17.01.2002
|
13.12.2014 16:26:54
|
|
|
Globaalmuutujad säilitavad kõik kenasti oma väärtusi ju?
Üldjuhul peaks Arduino kood selline ju välja nägema:
double toaC = 0.0;
double radikaC = 0.0;
void setup () {
}
void loop () {
}
Ja loop() kutsutakse automaagiliselt pidevalt välja.
_________________ Experience is what you get when you don't get what you want. |
|
Kommentaarid: 168 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
157 |
|
tagasi üles |
|
 |
matukaz
HV kasutaja

liitunud: 24.05.2006
|
13.12.2014 19:28:36
|
|
|
Muutujad jäävad ikka mällu edasi samal kujul , hea oleks ainult ära märkida, mis on esialgsete muutujate väärtused ja see ka kõik see ikka selleks juhuks kui arduinol kaob elekter korraks ära, muud ei midagi.
Tundub et teema on end ammendanud esialgu.
|
|
Kommentaarid: 28 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
28 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
13.12.2014 20:24:28
|
|
|
Hetke kood siis selline, Saadab andmed ka kord minutis netti https://thingspeak.com/channels/20611
Keegi kes asja jagab võiks pilgu peale visata võimalusel, et ega ma mõne hea tava vastu hullult eksinud pole.
Spoiler 
#include "OneWire/OneWire.h"
// This #include statement was automatically added by the Spark IDE.
#include "LiquidCrystal_I2C.h"
#include "SparkTime/SparkTime.h"
String writeAPIKey = "IHR7QYI1596ZCJKF";
String channelID = "20611";
// TCP socket initialize
TCPClient client;
int ledRed = A0; //if ON then indicates that there is 230V present and boiler pump is OFF
int ledGreen = A1; // is ON then boiler pump is ON
int radikatemp = A2;
int toatemp = A3;
int pliiditemp = A4;
int pliidiveetemp = A5;
int relayRadiator = D2; //relay to turn ON/OFF radiator pump
int relayBoiler = D3; // relay to turn ON/OFF boiler pump.
LiquidCrystal_I2C *lcd;
UDP UDPClient;
SparkTime rtc;
unsigned long currentTime;
unsigned long lastTime = 0UL;
String timeStr;
void setup(){
Serial.begin(9600);
Serial.println("===Starting===");
rtc.begin(&UDPClient, "north-america.pool.ntp.org");
rtc.setTimeZone(+2); // gmt offset
lcd = new LiquidCrystal_I2C(0x27, 20, 4); // set the LCD address to 0x20 for a 16x2 //SparkCore bug, address is actually 27 but shifted (0x27*2)
lcd->init(); // initialize the lcd
lcd->backlight();
lcd->clear();
pinMode(radikatemp, INPUT_PULLDOWN);
pinMode(toatemp, INPUT_PULLDOWN);
pinMode(pliiditemp, INPUT_PULLDOWN);
pinMode(pliidiveetemp, INPUT_PULLDOWN);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(relayRadiator, OUTPUT);
pinMode(relayBoiler, OUTPUT);
analogWrite(ledRed,150);
}
void loop(){
currentTime = rtc.now();
if (currentTime != lastTime) {
timeStr = "";
timeStr += rtc.hour12String(currentTime);
timeStr += ":";
timeStr += rtc.minuteString(currentTime);
timeStr += ":";
timeStr += rtc.secondString(currentTime);
timeStr += " ";
timeStr += rtc.AMPMString(currentTime);
lastTime = currentTime;
}
lcd->setCursor(5,0);
lcd->print(timeStr);
delay(100);
double radikaC = (analogRead(radikatemp) * 3.3) / 4095*100; //getting the voltage reading from the temperature sensor
double toaC = (analogRead(toatemp) * 3.3) / 4095*100;
double pliidiC = (analogRead(pliiditemp) * 3.3) / 4095*100;
double pliidiveeC = (analogRead(pliidiveetemp) * 3.3) / 4095*100;
lcd->setCursor(1,1);
lcd->print("Radikasse");
lcd->setCursor(11,1);
lcd->print(radikaC, 1);
lcd->setCursor(1,2);
lcd->print("Toatemp");
lcd->setCursor(11,2);
lcd->print(toaC, 1);
lcd->setCursor(1,3);
lcd->print("Pliita");
lcd->setCursor(11,3);
lcd->print(pliidiC, 1);
byte sec = rtc.second(currentTime);
if (sec == 10) {
if(Spark.connected())
{
ThingSpeakUpdate("field1="+String(toaC)+"&field2="+String(radikaC));
}
}
if(toaC < 20 && radikaC > 35){
digitalWrite(relayRadiator, HIGH);
do{
delay(250);
double toaC = (analogRead(toatemp) * 3.3) / 4095*100;
double radikaC = (analogRead(radikatemp) * 3.3) / 4095*100;
}while(toaC < 22 || radikaC > 30 );
digitalWrite(relayRadiator, LOW);
lcd->setCursor(11,3);
lcd->print("xxx");
}
delay(1000);
}
void ThingSpeakUpdate(String tsData)
{
Serial.println("Date string: " + tsData);
Serial.println("...Connecting to Thingspeak");
// Connecting and sending data to Thingspeak
if(client.connect("api.thingspeak.com", 80))
{
Serial.println("...Connection succesful, updating datastreams");
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.println(tsData); //the ""ln" is important here.
// This delay is pivitol without it the TCP client will often close before the data is fully sent
delay(200);
Serial.println("Thingspeak update sent.");
}
else{
// Failed to connect to Thingspeak
Serial.println("Unable to connect to Thingspeak.");
}
if(!client.connected()){
client.stop();
}
client.flush();
client.stop();
} |
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
bladerunner
HV Guru
liitunud: 17.01.2002
|
13.12.2014 20:38:53
|
|
|
Analoogseadmest lugedes soovitaks nt 5x näitu võtta 0.1s vahega ja sealt kõige suurema ja kõige väiksema kõrvale jätta ning ülejäänutest keskmise arvutada. Sel viisil saad võimalikest näidu lugemise anomaaliatest lahti.
_________________ Experience is what you get when you don't get what you want. |
|
Kommentaarid: 168 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
157 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
14.12.2014 13:00:54
|
|
|
Olen mõelnud, kuid hetkel pole see prioriteet kuna näit ei kõigu üle 0,2c.
Avastasin aga koodist ühe kala. Nimelt:
if(toaC < 20 && radikaC > 35){
digitalWrite(relayRadiator, HIGH);
do{
delay(250);
double toaC = (analogRead(toatemp) * 3.3) / 4095*100;
double radikaC = (analogRead(radikatemp) * 3.3) / 4095*100;
}while(toaC < 22 || radikaC > 30 );
digitalWrite(relayRadiator, LOW);
lcd->setCursor(11,3);
lcd->print("xxx");
} |
See on loop() sees ning kui temp langeb alla 20c läheb asi do tsüklisse ning ei tule sealt enne välja kui radikate vesi jahtunud või toa temp kõrgem kui 21. Probleem on aga selles ,et siis ei upi ta andmeid netti ning ei uuenda kellaaega lcd'l.
Ma saan aru, et ma peaks tegema sellele eelnevalt võetud koodijupile eraldi funktsiooni mille kutsun main loopis välja, või midagi sinnakanti? Point oleks see ,et ta ei tohiks main loopi kinni tõmmata nagu ta seda praegu teeb.
viimati muutis Terror 14.12.2014 15:03:56, muudetud 2 korda |
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
19Mart94
HV kasutaja
liitunud: 22.06.2010
|
14.12.2014 14:03:03
|
|
|
Terror kirjutas: |
Olen mõelnud, kuid hetkel pole see prioriteet kuna näit ei kõigu üle 0,2c.
Avastasin aga koodist ühe kala. Nimelt:
if(toaC < 20 && radikaC > 35){
digitalWrite(relayRadiator, HIGH);
do{
delay(250);
double toaC = (analogRead(toatemp) * 3.3) / 4095*100;
double radikaC = (analogRead(radikatemp) * 3.3) / 4095*100;
}while(toaC < 22 || radikaC > 30 );
digitalWrite(relayRadiator, LOW);
lcd->setCursor(11,3);
lcd->print("xxx");
} |
See on loop() sees ning kui temp langeb alla 20c läheb asi do tsüklisse ning ei tule sealt enne välja kui radikate vesi jahtunud või toa temp kõrgem kui 21. Probleem on aga selles ,et siis ei upi ta andmeid netti ning ei uuenda kellaaega lcd'l.
Ma saan aru, et ma peaks tegema sellele eelnevalt võetud koodijupile eraldi funktsiooni mille kutsun main loopis välja, või midagi sinnakanti? Point oleks see ,et ta ei tohiks main loopi kinni tõmmata nagu ta seda praegu teeb. |
Kuna kogu kood kordab ennast nagunii iga ~1100ms järelt, siis miks mitte teha nii (HIGH/LOW võib vahetuses olla; mõtle koodi loogika kenasti läbi, see on lihtsalt idee):
if(toaC < 20 && radikaC > 35){
digitalWrite(relayRadiator, HIGH);
} else if(toaC < 22 || radikaC > 30) {
digitalWrite(relayRadiator, LOW);
}
lcd->setCursor(11,3);
lcd->print("xxx");
|
|
|
Kommentaarid: 33 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
31 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
14.12.2014 15:12:51
|
|
|
Ühest eelnevast näitest inspireerituna sain vist tehtud:
Loopis:
c = tempkontroll(radikaC, toaC, c);
+
int tempkontroll(double radikaC, double toaC, int c)
{
lcd->setCursor(1,3);
lcd->print("tempk");
lcd->setCursor(11,3);
lcd->print(c);
if(toaC < 21 && radikaC > 35 && c == 0) {
c = 1;
digitalWrite(relayRadiator, HIGH); //paneb relee "HIGH" asendisse
}
else if(toaC > 22 && c == 1) {
c = 0;
digitalWrite(relayRadiator, LOW); //paneb relee "LOW" asendisse
}
return c;
} |
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
kpihus
Kreisi kasutaja

liitunud: 14.04.2003
|
15.12.2014 23:45:55
|
|
|
Kas temperatuuri kontrollerit mitte PID algoritmiga ei oleks mõistlikum ehitada ?
|
|
Kommentaarid: 26 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
1 :: |
25 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
16.12.2014 09:06:26
|
|
|
kpihus kirjutas: |
Kas temperatuuri kontrollerit mitte PID algoritmiga ei oleks mõistlikum ehitada ? |
Tulevikus võib mõelda keerulisemate algoritmide peale, hetkel plaanis lihtne ning töötav kood koos toimmiva riistvaraga valmis teha ning siis ajapikku võib asja täiustada.
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
Miraakel
HV vaatleja

liitunud: 07.10.2009
|
30.01.2015 16:59:04
|
|
|
Päris põnev projekt. Missugust Arduinot kasutad? Kas wifi teel juhitav (on/off) voolupistiku ehitamine oleks alustuseks liiga ambitsioonikas ettevõtmine?
|
|
Kommentaarid: 7 loe/lisa |
Kasutajad arvavad: |
   |
:: |
0 :: |
0 :: |
7 |
|
tagasi üles |
|
 |
Terror
HV veteran

liitunud: 08.11.2001
|
30.01.2015 19:35:05
|
|
|
Spark Core kasutan. https://www.spark.io/
Wifi on integreeritud sellel. Igatepidi super asi kui välja arvata see, et kontrolleri enda firmware on kohati bugine, kuid eks seda ajapikku ehk fixitakse.
Keskütte automaatika koosneb siis Spark Core mikrokontrollerist, 2 releest 3 analoogtemp andurist ning ühest "thermocouple" andurist mis mõõdab korstna tempi.
Automaatika lülitab automaatsele sisse välja kesküttepliidi ning radika pumpa. Vajadusel saab ka manuaalselt ON reziimi panna. (punane tuli lülitil tähistab seda, et antud pump parasjagu töötab. Hetkel asi ca kuu aega viperusteta tööd teinud.
Kõik temperatuurid ning pumba ON/OFF tsüklid uploaditakse ka thinspeak lehele kus saab tagantjärele graafikuid vaadata.
Spoiler 
#include "TimeAlarms/TimeAlarms.h"
#include "analogSmooth.h"
#include "OneWire/OneWire.h"
#include "LiquidCrystal_I2C.h"
String writeAPIKey = "xxx";
String channelID = "20611";
TCPClient client;
int ledRed = A0; //if ON then indicates that there is 230V present and boiler pump is OFF
int ledGreen = A1; // is ON then boiler pump is ON
int radikatemp = A2;
int toatemp = A3;
int pliiditemp = A4;
int pliidiveetemp = A5;
int xtemp = A6;
int relayRadiator = D2; //relay to turn ON/OFF radiator pump
int relayBoiler = D3; // relay to turn ON/OFF boiler pump.
int c = 0;
int d = 0;
int aeg = 0;
LiquidCrystal_I2C *lcd;
UDP UDPClient;
String timeStr;
AnalogSmooth as100 = AnalogSmooth(100);
AnalogSmooth as101 = AnalogSmooth(100);
AnalogSmooth as102 = AnalogSmooth(100);
AnalogSmooth as103 = AnalogSmooth(100);
float radikaC = 0.0;
float toaC = 0.0;
float pliidiC = 0.0;
float pliidiveeC = 0.0;
float xtempC = 0.0;
void setup(){
Time.zone(+2);
Alarm.alarmRepeat(8,30,0, MorningAlarm); // 8:30am every day
Alarm.timerRepeat(300, Repeats);
Alarm.timerRepeat(400, Repeats2);// timer for every 15 seconds
Alarm.timerOnce(10, OnceOnly); // called once after 10 seconds
Serial.begin(9600);
lcd = new LiquidCrystal_I2C(0x27, 20, 4); // set the LCD address to 0x20 for a 16x2 //SparkCore bug, address is actually 27 but shifted (0x27*2)
lcd->init(); // initialize the lcd
lcd->backlight();
lcd->clear();
pinMode(radikatemp, INPUT_PULLDOWN);
pinMode(toatemp, INPUT_PULLDOWN);
pinMode(pliiditemp, INPUT_PULLDOWN);
pinMode(pliidiveetemp, INPUT_PULLDOWN);
pinMode(xtemp, INPUT_PULLDOWN);
pinMode(ledRed, OUTPUT);
pinMode(ledGreen, OUTPUT);
pinMode(relayRadiator, OUTPUT);
pinMode(relayBoiler, OUTPUT);
digitalWrite(relayRadiator, LOW);
digitalWrite(relayBoiler, LOW);
analogWrite(ledRed,150);
}
void loop(){
radikaC = (as100.analogReadSmooth(radikatemp) * 3.3) / 4095*100; //getting the voltage reading from the temperature sensor
toaC = (as101.analogReadSmooth(toatemp) * 3.3) / 4095*100 - 0.5;
pliidiC = (as102.analogReadSmooth(pliiditemp) * 3.3) / 4095*200;
pliidiveeC = (analogRead(pliidiveetemp) * 3.3) / 4095*100;
xtempC = (analogRead(xtemp) * 3.3) / 4095*100;
lcd->setCursor(1,0);
lcd->print("Korsten");
lcd->setCursor(11,0);
lcd->print(pliidiC, 1);
lcd->setCursor(1,1);
lcd->print("Radikasse");
lcd->setCursor(11,1);
lcd->print(radikaC, 1);
lcd->setCursor(1,2);
lcd->print("Toatemp");
lcd->setCursor(11,2);
lcd->print(toaC, 1);
lcd->setCursor(1,3);
lcd->print("Pliita");
lcd->setCursor(11,3);
lcd->print(pliidiveeC, 1);
c = tempkontroll(radikaC, toaC, c, aeg);
d = tempkontroll2(pliidiC, pliidiveeC, d);
Alarm.delay(1000);
}
void ThingSpeakUpdate(String tsData)
{
Serial.println("Date string: " + tsData);
Serial.println("...Connecting to Thingspeak");
// Connecting and sending data to Thingspeak
if(client.connect("api.thingspeak.com", 80))
{
Serial.println("...Connection succesful, updating datastreams");
client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+writeAPIKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(tsData.length());
client.print("\n\n");
client.println(tsData); //the ""ln" is important here.
// This delay is pivitol without it the TCP client will often close before the data is fully sent
delay(250);
Serial.println("Thingspeak update sent.");
}
else{
Serial.println("Unable to connect to Thingspeak.");
}
if(!client.connected()){
client.stop();
}
client.flush();
client.stop();
}
int tempkontroll(float radikaC, float toaC, int c, int aeg) {
aeg =Time.hour()*60+Time.minute();
if((toaC < 20 && radikaC > 35 && c == 0 && aeg < 1290) || (toaC < 20.2 && radikaC > 30 && c == 0 && aeg > 1438) ) {
c = 1;
digitalWrite(relayRadiator, HIGH); //paneb relee "HIGH" asendisse
}
else if(((toaC > 21 || radikaC < 32) && c == 1) || (aeg > 1290 && aeg < 1438) ) {
c = 0;
digitalWrite(relayRadiator, LOW); //paneb relee "LOW" asendisse
}
return c;
}
int tempkontroll2(float pliidiC, float pliidiveeC, int d) {
if((pliidiC > 90 || pliidiveeC > 80) && d == 0) {
d = 1;
digitalWrite(relayBoiler, HIGH); //paneb relee "HIGH" asendisse
analogWrite(ledRed,0);
analogWrite(ledGreen,150);
}
else if(pliidiC < 85 && pliidiveeC <79 && d == 1) {
d = 0;
digitalWrite(relayBoiler, LOW); //paneb relee "LOW" asendisse
analogWrite(ledRed,150);
analogWrite(ledGreen,0);
}
return d;
}
void MorningAlarm(){
Spark.syncTime();
}
void Repeats(){
lcd->init();
}
void Repeats2(){
if(Spark.connected())
{
ThingSpeakUpdate("field1="+String(toaC)+"&field2="+String(radikaC)+"&field3="+String(pliidiC)+"&field4="+String(pliidiveeC)+"&field6="+String(c)+"&field7="+String(d));
}
}
void OnceOnly(){
Spark.syncTime();
}
|
|
|
Kommentaarid: 100 loe/lisa |
Kasutajad arvavad: |
   |
:: |
1 :: |
2 :: |
91 |
|
tagasi üles |
|
 |
|
lisa lemmikuks |
|
|
sa ei või postitada uusi teemasid siia foorumisse sa ei või vastata selle foorumi teemadele sa ei või muuta oma postitusi selles foorumis sa ei või kustutada oma postitusi selles foorumis sa ei või vastata küsitlustele selles foorumis sa ei saa lisada manuseid selles foorumis sa võid manuseid alla laadida selles foorumis
|
|
Hinnavaatlus ei vastuta foorumis tehtud postituste eest.
|