Zobrazení proměnných na LCD I2C 20x4

roman_rja
Příspěvky: 13
Registrován: 23 led 2018, 14:04
Reputation: 0

Zobrazení proměnných na LCD I2C 20x4

Příspěvek od roman_rja » 31 led 2018, 09:28

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 :
disp1.jpg
disp1.jpg (10.23 KiB) Zobrazeno 4434 x

potom se to přehodí takto
disp2.jpg
disp2.jpg (10.85 KiB) Zobrazeno 4434 x


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

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od ohruska » 31 led 2018, 10:47

Jo to jsem řešil.
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);

     }

roman_rja
Příspěvky: 13
Registrován: 23 led 2018, 14:04
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od roman_rja » 31 led 2018, 12:42

jéé, děkuji
R.

roman_rja
Příspěvky: 13
Registrován: 23 led 2018, 14:04
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od roman_rja » 07 úno 2018, 20:31

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);
}

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od ohruska » 07 úno 2018, 21:32

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.

roman_rja
Příspěvky: 13
Registrován: 23 led 2018, 14:04
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od roman_rja » 07 úno 2018, 21:45

Mám jeden prijímač a tři vysílače, kde na tom třetím je DHT čili teplota a vlhkost...
NRLWIFIVYSILAC3.ino
(1.01 KiB) Staženo 183 x
NRLWIFIVYSILAC2.ino
(954 bajtů) Staženo 175 x
NRLWIFIVYSILAC.ino
(950 bajtů) Staženo 177 x
NRLWIFIPRIJIMAC.ino
(2.58 KiB) Staženo 176 x


předem děkuji

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od ohruska » 07 úno 2018, 22:21

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);
}

ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od ohruska » 07 úno 2018, 22:28

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);
  }



ohruska
Příspěvky: 235
Registrován: 08 pro 2017, 20:56
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od ohruska » 07 úno 2018, 22:31

Pokud to nebude fungovat zkusím to zítra nahrát do mých arduin.

roman_rja
Příspěvky: 13
Registrován: 23 led 2018, 14:04
Reputation: 0

Re: Zobrazení proměnných na LCD I2C 20x4

Příspěvek od roman_rja » 07 úno 2018, 22:58

bezi to chvilku a vypadá to dobře, díky, zítra si to zkouknu ještě podrobněji

Odpovědět

Kdo je online

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