Arduino Polska Forum

Pełna wersja: Projekt Termostatuv4
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam...
Mam fajny projekt termostatu chciałbym go wykorzystać do mojego akwarium, mam taki problem, ze po wgraniu funkcje działaj bez zarzutu,
problem jest z LCD 16x2 I2c, zaczyna tylko mrugać podświetlenie.
Siedzę na tym, czytam, próbuje, ale nie daje rady jeszcze z programowaniem.
Proszę o pomoc...
Kod:
#include <OneWire.h> //This temperature sensor requires a 4.7k Ohm resistor across its pins 2 and three!!!!
#include <DallasTemperature.h>
#include <Wire.h>
#include <LCD.h>
#include <LiquidCrystal_I2C.h>  // F Malpartida's NewLiquidCrystal library
#define I2C_ADDR    0x27  // Define I2C Address where the PCF8574A is

#define BACKLIGHT_PIN     7
#define En_pin  4
#define Rw_pin  5
#define Rs_pin  6
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3

#define  LED_OFF  0
#define  LED_ON  1
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);


int sensorPin = A0;    // select the input pin for the 10K potentiometer
int sensorValue = 0;  // variable to store the value coming from the sensor
int setTemp = 0; // variable to store temp desired
int SSRCPin = 5; //Turn on A/C unit
int SSRHPin = 6; //Turn on heat (electric or gas)
int hcLED = 4; //indicator for Cooling mode
int SwitchPin = 1; // To switch between Cooling and Heating
int SSRFan = 7; // To turn on and off the air handler fan
char* heat;
float currentTemp = 0;



//This temperature sensor requires a 4.7k Ohm resistor across its pins 2 and three!!!! Thats the middle pin and the GND pin
// Data wire is plugged into pin 2 on the Arduino
#define ONE_WIRE_BUS 2

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

DeviceAddress insideThermometer = { 0x28, 0xE4, 0x89, 0x6B, 0x04, 0x00, 0x00, 0x49 };
// DeviceAddress outsideThermometer = { 0x28, 0x20, 0x04, 0xA8, 0x02, 0x00, 0x00, 0x4D };

void setup(void)
{
// Start up the library
sensors.begin();
// set the resolution to 9 bit (good enough?)
sensors.setResolution(insideThermometer, 9);
// sensors.setResolution(outsideThermometer, 9);

lcd.begin (16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
pinMode(SSRFan, OUTPUT); //set airhandler fan pin as output
digitalWrite(SSRFan, LOW);
pinMode(SSRHPin, OUTPUT);
digitalWrite(SSRHPin, LOW);
pinMode(SSRCPin, OUTPUT);
digitalWrite(SSRCPin, LOW);
pinMode(hcLED, OUTPUT);
digitalWrite(hcLED, LOW);
pinMode(SwitchPin, INPUT);
}

void printTemperature(DeviceAddress deviceAddress)
{
 
sensors.requestTemperatures();  // was in loop

float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
} else {
// lcd.print(tempC);
// lcd.print("/");
currentTemp = (DallasTemperature::toFahrenheit(tempC));
lcd.print(currentTemp);
}

}


void loop(void)
{

delay(500);

 sensorValue = analogRead(sensorPin);  
 
 setTemp = sensorValue / 10.24; //Gives us a set temp range between 0 and 99 degrees

//lcd.clear(); // start with a blank screen
lcd.setCursor(0,0);
lcd.print("Current:");
lcd.setCursor(0,1);
lcd.print("Set:");
//lcd.setCursor(0,3);
//lcd.print("Heat: ");



lcd.setCursor(8,0);
printTemperature(insideThermometer);
lcd.setCursor(6,1);
lcd.print(setTemp);
//lcd.setCursor(7,3);
//lcd.print(heat);

//Cooling Mode


int val = digitalRead(SwitchPin) ;// val represents digitalRead(SwitchPin);
// If the value of  is 1 then make hcLED low (off) which sets the relay in a normally closed state. Hence, turning on the blue LED.
 if (val == 1)
 {
 digitalWrite(hcLED, LOW);
 }
 
 /* If the SwitchPin reads 1 and the current temperature is greater than the set temperature (if its hot) turn on the A/C and internal fan */
 if (val == 1 && (currentTemp > setTemp + 3))
{
 digitalWrite(SSRFan, HIGH);
 digitalWrite(SSRHPin, LOW);
 digitalWrite(SSRCPin, HIGH);
 }
 
 /* Otherwise, if the SwitchPin reads 1 and the current temperature is less than the set temperature (the set temperature has been reached), turn off the A/C and internal fan */
else if (val == 1 && (currentTemp < setTemp - 3))
{
  digitalWrite(SSRCPin, LOW);
  digitalWrite(SSRFan, LOW);
}
// Heating Mode

// If the value of  is 0 then make hcLED HIGH (on) which sets the relay in a normally open state. Hence, turning on the RED LED
if (val == 0)
 {
 digitalWrite(hcLED, HIGH);
 }
 
 /* If the SwitchPin reads 0 and the current temperature is less than the set temperature (if its cold) turn on the HEAT and internal fan */
 if (val == 0 && (currentTemp < setTemp + 3))
 {
 digitalWrite(SSRFan, HIGH);
 digitalWrite(SSRCPin, LOW);  
 digitalWrite(SSRHPin, HIGH);
 }
 
 /* If the SwitchPin reads 0 and the current temperature is greater than the set temperature (the set temperature has been reached) turn off the HEAT and internal fan */
 else if (val == 0 && (currentTemp > setTemp - 3))
 {
   digitalWrite(SSRHPin, LOW);
   digitalWrite(SSRFan, LOW);
}


}
To już 3 raz gdy masz problem z biblioteką LiquidCrystal_I2C. Niczego się nie nauczyłeś?
To jakaś nowa biblioteka?
Co tu robi #include <LCD.h>?
Czy potrafisz na tej bibliotece wyświetlić prawidłowo dowolny tekst?
Hej.. Projekt jest ściągnięty z internetu, biblioteka jest dołączona do niego, używałem oryginalnej i z tej dołączonej do tego projektu,  zmieniałem nazwę , przenosiłem, itp. cały czas, migający wyświetlacz. Większość projektów zaczęło mi chodzić po twoich uwagach, myślę ze się trochę nauczyłem, trochę czytałem o tym, jak je zamieniać, zmieniać nazwy, sprawdzać nazwy, czy się są takie same.
Bibloteka LCD.h , była już w tym projekcie.

A z tym nie wiem jak dać sobie rade, niby gotowy projekt, oczywiście chodzi, myślę ze jest problem z wpisaniem adresu mojego wyświetlacza. Adres niby wpisuje, ale coś wydaje mi się ze jest problem z tym:

#define BACKLIGHT_PIN     7
#define En_pin  4
#define Rw_pin  5
#define Rs_pin  6
#define D4_pin  0
#define D5_pin  1
#define D6_pin  2
#define D7_pin  3

#define  LED_OFF  0
#define  LED_ON  1
LiquidCrystal_I2C  lcd(I2C_ADDR,En_pin,Rw_pin,Rs_pin,D4_pin,D5_pin,D6_pin,D7_pin);

Dziękuje..
Dalem sobie już rade, trzeba było przypisać piny wyświetlacza.

#define BACKLIGHT_PIN     7
#define En_pin  2
#define Rw_pin  1
#define Rs_pin  0
#define D4_pin  4
#define D5_pin  5
#define D6_pin  6
#define D7_pin  7

Ale jest problem, wszystko mi dobrze wyświetla na LCD, tylko nie ma podświetlenia Lcd???
Chyba trzeba przypisać pin na,
#define BACKLIGHT_PIN     7
nie wiem jaki, próbowałem i nic...
Dziękuję..
Dwa ostanie piny wyświetlacza odpowiadają za jego podświetlenie
(29-11-2016, 16:43)Automatyk napisał(a): [ -> ]Dwa ostanie piny wyświetlacza odpowiadają za jego podświetlenie

Właśnie, kurde, dzięki bardzo... Pozdrawiam...
To wklej teraz działający program aby ktoś z takim problemem znalazł odpowiedź.
Witam.. Problem został rozwiązany, przez przypisanie numerów pin wyświetlacza.
Które, znajdują się w bibliotece LiquidCrystal_I2C, nauka nie idzie w las..
Jeżeli ktoś sobie życzy, to wrzucę to co zrobiłem. Ale dla was to jak kropla wody, a ja się uczę,
daje mi to frajdę jak coś działa.
Dziękuje.