Ja jälleen projektikoodauspäivitystä…
Tein tänään hieman rukauksia koodiin jolla beta-testailen…
Koodin on vielä ns. pitkässä muodossa… Lausekkeilla saa sitä reilusti lyhennettyä, mutta näin alottelijana oli helpompi lähteä tästä…
Nyt siis virhetilanteiden vähentämiseksi koodi nappaa itselleen ensin 5min välein mittaustuloksen. Viiden mittauksen (eli 25min) jälkeen laskee keskiarvon mittauksista ja keskiarvon perusteella ilmoittaa patteriveden lämpötilan. Tästä eteenpäin jokaisen mittauksen jälkeen (eli siis 5min välein) lasketaan viiden edellisen mittauksen keskiarvo ja tämän mukaan suositellaan patteriveden lämpötilaan.
Uskoisin että tämäntyylinen koodi alkaisi vaikuttamaan jo melkoisen hyvältä itse laitteessakin. Tietysti lyhennettynä ja oikealla kielellä koodattuna. Koodissa edelleen ongelmana se, ettei ymmärrä jos siirrytään -9.99 asteesta enempiin pakkaslukemiin…
Tänään en ehdi, mutta teen koodiin vielä muutamat rivit, jotka tallentaa mittaukset, lasketun keskiarvon ja lasketun patteriveden tiedostoon sekä yritän pähkäillä tuon maagisen -10 asteen rajan kuntoon…
Nyt kun mielestäni koodi alkaa olla oikeanlainen (lähes), niin mitä seuraavaksi? Arduino alusta ja muutama piiri tilaukseen? Koekytkentälevy + läjä komponentteja kaveriksi? Onko ohjelmaa arduinolle johon voisin koittaa alkaa kirjoittamaan vastaavaa koodia arduinon kielellä ja debuggaamaan sekä testaamaan sitä itse ohjelmassa?
Tässä vielä nykyhetkessä pörräävä koodinpätkä:
#include <iostream>
#include <fstream>
#include <windows.h>
float lampo1;
float lampo2;
float lampo3;
float lampo4;
float lampo5;
float yhteen;
float keskiarvo;
float quit;
int kerta = 0;
using namespace std;
int main ()
{
// Ekat mittaukset niin, että tulee 5 mittausta ennen keskiarvon laskentaa
// Tämä siksi, että olisi virhemahdollisuus pienempi. Laiteen resetin jälkeen otetaan
// 5 mittausta, vasta tämän jälkeen toimitaan. Jos toimittaisiin heti ensimmäisen mittauksen
// jälkeen ja tulos olisikin "virhemittaus" voisi lämpötilat olla huuhaata.
// Eka kerta
fstream File("1B000801D55DD010.txt",ios::in);
File.seekg(-7,ios::end);
File >> lampo1;
kerta++;
system("cls");
cout << "Lampotilan laskentakerta: " << kerta << "/5 ennen keskiarvoa" << endl;
cout << "Ulkolampotila " << lampo1 << " astetta. Keskiarvoa ei viela laskettu." << endl;
cout << "Voit pysayttaa scriptin milloin tahansa painamalla CTRL + C." << endl;
Sleep(300000);
// Toka kerta
File.seekg(-7,ios::end);
File >> lampo2;
kerta++;
system("cls");
cout << "Lampotilan laskentakerta: " << kerta << "/5 ennen keskiarvoa" << endl;
cout << "Ulkolampotila " << lampo2 << " astetta. Keskiarvoa ei viela laskettu." << endl;
cout << "Voit pysayttaa scriptin milloin tahansa painamalla CTRL + C." << endl;
Sleep(300000);
// Kolmas kerta
File.seekg(-7,ios::end);
File >> lampo3;
kerta++;
system("cls");
cout << "Lampotilan laskentakerta: " << kerta << "/5 ennen keskiarvoa" << endl;
cout << "Ulkolampotila " << lampo3 << " astetta. Keskiarvoa ei viela laskettu." << endl;
cout << "Voit pysayttaa scriptin milloin tahansa painamalla CTRL + C." << endl;
Sleep(300000);
// Neljäs kerta
File.seekg(-7,ios::end);
File >> lampo4;
kerta++;
system("cls");
cout << "Lampotilan laskentakerta: " << kerta << "/5 ennen keskiarvoa" << endl;
cout << "Ulkolampotila " << lampo4 << " astetta. Keskiarvoa ei viela laskettu." << endl;
cout << "Voit pysayttaa scriptin milloin tahansa painamalla CTRL + C." << endl;
Sleep(300000);
//Viides kerta
File.seekg(-7,ios::end);
File >> lampo5;
kerta++;
//Lasketaan keskiavro
yhteen = lampo1+lampo2+lampo3+lampo4+lampo5;
keskiarvo = yhteen/5;
system("cls");
cout << "Lampotilan laskentakerta: " << kerta << endl;
cout << "Ulkolampotila " << lampo5 << " astetta. Keskiarvoa " << keskiarvo << "astetta" << endl;
if(keskiarvo < -25.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 65 (lampo <-25c)" << endl;
}
if(keskiarvo > 0.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 40 (lampo >0c)" << endl;
}
else
{
cout << "Patteriverkoston vesi olisi hyva olla " << -1 * keskiarvo + 40 << " astetta" << endl;
}
cout << "Patteriverkon lampotila laskettu viiden edellisen mittauksen keskiarvolla." << endl;
cout << "Odota, taukoa 5min. Voit pystayttaa scriptin painamalla CTRL + C " << endl;
Sleep(300000);
do
{
cout << "Lampotilan laskentakerta: " << kerta << endl;
// Eka kerta
fstream File("1B000801D55DD010.txt",ios::in);
File.seekg(-7,ios::end);
File >> lampo1;
kerta++;
system("cls");
//Lasketaan keskiavro
yhteen = lampo1+lampo2+lampo3+lampo4+lampo5;
keskiarvo = yhteen/5;
cout << "Lampotilan laskentakerta: " << kerta << endl;
cout << "Ulkolampotila " << lampo1 << " astetta. Keskiarvoa " << keskiarvo << "astetta" << endl;
if(keskiarvo < -25.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 65 (lampo <-25c)" << endl;
}
if(keskiarvo > 0.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 40 (lampo >0c)" << endl;
}
else
{
cout << "Patteriverkoston vesi olisi hyva olla " << -1 * keskiarvo + 40 << " astetta" << endl;
}
cout << "Patteriverkon lampotila laskettu viiden edellisen mittauksen keskiarvolla." << endl;
cout << "Odota, taukoa 5min. Voit pystayttaa scriptin painamalla CTRL + C " << endl;
Sleep(300000);
// Toka kerta
File.seekg(-7,ios::end);
File >> lampo2;
kerta++;
system("cls");
//Lasketaan keskiavro
yhteen = lampo1+lampo2+lampo3+lampo4+lampo5;
keskiarvo = yhteen/5;
cout << "Lampotilan laskentakerta: " << kerta << endl;
cout << "Ulkolampotila " << lampo2 << " astetta. Keskiarvoa " << keskiarvo << "astetta" << endl;
if(keskiarvo < -25.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 65 (lampo <-25c)" << endl;
}
if(keskiarvo > 0.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 40 (lampo >0c)" << endl;
}
else
{
cout << "Patteriverkoston vesi olisi hyva olla " << -1 * keskiarvo + 40 << " astetta" << endl;
}
cout << "Patteriverkon lampotila laskettu viiden edellisen mittauksen keskiarvolla." << endl;
cout << "Odota, taukoa 5min. Voit pystayttaa scriptin painamalla CTRL + C " << endl;
Sleep(300000);
// Kolmas kerta
File.seekg(-7,ios::end);
File >> lampo3;
kerta++;
system("cls");
//Lasketaan keskiavro
yhteen = lampo1+lampo2+lampo3+lampo4+lampo5;
keskiarvo = yhteen/5;
cout << "Lampotilan laskentakerta: " << kerta << endl;
cout << "Ulkolampotila " << lampo3 << " astetta. Keskiarvoa " << keskiarvo << "astetta" << endl;
if(keskiarvo < -25.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 65 (lampo <-25c)" << endl;
}
if(keskiarvo > 0.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 40 (lampo >0c)" << endl;
}
else
{
cout << "Patteriverkoston vesi olisi hyva olla " << -1 * keskiarvo + 40 << " astetta" << endl;
}
cout << "Patteriverkon lampotila laskettu viiden edellisen mittauksen keskiarvolla." << endl;
cout << "Odota, taukoa 5min. Voit pystayttaa scriptin painamalla CTRL + C " << endl;
Sleep(300000);
// Neljäs kerta
File.seekg(-7,ios::end);
File >> lampo4;
kerta++;
system("cls");
//Lasketaan keskiavro
yhteen = lampo1+lampo2+lampo3+lampo4+lampo5;
keskiarvo = yhteen/5;
cout << "Lampotilan laskentakerta: " << kerta << endl;
cout << "Ulkolampotila " << lampo4 << " astetta. Keskiarvoa " << keskiarvo << "astetta" << endl;
if(keskiarvo < -25.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 65 (lampo <-25c)" << endl;
}
if(keskiarvo > 0.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 40 (lampo >0c)" << endl;
}
else
{
cout << "Patteriverkoston vesi olisi hyva olla " << -1 * keskiarvo + 40 << " astetta" << endl;
}
cout << "Patteriverkon lampotila laskettu viiden edellisen mittauksen keskiarvolla." << endl;
cout << "Odota, taukoa 5min. Voit pystayttaa scriptin painamalla CTRL + C " << endl;
Sleep(300000);
//Viides kerta
File.seekg(-7,ios::end);
File >> lampo5;
File.close();
kerta++;
system("cls");
//Lasketaan keskiavro
yhteen = lampo1+lampo2+lampo3+lampo4+lampo5;
keskiarvo = yhteen/5;
cout << "Lampotilan laskentakerta: " << kerta << endl;
cout << "Ulkolampotila " << lampo5 << " astetta. Keskiarvoa " << keskiarvo << "astetta" << endl;
if(keskiarvo < -25.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 65 (lampo <-25c)" << endl;
}
if(keskiarvo > 0.00)
{
cout << "Patteriverkoston vesi olisi hyva olla 40 (lampo >0c)" << endl;
}
else
{
cout << "Patteriverkoston vesi olisi hyva olla " << -1 * keskiarvo + 40 << " astetta" << endl;
}
cout << "Patteriverkon lampotila laskettu viiden edellisen mittauksen keskiarvolla." << endl;
cout << "Odota, taukoa 5min. Voit pystayttaa scriptin painamalla CTRL + C " << endl;
Sleep(300000);
}
while (quit != 99);
system("pause");
return 0;
}
EDIT:
Lisätään nyt selvennykseksi, että seuraavaksi ei tosiaankaan tarvitse vielä lähteä koko laitetta kasaamaan. Seuraavaksi voi tehdä vaikka “ledinvilkutus” tai “releen napsutus” ohjelmointeja, jotta pääsee itse ohjelmointiin käsiksi.
Lähinnä nyt siis ideana se, että mitä tavaraa kannattaa tilata? Onko tämä projekti nyt helpompi toteuttaa / projektia kehittää AVR pohjalla vai arduinolla? AVR ilmeisesti vaikeampi, mutta löytyykö siihen ohjeita / oppaita että sen kanssa tulisi toimeen?
Olen käsittänyt ettei näihin piireihin ja ohjelmointipalikoihin nyt sentään satasia uppoa, rakentelu ja ohjelmointi ei ole vain tätä projektia varten eli laajalla skaalalla ajateltuna: Millä kannattaisi aloitella / Mikä kannattaisi opetella?
–
Tuomo