Zobrazení proměnných na LCD I2C 20x4
Zobrazení proměnných na LCD I2C 20x4
Zdravím všechny , mám takový dotaz, hraju si přenosem po nrf24, mám jeden reciver a 2 trasmiter, všechno vypadá dobře až ne jedno
když zobrazuji teploty na display tak jsou po každý jinde , nemá s tím někdo zkušenost ? zkoušel jsem i před zobrazení uložit do jiné proměnné, ale vždy po třeba 5 min se mě to rozhodí , pokud tam dám delay(1000) tak se mě ukazují data z jednoho čidla a druhého čidla střídavě nahoře dole .
přikládám kod na zobrazení
správně je obrázek :
potom se to přehodí takto
kde temperature je jedno UNO s DHT11 a teplota je druhé UNO s DS1820 , proměnná 25.15 je jen tak zadaná na tvrdo ...
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <DHT.h>
float temperature[2];
float teplota[2];
RF24 radio(7, 8);
const uint64_t pipe1 = 0xE8E8F0F0E1LL;
const uint64_t pipe2 = 0xE8E8F0F0E2LL;
void setup(void) {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe1);
radio.openReadingPipe(2, pipe2);
radio.startListening();
lcd.init();
lcd.backlight();
lcd.clear();
lcd.print("Humidity & temp");
delay(1000);
lcd.clear();
lcd.print("Starting.....");
lcd.clear();
delay(1000);
}
void loop(void)
{
radio.read(temperature, sizeof(temperature));
radio.read(teplota, sizeof(teplota));
delay(500);
lcd.setCursor(0, 0);
lcd.print("Temp");
lcd.setCursor(0, 1);
lcd.print("Humidity");
lcd.setCursor(9, 0);
lcd.print(temperature[0]);
lcd.print(" C");
lcd.setCursor(9, 1);
lcd.print(temperature[1]);
lcd.setCursor(9, 2);
lcd.print(teplota[0]);
lcd.setCursor(9, 3);
lcd.print(teplota[1]);
lcd.print(" %");
delay(10000);
}
děkuji prozatím
když zobrazuji teploty na display tak jsou po každý jinde , nemá s tím někdo zkušenost ? zkoušel jsem i před zobrazení uložit do jiné proměnné, ale vždy po třeba 5 min se mě to rozhodí , pokud tam dám delay(1000) tak se mě ukazují data z jednoho čidla a druhého čidla střídavě nahoře dole .
přikládám kod na zobrazení
správně je obrázek :
potom se to přehodí takto
kde temperature je jedno UNO s DHT11 a teplota je druhé UNO s DS1820 , proměnná 25.15 je jen tak zadaná na tvrdo ...
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);
#include <DHT.h>
float temperature[2];
float teplota[2];
RF24 radio(7, 8);
const uint64_t pipe1 = 0xE8E8F0F0E1LL;
const uint64_t pipe2 = 0xE8E8F0F0E2LL;
void setup(void) {
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(1, pipe1);
radio.openReadingPipe(2, pipe2);
radio.startListening();
lcd.init();
lcd.backlight();
lcd.clear();
lcd.print("Humidity & temp");
delay(1000);
lcd.clear();
lcd.print("Starting.....");
lcd.clear();
delay(1000);
}
void loop(void)
{
radio.read(temperature, sizeof(temperature));
radio.read(teplota, sizeof(teplota));
delay(500);
lcd.setCursor(0, 0);
lcd.print("Temp");
lcd.setCursor(0, 1);
lcd.print("Humidity");
lcd.setCursor(9, 0);
lcd.print(temperature[0]);
lcd.print(" C");
lcd.setCursor(9, 1);
lcd.print(temperature[1]);
lcd.setCursor(9, 2);
lcd.print(teplota[0]);
lcd.setCursor(9, 3);
lcd.print(teplota[1]);
lcd.print(" %");
delay(10000);
}
děkuji prozatím
Re: Zobrazení proměnných na LCD I2C 20x4
Jo to jsem řešil.
Je třeba otestovat z které "pipe" se čte.
Jenom část kódu:
Je třeba otestovat z které "pipe" se čte.
Jenom část kódu:
Kód: Vybrat vše
void loop(void)
{
unsigned char pipe_num;
if (radio.available(&pipe_num))
{
radio.read(&data, sizeof(data));
if(pipe_num == 0)
{
Serial.print("this is sensor 0 ");
Serial.print(data);
lcd.setCursor(0,0);
lcd.print("Cidlo 1 = ");
lcd.print(data,4);
}
if(pipe_num == 1)
{
Serial.print("this is sensor 1 ");
Serial.print(data);
lcd.setCursor(0,1);
lcd.print("Cidlo 1 = ");
lcd.print(data,4);
}
Re: Zobrazení proměnných na LCD I2C 20x4
jéé, děkuji
R.
R.
Re: Zobrazení proměnných na LCD I2C 20x4
tak jsem to zkoušel a stále s tím bojuji stále se mě hodnoty přepisují jak chtějí, hlavně nevím jak zjistím tu "pipe" když dám (0,pipe[1]])ukaze me to 0 a , ale nijek v tom výčtu se mě to nechce přepnout na jiné pipe....
zde je kod, asi tam mám něco špatně
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#define DEBUG
#include <Adafruit_GFX_AS.h> // Core graphics library
#include <Adafruit_ILI9341_8bit_AS.h> // Hardware-specific library
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
RF24 radio(40, 53);
const uint64_t pipes[4] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL };
float pokoj, loznice, last_temp, kuchyn_temp, kuchyn_vlh, last_temp1, last_temp2 , last_vlh1;
unsigned char pipe_num;
void setup(void) {
#ifdef DEBUG
Serial.begin(9600);
Serial.print("TFT velikost je ");
Serial.print(tft.width());
Serial.print(" x ");
Serial.println(tft.height());
#endif // DEBUG
tft.reset();
tft.begin(0x9341);
tft.fillScreen(BLACK);
tft.setRotation(3);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, pipes[1]);
radio.openReadingPipe(1, pipes[2]);
radio.openReadingPipe(2, pipes[3]);
radio.startListening();
}
void loop(void)
{
radio.read(&pokoj, sizeof(pokoj));
if (pipe_num == 0)
{
tft.setTextSize(3);
tft.setCursor(0, 25);
tft.print("Teploty v byte");
tft.setTextSize(4);
tft.setTextColor(YELLOW, BLACK);
tft.setCursor(190, 70);
tft.print(last_temp);
tft.setCursor(0, 70);
tft.print("Pokoj");
tft.setCursor(190, 70);
tft.print(pokoj);
last_temp = pokoj;
}
delay(15);
radio.read(&loznice, sizeof(loznice));
if (pipe_num == 1)
{
tft.setTextColor(YELLOW, BLACK);
tft.setCursor(190, 105);
tft.print(last_temp1);
tft.setCursor(0, 105);
tft.print("Loznice");
tft.setCursor(190, 105);
tft.print(loznice);
last_temp1 = loznice;
}
delay(15);
radio.read(&kuchyn_temp, sizeof(kuchyn_temp));
radio.read(&kuchyn_vlh, sizeof(kuchyn_vlh));
if (pipe_num == 2)
{
tft.setTextColor(GREEN, BLACK);
tft.setCursor(190, 140);
tft.print(kuchyn_temp);
tft.setCursor(0, 140);
tft.print("Kuchyn1");
tft.setCursor(0, 175);
tft.print("Kuchyn2");
tft.setCursor(190, 175);
tft.print(kuchyn_vlh);
last_temp2 = kuchyn_temp;
last_vlh1 = kuchyn_vlh;
}
delay(10000);
}
zde je kod, asi tam mám něco špatně
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#define DEBUG
#include <Adafruit_GFX_AS.h> // Core graphics library
#include <Adafruit_ILI9341_8bit_AS.h> // Hardware-specific library
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
RF24 radio(40, 53);
const uint64_t pipes[4] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL };
float pokoj, loznice, last_temp, kuchyn_temp, kuchyn_vlh, last_temp1, last_temp2 , last_vlh1;
unsigned char pipe_num;
void setup(void) {
#ifdef DEBUG
Serial.begin(9600);
Serial.print("TFT velikost je ");
Serial.print(tft.width());
Serial.print(" x ");
Serial.println(tft.height());
#endif // DEBUG
tft.reset();
tft.begin(0x9341);
tft.fillScreen(BLACK);
tft.setRotation(3);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, pipes[1]);
radio.openReadingPipe(1, pipes[2]);
radio.openReadingPipe(2, pipes[3]);
radio.startListening();
}
void loop(void)
{
radio.read(&pokoj, sizeof(pokoj));
if (pipe_num == 0)
{
tft.setTextSize(3);
tft.setCursor(0, 25);
tft.print("Teploty v byte");
tft.setTextSize(4);
tft.setTextColor(YELLOW, BLACK);
tft.setCursor(190, 70);
tft.print(last_temp);
tft.setCursor(0, 70);
tft.print("Pokoj");
tft.setCursor(190, 70);
tft.print(pokoj);
last_temp = pokoj;
}
delay(15);
radio.read(&loznice, sizeof(loznice));
if (pipe_num == 1)
{
tft.setTextColor(YELLOW, BLACK);
tft.setCursor(190, 105);
tft.print(last_temp1);
tft.setCursor(0, 105);
tft.print("Loznice");
tft.setCursor(190, 105);
tft.print(loznice);
last_temp1 = loznice;
}
delay(15);
radio.read(&kuchyn_temp, sizeof(kuchyn_temp));
radio.read(&kuchyn_vlh, sizeof(kuchyn_vlh));
if (pipe_num == 2)
{
tft.setTextColor(GREEN, BLACK);
tft.setCursor(190, 140);
tft.print(kuchyn_temp);
tft.setCursor(0, 140);
tft.print("Kuchyn1");
tft.setCursor(0, 175);
tft.print("Kuchyn2");
tft.setCursor(190, 175);
tft.print(kuchyn_vlh);
last_temp2 = kuchyn_temp;
last_vlh1 = kuchyn_vlh;
}
delay(10000);
}
Re: Zobrazení proměnných na LCD I2C 20x4
Zdravím.
Zkus dát do příspěvku přílohy celých kódů 3x vysílání a 1x příjem.
Mám zapojeno na testy 4x vysílání a 1x příjem. Zkusil bych upravit tvůj kód a odzkoušet.
Zkus dát do příspěvku přílohy celých kódů 3x vysílání a 1x příjem.
Mám zapojeno na testy 4x vysílání a 1x příjem. Zkusil bych upravit tvůj kód a odzkoušet.
Re: Zobrazení proměnných na LCD I2C 20x4
Mám jeden prijímač a tři vysílače, kde na tom třetím je DHT čili teplota a vlhkost...
předem děkuji
předem děkuji
Re: Zobrazení proměnných na LCD I2C 20x4
Zkus tento kod:
Kód: Vybrat vše
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include <Wire.h>
#define DEBUG
#include <Adafruit_GFX_AS.h> // Core graphics library
#include <Adafruit_ILI9341_8bit_AS.h> // Hardware-specific library
#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin
// Assign human-readable names to some common 16-bit color values:
#define BLACK 0x0000
#define BLUE 0x001F
#define RED 0xF800
#define GREEN 0x07E0
#define CYAN 0x07FF
#define MAGENTA 0xF81F
#define YELLOW 0xFFE0
#define WHITE 0xFFFF
Adafruit_ILI9341_8bit_AS tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);
RF24 radio(40, 53);
//const uint64_t pipes[4] = { 0xF0F0F0F0E1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL };
const uint64_t pipes[6] = { 0xFFFFFFFFF1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL, 0xF0F0F0F0E5LL, 0xF0F0F0F0E6LL };
////Uprava: jina definice adres, takto me to funguje
float pokoj, loznice, last_temp, kuchyn_temp, kuchyn_vlh, last_temp1, last_temp2 , last_vlh1;
float kuchyn[2];
////aby se teplota a vlhkost cetli ve spravnem poradi. Je treba upravit i ve vysilaci
////ukázka pole : float kuchyn[2]; potom kuchyn[0] bude teplota a kuchyn[1] bude vlhkost
unsigned char pipe_num;
void setup(void) {
#ifdef DEBUG
Serial.begin(9600);
Serial.print("TFT velikost je ");
Serial.print(tft.width());
Serial.print(" x ");
Serial.println(tft.height());
#endif // DEBUG
tft.reset();
tft.begin(0x9341);
tft.fillScreen(BLACK);
tft.setRotation(3);
Serial.begin(9600);
radio.begin();
radio.openReadingPipe(0, pipes[1]);
radio.openReadingPipe(1, pipes[2]);
radio.openReadingPipe(2, pipes[3]);
radio.startListening();
}
void loop(void)
{
if (radio.available(&pipe_num)) ////Tady se nacte z ktereho kanalu prisla data
{
if (pipe_num == 0)
{
radio.read(&pokoj, sizeof(pokoj)); ////pro dany kanal se nate promenna
tft.setTextSize(3);
tft.setCursor(0, 25);
tft.print("Teploty v byte");
tft.setTextSize(4);
tft.setTextColor(YELLOW, BLACK);
tft.setCursor(190, 70);
tft.print(last_temp);
tft.setCursor(0, 70);
tft.print("Pokoj");
tft.setCursor(190, 70);
tft.print(pokoj);
last_temp = pokoj;
}
delay(15);
if (pipe_num == 1)
{
radio.read(&loznice, sizeof(loznice)); ////pro dany kanal se nate promenna
tft.setTextColor(YELLOW, BLACK);
tft.setCursor(190, 105);
tft.print(last_temp1);
tft.setCursor(0, 105);
tft.print("Loznice");
tft.setCursor(190, 105);
tft.print(loznice);
last_temp1 = loznice;
}
delay(15);
if (pipe_num == 2)
{
////radio.read(&kuchyn_temp, sizeof(kuchyn_temp));
////radio.read(&kuchyn_vlh, sizeof(kuchyn_vlh));
////Toto ti asi nebude fungovat Pokud chces z jednoho vysílace posílat více hodnot, je jepší posílat pole.
////ukázka pole : float kuchyn[2]; potom kuchyn[0] bude teplota a kuchyn[1] bude vlhkost
radio.read(&kuchyn, sizeof(kuchyn)); ////potom se dájí načíst obě hodnoty najednou
tft.setTextColor(GREEN, BLACK);
tft.setCursor(190, 140);
tft.print(kuchyn[0]); //tft.print(kuchyn_temp); ////zamenit
tft.setCursor(0, 140);
tft.print("Kuchyn1");
tft.setCursor(0, 175);
tft.print("Kuchyn2");
tft.setCursor(190, 175);
tft.print(kuchyn[1]); //tft.print(kuchyn_vlh); ////zamenit
last_temp2 = kuchyn[0]; //last_temp2 = kuchyn_temp; ////zamenit
last_vlh1 = kuchyn[1]; //last_vlh1 = kuchyn_vlh; ////zamenit
}
}
else
{
//Serial.print(pipe_num);
Serial.println("No radio available");
}
delay(10000);
}
Re: Zobrazení proměnných na LCD I2C 20x4
Pokracovani
Kód: Vybrat vše
#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>
#include "DHT.h"
// Uncomment one of the lines below for whatever DHT sensor type you're using!
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT21 // DHT 21 (AM2301)
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
// DHT Sensor
const int DHTPin = 2;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);
RF24 radio(7, 8);
const uint64_t pipes[6] = { 0xFFFFFFFFF1LL, 0xF0F0F0F0E2LL, 0xF0F0F0F0E3LL, 0xF0F0F0F0E4LL, 0xF0F0F0F0E5LL, 0xF0F0F0F0E6LL };
float kuchyn_temp, kuchyn_vlh;
float kuchyn[2];
void setup(void) {
Serial.begin(9600);
dht.begin();
radio.begin();
radio.openWritingPipe(pipes[3]);
radio.stopListening();
}
void loop(void)
{
float h = dht.readHumidity();
float t = dht.readTemperature();
kuchyn[0]=t+2;
kuchyn[1]=h+18;
Serial.println("Teplota a vlhkost: ");
Serial.println(kuchyn[0]);
Serial.println(kuchyn[1]);
radio.write(&kuchyn, sizeof(kuchyn));
radio.write(&kuchyn, sizeof(kuchyn));// Nevim proc ale kdyz se to poslalo 2x po sobe tak to funguje lepe
delay(1000);
}
Re: Zobrazení proměnných na LCD I2C 20x4
Pokud to nebude fungovat zkusím to zítra nahrát do mých arduin.
Re: Zobrazení proměnných na LCD I2C 20x4
bezi to chvilku a vypadá to dobře, díky, zítra si to zkouknu ještě podrobněji
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 3 hosti