nefunguje if

Odpovědět
Do_it
Příspěvky: 2
Registrován: 31 črc 2017, 10:54
Reputation: 0

nefunguje if

Příspěvek od Do_it » 12 pro 2017, 21:57

Zdravím pokousim se naprogramovat řízení čerpadla k solarku, ale mám problém s programem nefunguje mi podmínka if a nevím si rady co s tím. Skoušel jsem použít while, ale to mi program zamrzne. Mám to na arduino UNO (čína) k tomu dvě čidla ds18b20, oled display ic2. Program mám takto. Předem děkuji za rady.


#include <OneWire.h>
#include <DallasTemperature.h>
#include "U8glib.h"

const int pinCidla1 = 6; //1m
const int pinCidla2 =7; //3m
int cerpadlo = 12;

OneWire oneWire1(pinCidla1);
OneWire oneWire2(pinCidla2);

DallasTemperature senzor1(&oneWire1);
DallasTemperature senzor2(&oneWire2);

// inicializace OLED displeje z knihovny U8glib
U8GLIB_SSD1306_128X32 mujOled(U8G_I2C_OPT_NONE);

// proměnná pro uchování času poslední obnovy displeje
long int prepis = 0;
// proměnná pro uložení aktuální pozice a směru výpisu zprávy
int pozice = 0;
bool smer = 1;

long int pauza = 0;
int x = senzor1.getTempCByIndex(0); //1m
int y = senzor2.getTempCByIndex(0); //3m

void setup(void) {
// pro otočení displeje o 180 stupňů
// stačí odkomentovat řádek níže
// mujOled.setRot180();
Serial.begin(9600);
senzor1.begin();
senzor2.begin();


}

void loop(void) {
// vytvoření proměnné s celou zprávou, která se bude vypisovat
String zprava = "Teplota bazenu: " ;
zprava += senzor1.getTempCByIndex(0);
zprava += " C ";
zprava += " Teplota solar je: ";
zprava += senzor2.getTempCByIndex(0);
zprava += " C " ;
// porovnání uloženého a aktuálního času
// při rozdílu větším než 100 ms se provede
// přepis displeje, zde je to rychlost posunu zprávy
if (millis()-prepis > 100) {
// následující skupina příkazů
// obnoví obsah OLED displeje
mujOled.firstPage();
do {
// vykreslení zadané zprávy od zadané pozice
vykresliText(pozice, zprava);
} while( mujOled.nextPage() );
// uložení posledního času obnovení
prepis = millis();
// řízení směru výpisu - jako první je směr vlevo
if (smer) {
// s každou iterací přičteme jedničku
pozice += 10;
// pokud jsme na pozici posledního znaku zprávy
// mínus 15 znaků (záleží na písmu), tak
// změníme směr výpisu
if (pozice>zprava.length()-15) {
smer = 0;
}
}
// zde je směr vpravo
else {
// s každou iterací odečteme jedničku
pozice -= 10;
// po dopočítání na pozici 0 otočíme směr
if (pozice == 0) {
smer = 1;
}
}
}



senzor1.requestTemperatures();
senzor2.requestTemperatures();

Serial.print("Teplota cidla bazen: ");
Serial.print(senzor1.getTempCByIndex(0));
Serial.print(" Teplota solar: ");
Serial.print( senzor2.getTempCByIndex(0));
Serial.println(" stupnu Celsia");



if(( senzor1.getTempCByIndex(0) <= 30) && ( senzor2.getTempCByIndex(0) >= 50) )
{
digitalWrite( cerpadlo, HIGH);
}
}

// funkce vykresliText pro výpis textu na OLED od zadané pozice
void vykresliText(int posun, String text) {
// nastavení písma, další písma zde:

mujOled.setFont(u8g_font_fub14);
// nastavení výpisu od souřadnic x=0, y=25; y záleží na velikosti písma
mujOled.setPrintPos(0, 25);
// uložení části zprávy - od znaku posun uložíme 15 znaků
// např. na začátku uložíme znaky 0 až 15
String vypis;
vypis = text.substring(posun, posun+15);
// výpis uložené části zprávy na OLED displej
mujOled.print(vypis);
delay(300);
}

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: nefunguje if

Příspěvek od petan » 12 pro 2017, 23:14

Co znamená "long int prepis = 0;"
Buď použij long, nebo unsigned long, tedy

Kód: Vybrat vše

long prepis = 0;
//nebo
unsigned long prepis = 0;

Bacha na to, kód

Kód: Vybrat vše

senzor1.requestTemperatures();
senzor2.requestTemperatures();

Serial.print("Teplota cidla bazen: ");
Serial.print(senzor1.getTempCByIndex(0));
Serial.print(" Teplota solar: ");
Serial.print(senzor2.getTempCByIndex(0));
Serial.println(" stupnu Celsia");
ti běží plnou rychlostí. Stačilo by obnovovat po těch 100 ms.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 11 hostů