Stránka 1 z 1

Arduino, výpis hodnoty na displej

Napsal: 27 led 2020, 20:23
od Peter Kolok
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;
    }
  }

Re: Arduino, výpis hodnoty na displej

Napsal: 27 led 2020, 20:43
od pavel1tu
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"

Re: Arduino, výpis hodnoty na displej

Napsal: 27 led 2020, 21:10
od kiRRow
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 :)

Re: Arduino, výpis hodnoty na displej

Napsal: 27 led 2020, 21:20
od Peter Kolok
čisto teoreticky... čo by sa zmenilo tým, že by som int nahradil char?

Re: Arduino, výpis hodnoty na displej

Napsal: 27 led 2020, 21:31
od pavel1tu
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

Re: Arduino, výpis hodnoty na displej

Napsal: 27 led 2020, 21:44
od kiRRow
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 ....