#include <SoftwareSerial.h> const byte PIN_AUTOJOH = 4;// AUTO SÄHKÖVERKOSSA,MÄÄREELLÄ INPUT const byte PIN_TERMARI_PAALLA = 5; // = LED TERMARI VALITTU =(AUTOMAATILLA) const byte PIN_SISALAM = 6; const byte PIN_NAPPI_SISALAM_ON_OFF = 7; // MÄÄREELLÄ INPUT_PULLUP const byte PIN_NAPPI_MOOT_LAM_ON_OFF = 8; // MÄÄREELLÄ INPUT_PULLUP const byte PIN_MOOTLAM = 9; const byte PIN_NAPPI_TERMARI_ON_OFF = 10; // MÄÄREELLÄ INPUT_PULLUP const byte PIN_TX_BT= 11; const byte PIN_MOOT_LAM_NAPPI_ON_OFF = 12;// APU LÄHTÖ TERMARIN VUOKSI const byte PIN_RX_BT= 13; boolean bmoot_nappi_paastetty = true; boolean bsisalam_nappi_paastetty = true; boolean btermari_nappi_paastetty = true; const byte LAH_VIIVE1 = 150;// ANALOGILÄHDÖT const byte LAH_VIIVE2 = 100;// OHJAUS NAPIT SISÄ- JA MOOT.LÄMMITIN const byte LAH_VIIVE3 = 50;// LYHYT VIIVE const byte TERMARIN_YLARAJA = 30;// 20.10.2015 Muutettu 32->30 anturin paikan vuoksi const byte TERMARIN_HYSTEREESI = 5; byte byvuorettele = 0; int imoot_lampo_c = 0; boolean blammitalohko = false; SoftwareSerial btserial(pin_tx_bt, PIN_RX_BT); //Lähetystaajuus puhelimeen const unsigned long ullahetystaajuuswp_puhelimeen = 3000; unsigned long ulvanha_aika = 0; //Käsitellään saapuva komento Windows puhelimesta. void aja_komentoprosessi(char* chkomento) // TERMOSTAATIN OHJAUKSET if(strcmp(chkomento,"ter_on") == 0) digitalwrite(pin_termari_paalla, HIGH); lahetaviesti("ter:1"); if(strcmp(chkomento,"ter_off") == 0) digitalwrite(pin_termari_paalla, LOW); lahetaviesti("ter:0"); // SISÄLÄMMITTIMEN OHJAUKSET if(strcmp(chkomento,"sl_on") == 0)
digitalwrite(pin_sisalam, HIGH); delay(lah_viive3); lahetaviesti("sl:1"); if(strcmp(chkomento,"sl_off") == 0) digitalwrite(pin_sisalam, LOW); delay(lah_viive3); lahetaviesti("sl:0"); // -----MOOTTORILÄMMITTIMEN OHJAUKSET----- if(strcmp(chkomento,"ml_on") == 0) digitalwrite(pin_moot_lam_nappi_on_off, HIGH);// PIN 7 delay(lah_viive3); lahetaviesti("ml:1"); if(strcmp(chkomento,"ml_off") == 0) digitalwrite(pin_moot_lam_nappi_on_off, LOW); // PIN 7 delay(lah_viive3); lahetaviesti("ml:0"); //Lähetä viesti takaisin Windows puhelimeen void lahetaviesti(char* viesti) int viestinpituus = strlen(viesti); if(viestinpituus < 255) btserial.write(viestinpituus); btserial.print(viesti); boolean LuePesuNeste(int iatulo) if (iatulo <= 480) return true; else return false; // boolean LuePesuNeste(int iatulo) //***************************************************************** //---- Palauttaa termarin kokonaislukujen keskiarvon -------------
void LaskeMoot_Lammon_Keskiarvo() float ftulos = 0; byte bykpl = 3; for (int i = 0; i < bykpl; i++) ftulos += (analogread(a3)-analogread(a4))*0.4887585532747; imoot_lampo_c = (int)(ftulos/bykpl); // void LaskeMoot_Lammon_Keski... //--Lähetetään ajoitettu viesti "ullahetystaajuuswp_puhelimeen" //--muuttujaan määritellyn ajan valein------------ void lahetaajoitettuviesti() //*------ KOOTAAN JA LÄHETETÄÄN LASINPESUNESTESÄILIÖN KORKEUSTIEDOT ----******* Kokoa_ja_laheta_tieto ("LPN:",YhdistaKolmeTietoa(LuePesuNeste(analogRead(A0)), LuePesuNeste(analogRead(A1)),LuePesuNeste(analogRead(A2)))); //LÄHETTÄÄ SARJAPORTTIN "LPN:0"-"LPN:7" // **********LASKETAAN KESKILÄMPÖTILA MOOTTORIN ANTURISTA******* LaskeMoot_Lammon_Keskiarvo(); if( byvuorettele==0) // *******************MOOTTORILÄMPÖTILA***LÄHETETÄÄN PUHELIMEEN**************** Kokoa_ja_laheta_tieto ("S4:",String(iMoot_Lampo_C,DEC));//fMoot_Lampo if( byvuorettele==1) // AUTON AKUN JÄNNITE // *******************AKUN JÄNNITE********************* Kokoa_ja_laheta_tieto ("S5:",String((analogRead(A5)*0.0242926)+0.6,1)); if( byvuorettele==2) // AUTO LÄMMITYSTOLPASSA TAI MUUSSA JOHDOSSA if(high==digitalread(pin_autojoh)) Kokoa_ja_laheta_tieto ("LJOH:",String(0,DEC)); else Kokoa_ja_laheta_tieto ("LJOH:",String(1,DEC));
byvuorettele++; if(byvuorettele>=3) byvuorettele=0; // Haetaan lähtöjen asennot boolean bmootlamasento = false; boolean bsisalamasento = false; boolean bterohjasento = false; //****** Tieto puhelimeen moottorilämmittimen tilasta if(high==digitalread(pin_moot_lam_nappi_on_off))// = PIN 7 bmootlamasento = true; else bmootlamasento = false; //****** Tieto puhelimeen sisälämmittimen tilasta if(high==digitalread(pin_sisalam)) bsisalamasento = true; else bsisalamasento = false; //****** Tieto puhelimeen onko lohko termarin ohjauksessa if(high==digitalread(pin_termari_paalla)) bterohjasento = true; else bterohjasento = false; Kokoa_ja_laheta_tieto ("MST:",YhdistaKolmeTietoa( bmootlamasento, bsisalamasento,bterohjasento)); delay(lah_viive2); //LÄHETTÄÄ SARJAPORTTIN "MST:0"-"MST:7" // PÄIVITTÄÄ PIENTÄ "LED" VALOA LOHKOLÄMMITIN WP-NAPISSA Tarkista_LohkoLam_Lahdon_Tila(); // void sendperiodicmessages() //--LOHKOLÄMMITTIMEN TERMARIN KOKO LOGIIKKA ---******* //---------------------------------------------------- void LohkoLam_Termari_Logiikka() if (HIGH==digitalRead(PIN_MOOT_LAM_NAPPI_ON_OFF)) if ( HIGH==digitalRead(PIN_TERMARI_PAALLA)) // TERMARI PÄÄLLÄ = TERMARI OHJAA LOHKOLÄMMITYSTÄ if ( imoot_lampo_c >= TERMARIN_YLARAJA)
digitalwrite(pin_mootlam, LOW); blammitalohko = false; if (imoot_lampo_c < (TERMARIN_YLARAJA - TERMARIN_HYSTEREESI)) blammitalohko = true; if (blammitalohko == true) digitalwrite(pin_mootlam, HIGH); if (imoot_lampo_c> TERMARIN_YLARAJA) digitalwrite(pin_mootlam, LOW); blammitalohko = false; // if (fmoot_lampo > TERMARIN // if (blammitalohko == true) else // TERMARI POIS = LOHKOLÄMMITYS AINA PÄÄLLÄ digitalwrite(pin_mootlam, HIGH); Tarkista_LohkoLam_Lahdon_Tila (); //if ( HIGH==digitalRead(PIN_TERMARI... else digitalwrite(pin_mootlam, LOW); Tarkista_LohkoLam_Lahdon_Tila (); // if (HIGH==digitalRead(PIN_MOOT_L... //void LohkoLam_Termari_Logiikka // TIETO KUN MOOTTORILÄM SAA OHJAUKSEN == PIENI // "LED" LOHKON NAPPULASSA void Tarkista_LohkoLam_Lahdon_Tila () if(high==digitalread(pin_mootlam)) Kokoa_ja_laheta_tieto ("MLOH:",String(1,DEC)); else Kokoa_ja_laheta_tieto ("MLOH:",String(0,DEC));
//void Tarkista_LohkoLam_Lahdon_Tila // Yhdistetään tietoa jotta saadaan lähetyskertoja vähennettyä String YhdistaKolmeTietoa(boolean beka,boolean btoka,boolean bkolmas) if ( beka == false && btoka == false && bkolmas == false) return "0" ; if ( beka == true && btoka == false && bkolmas == false) return "1" ; if ( beka == false && btoka == true && bkolmas == false) return "2" ; if ( beka == true && btoka == true && bkolmas == false) return "3" ; if ( beka == false && btoka == false && bkolmas == true) return "4" ; if ( beka == true && btoka == false && bkolmas == true) return "5" ; if ( beka == false && btoka == true && bkolmas == true) return "6" ; if ( beka == true && btoka == true && bkolmas == true) return "7" ; // String YhdistaKolmeTietoa(Str void Kokoa_ja_laheta_tieto (String str,string str1) String str2 = ""; str2 = str+str1 ; char chmerkkijono[str2.length()+1]; str2.tochararray(chmerkkijono,str2.length()+1); char* p_chmerkkijono = chmerkkijono; lahetaviesti(p_chmerkkijono);// // void Kokoa_ja_laheta_tieto //********************************************************************* void Vaihda_asento_jos_nappi_painettu(boolean& bnappi_paastetty, byte PIN_Nappi, byte P if (LOW == digitalread(pin_nappi)) // =Nappia painettu if (bnappi_paastetty == true) if(high == digitalread(pin_lahto)) digitalwrite(pin_lahto, LOW); else digitalwrite(pin_lahto, HIGH); bnappi_paastetty = false; //if (bnappi_paastetty == true) else // Nappi päästetty
bnappi_paastetty = true; // boolean Vaihda_asento void setup() Serial.begin(57600); Serial.println("USB Connected"); btserial.begin(57600); pinmode(pin_sisalam, OUTPUT); pinmode(pin_mootlam, OUTPUT); pinmode(pin_termari_paalla, OUTPUT); pinmode(pin_moot_lam_nappi_on_off, OUTPUT); pinmode(pin_autojoh, INPUT); pinmode(pin_nappi_sisalam_on_off,input_pullup); // = 7 pinmode(pin_nappi_moot_lam_on_off,input_pullup);// = 8 pinmode(pin_nappi_termari_on_off,input_pullup); // = 10 void loop() if(btserial.available()) int ikomennonpituus = (int)btserial.read(); char chkomento[ikomennonpituus]; int ikomentopos = 0; while(ikomentopos < ikomennonpituus) if(btserial.available()) chkomento[ikomentopos] = (char)btserial.read(); ikomentopos++; chkomento[ikomentopos] = 0; aja_komentoprosessi(chkomento); unsigned long ulnykyinenaika = millis(); if((ulnykyinenaika - ulvanha_aika) > ullahetystaajuuswp_puhelimeen) lahetaajoitettuviesti(); ulvanha_aika = ulnykyinenaika; //******* Ajetaan termari logiikka************** LohkoLam_Termari_Logiikka();
//***************** NAPPIEN LUKU JA OHJAUKSIEN OHJAUS ********************** Vaihda_asento_jos_nappi_painettu(bSisaLam_Nappi_Paastetty, PIN_NAPPI_SISALAM_ON_OFF, P Vaihda_asento_jos_nappi_painettu(bMoot_Nappi_Paastetty, PIN_NAPPI_MOOT_LAM_ON_OFF, PIN Vaihda_asento_jos_nappi_painettu(bTermari_Nappi_Paastetty, PIN_NAPPI_TERMARI_ON_OFF, P // void loop