Arduino, výpis hodnoty na displej

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
Peter Kolok
Příspěvky: 5
Registrován: 18 led 2020, 23:11
Reputation: 0

Arduino, výpis hodnoty na displej

Příspěvek od Peter Kolok » 27 led 2020, 20:23

Dobrý deň,
Snažím sa naprogramovať meteorologickú stanicu na svoju ročníkovú prácu. Ako to ale býva, stretávam sa s naozaj veľa problémami, ktoré mi chvíľku trvá, než prídem na ich riešenie. Moja ročníková práca musí frčať na funkcií Serial.read(). Pomocou snímača DHT snímam vlhkosť a informácia sa ukladá na dosku Wemos D1 R1, kde pomocou komunikačných portov(TX, RX) sa nameraná hodnota prenesie na dosku ESP 8266 a následne sa zobrazí na LCD displeji.

Bohužiaľ s dákeho nepochopiteľného dôvodu mi to Vlhkosť s nameranou hodnotou vypisuje len v jednom bode. Nevedeli by ste mi s tým niekto poradiť?

Odosielateľ:

Kód: Vybrat vše

#include "DHTesp.h"
#include <Arduino.h>
#include <Wire.h>

#include <BMP180I2C.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDRESS 0x77

#ifdef ESP32
#pragma message(THIS EXAMPLE IS FOR ESP8266 ONLY!)
#error Select ESP8266 board.
#endif

DHTesp dht;
//create an BMP180 object using the I2C interface
BMP180I2C bmp180(I2C_ADDRESS);
LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup()
{
  Serial.begin(9600);

  // Autodetect is not working reliable, don't use the following line
  // dht.setup(17);
  // use this instead:
  dht.setup(D13, DHTesp::DHT22); // Connect DHT sensor to GPIO 17
}

void loop()
{
  delay(dht.getMinimumSamplingPeriod());

  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();


  Serial.print("Vlhkost: ");
  Serial.print(dht.getHumidity());
  Serial.println(" %");  
 
}
Prijímateľ:

Kód: Vybrat vše

#include <DHTesp.h>

#include <BMP180I2C.h>
#include <BMP180MI.h>
#include <BMP180TwoWire.h>

#include <Wire.h>
#include <LiquidCrystal_I2C.h>


LiquidCrystal_I2C lcd(0x27, 20, 4);


void setup() {
  // Open serial communications and wait for port to open:
  
  Serial.begin(9600);
  Wire.begin();
  lcd.init();
  lcd.backlight();
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
lcd.setCursor(0, 1);
lcd.print("Ahoj");
}


int Znak;
void loop() { // run over and over



delay(1000);

lcd.setCursor(0,0);  
  if (Serial.available()) {
    //Serial.write(Serial.read());
    //lcd.print((char)Serial.read());
    Znak=(char)Serial.read();
    switch(Znak)
    {
      case  '\r'  :
      case  '\n'  : lcd.setCursor(0,0); break;
      default : /*lcd.setCursor(0,0);*/ lcd.write((char)Znak);  break;
    }
  }
Přílohy
84476261_627669464663157_4365865605350293504_n.jpg
84357716_753188145432262_7368414337892876288_n.jpg
83927465_757136718027971_6148304061419487232_n.jpg
83704361_181210022941396_6411969311992184832_n.jpg
83324066_178840449872443_5559703549694181376_n.jpg
83313806_631176957695626_4190090899075629056_n.jpg
83199897_595713714603524_3463875503427944448_n.jpg
83029751_833266810447481_8409500129677017088_n.jpg
82955175_2739152352832454_4126911397575524352_n.jpg
82910160_172446480686222_7120284057044254720_n.jpg

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Arduino, výpis hodnoty na displej

Příspěvek od pavel1tu » 27 led 2020, 20:43

No sériová komunikace posílá vše po 1 znaku
Koukni se na nějaký příklad ... bývá tam

Kód: Vybrat vše

while (Serial.available() > 0) { .....

to přijímá jeden znak za druhým, dokud není "odřádkování"

je více možností - "Serial.readStringUntil" a další ...

já jsem dost špatný a líný programátor, používám knihovnu EasyTransfer

PS: probírá se to i v posledním příspěvku "Arduino: Komunikácia medzi doskami"
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino, výpis hodnoty na displej

Příspěvek od kiRRow » 27 led 2020, 21:10

int ze seriové linky takhle nedostaneš ... chodí to po bajtech ... hodíš do seriové linky znak '1' a z druhý strany vyleze 49 ... když takovej bajt pak vypíšeš jako char, vyleze '1' ... chceš-li int, musíš ho vyparsovat ... jsou na to funkce parseInt ... google a studovat :)
----
btw to /r a /n jsou bajty 13 a 10 :)

Peter Kolok
Příspěvky: 5
Registrován: 18 led 2020, 23:11
Reputation: 0

Re: Arduino, výpis hodnoty na displej

Příspěvek od Peter Kolok » 27 led 2020, 21:20

čisto teoreticky... čo by sa zmenilo tým, že by som int nahradil char?

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Arduino, výpis hodnoty na displej

Příspěvek od pavel1tu » 27 led 2020, 21:31

https://www.oreilly.com/library/view/ar ... /ch04.html

přečti celé, od bodu 4.4 myslím tě to zajímá, ale pokud vyzkoušíš celé (dej si ten čas) asi to pochopíš

PS: tohle jsem pochopil kdysi i já, ale jak říkám, jsem líný tak používám EasyTransfer, což tobě asi nepomůže
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Arduino, výpis hodnoty na displej

Příspěvek od kiRRow » 27 led 2020, 21:44

no v podstatě nic moc ... on bude problém v tom, že se ti displej vrací furt na pozici 0,0 ... co já mám zkušenosti, když takovýhle displej vypíše znak, automaticky si nastaví další pozici ... a jde až za obraz :) ..... takže bych se šťoural v tom, proooč to furt vypisuje na 0,0 ... kde to v tom programu mám napsaný a proč se tam ten program dostává, když nemá ...... mrzák ...

takže bych nahradil ten přjímací znak buď charem, nebo bytem ... ono to výjde tak skoro na stejno ... a v tom case bych místo '\r' a '\n' ... použil bytový výraz ... 10 a 13 ....

Odpovědět

Kdo je online

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