přehled vizualizace natopení akumulační nádoby

Nedaří se vám s projektem a nenašli jste vhodné místo, kde se zeptat? Napište sem.
Pravidla fóra
Tohle subfórum je určeno pro konzultaci ucelených nápadů, popřípadě řešení komplexnějších projektů, které opravdu není možné rozdělit na menší části.
Většinu problémů jde rozdělit na menší a ptát se na ně v konkrétních subfórech.
Uživatelský avatar
kiRRow
Příspěvky: 1164
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od kiRRow » 21 dub 2023, 15:55

Zkus :

Kód: Vybrat vše


#include <OneWire.h>
#include <DallasTemperature.h>

// připojení potřebné knihovny
#include <SoftwareSerial.h>
// nastavení čísel propojovacích pinů
#define RX 11
#define TX 10
// vytvoření objektu swSerial z knihovny s nastavenými piny
SoftwareSerial swSerial(RX, TX);

// Data wire is plugged into port 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);

// Addresses of 3 DS18B20s
uint8_t sensor1[8] = { 0x28, 0x50, 0x19, 0x51, 0x4D, 0x20, 0x01, 0x56 };
uint8_t sensor2[8] = { 0x28, 0x4C, 0x40, 0xB8, 0x4D, 0x20, 0x01, 0xCC };
uint8_t sensor3[8] = { 0x28, 0x1E, 0x3B, 0x53, 0x4D, 0x20, 0x01, 0x4C };
uint8_t sensor4[8] = { 0x28, 0x81, 0x69, 0x69, 0x4D, 0x20, 0x01, 0x9C };
uint8_t sensor5[8] = { 0x28, 0x4F, 0xBE, 0x66, 0x4D, 0x20, 0x01, 0x85 };

void setup(void)
{
  // zahájení komunikace po softwarové sériové lince
  swSerial.begin(9600);
  Serial.begin(9600);
  sensors.begin();
}

void loop(void)
{
  sensors.requestTemperatures();
  
  Serial.print("Sensor 1: ");
  printTemperature(sensor1);
  
  Serial.print("Sensor 2: ");
  printTemperature(sensor2);
  
  Serial.print("Sensor 3: ");
  printTemperature(sensor3);

  Serial.print("Sensor 4: ");
  printTemperature(sensor4);

  Serial.print("Sensor 5: ");
  printTemperature(sensor5);
  
  Serial.println();
//-- vypis na displej ---
  String zprava = "t0.txt=\"Sensor 1: ";
  zprava += sensor1;
  zprava += " C.\"";

  swSerial.print(zprava);
  swSerial.write(0xff);
  swSerial.write(0xff);
  swSerial.write(0xff);
//----------------------
  delay(1000);
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print(tempC);
 
  Serial.print("°C    ");
 
}

fogl 79
Příspěvky: 20
Registrován: 30 bře 2023, 22:36
Reputation: 0

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od fogl 79 » 21 dub 2023, 16:27

ahojky děkuji za pomoc
bohužel to na displej vypsalo jen "senzor 1" ale nevypsalo to teplotu senzoru

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

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od kiRRow » 21 dub 2023, 16:35

A jo, moje chyba ... ale pokrok, už to jde zkompilovat :D

Kód: Vybrat vše


#include <OneWire.h>
#include <DallasTemperature.h>

// připojení potřebné knihovny
#include <SoftwareSerial.h>
// nastavení čísel propojovacích pinů
#define RX 11
#define TX 10
// vytvoření objektu swSerial z knihovny s nastavenými piny
SoftwareSerial swSerial(RX, TX);

// Data wire is plugged into port 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);

// Addresses of 3 DS18B20s
uint8_t sensor1[8] = { 0x28, 0x50, 0x19, 0x51, 0x4D, 0x20, 0x01, 0x56 };
uint8_t sensor2[8] = { 0x28, 0x4C, 0x40, 0xB8, 0x4D, 0x20, 0x01, 0xCC };
uint8_t sensor3[8] = { 0x28, 0x1E, 0x3B, 0x53, 0x4D, 0x20, 0x01, 0x4C };
uint8_t sensor4[8] = { 0x28, 0x81, 0x69, 0x69, 0x4D, 0x20, 0x01, 0x9C };
uint8_t sensor5[8] = { 0x28, 0x4F, 0xBE, 0x66, 0x4D, 0x20, 0x01, 0x85 };

void setup(void)
{
  // zahájení komunikace po softwarové sériové lince
  swSerial.begin(9600);
  Serial.begin(9600);
  sensors.begin();
}

void loop(void)
{
  sensors.requestTemperatures();
  
  Serial.print("Sensor 1: ");
  printTemperature(sensor1);
  
  Serial.print("Sensor 2: ");
  printTemperature(sensor2);
  
  Serial.print("Sensor 3: ");
  printTemperature(sensor3);

  Serial.print("Sensor 4: ");
  printTemperature(sensor4);

  Serial.print("Sensor 5: ");
  printTemperature(sensor5);
  
  Serial.println();
// nacteni teploty
float tempC = sensors.getTempC(sensor1);
//-- vypis na displej ---
  String zprava = "t0.txt=\"Sensor 1: ";
  zprava += tempC;
  zprava += " C.\"";

  swSerial.print(zprava);
  swSerial.write(0xff);
  swSerial.write(0xff);
  swSerial.write(0xff);
//----------------------
  delay(1000);
}

void printTemperature(DeviceAddress deviceAddress)
{
  float tempC = sensors.getTempC(deviceAddress);
  Serial.print(tempC);
 
  Serial.print("°C    ");
 
}
snad takhle ?

fogl 79
Příspěvky: 20
Registrován: 30 bře 2023, 22:36
Reputation: 0

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od fogl 79 » 21 dub 2023, 16:54

moc dekuji za pomoc už to šlape konečně se pohnu ...
teď už jen okopírovat výpis na displej pro každý senzor? a upravit hodnotu "t0" pro každý senzor

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

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od kiRRow » 21 dub 2023, 17:01

No teď by jsi si z toho měl udělat nějakou rozumnou funkci, aby jsi se vyhnul 5x kopírovanému bloku. A v loopu volat jen tu funkci - tak jak to řeší ten výpis na seriovou linku.

fogl 79
Příspěvky: 20
Registrován: 30 bře 2023, 22:36
Reputation: 0

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od fogl 79 » 21 dub 2023, 17:11

a jsem ztracen teprve se vše učím

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

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od kiRRow » 21 dub 2023, 17:19

Funkce jsou velmi užitečná věc.

Kód: Vybrat vše

void sensorToDisplay(DeviceAddress adresaSenzoru, int cisloSenzoru){
// nacteni teploty
  float tempC = sensors.getTempC(adresaSenzoru);
//-- vypis na displej ---
  String zprava = "t" + cisloSenzoru + ".txt=\"Sensor " + cisloSenzoru + ": ";
  zprava += tempC;
  zprava += " C.\"";

  swSerial.print(zprava);
  swSerial.write(0xff);
  swSerial.write(0xff);
  swSerial.write(0xff);
//----------------------
}
Toto je funkce, která chce adresu senzoru aby si načetla data a číslo senzoru aby ho mohla vypsat na displej se správným označením - je třeba ji umístit mimo loop, setup, nebo jakoukoliv jinačí funkci
Je nutné aby se v displeji jmenoval text pro senzor1 t1.txt, pro senzor2 t2.txt ... atd
Z loopu pak můžeš odstranit všechno co je mezi //nacteni teploty a //--------------- a nahradit to voláním funkce

Kód: Vybrat vše

sensorToDisplay(sensor1, 1);
sensorToDisplay(sensor2, 2);
//atd
edit, zapoměl jsem deklarovat proměnné te funkce ... opraveno

fogl 79
Příspěvky: 20
Registrován: 30 bře 2023, 22:36
Reputation: 0

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od fogl 79 » 21 dub 2023, 17:25

moc děkuji pokusím se a napišu jak se podařilo

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

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od kiRRow » 21 dub 2023, 17:29

fogl 79 píše:
21 dub 2023, 17:25
moc děkuji pokusím se a napišu jak se podařilo
na poprvé jsem tam měl chybu a neprojde to kontrolou před kompilací ... špatně jsem tu funkci napsal a řekl jí jen jak se budou data jmenovat, ale né jaký budou mít typ ... opraveno editací

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

Re: přehled vizualizace natopení akumulační nádoby

Příspěvek od kiRRow » 21 dub 2023, 17:58

fogl 79 píše:
21 dub 2023, 17:11
a jsem ztracen teprve se vše učím
No tak rozchodil se první senzor, to znamená, že ta část kódu je funkční, takže se jednoduše nabízí řešení, že tu část kodu 5x zkopíruješ, přečísluješ ty proměné a změníš text, během toho zjistíš že to hází chybu u toho float tempC ... tak to musíš přepsat na tempC1, tempC2 ... pak to zas nebude fungovat, protože se to musí změnit i v tom kopírovaném bloku. Jo ale nakonec jo, bude to funkční řešení problému. Svůj účel to splní.

Druhá možnost je z této části kódu udělat rutinu, neboli funkci. Ten blok kódu je potom v tom programu napsán společně pro 5-10 klidně i 100 sezorů. Předtím než se tento kód spustí, tak mu procesor automaticky někde uloží data co má zpracovat a pak ho spustí. Jeden a ten samý kód se pak může donekonečna používat s libovolnými parametry. Užitečné to je pak i v tom, že celé kusy kódu z jednoho projektu jsou často s velmi lehkými úpravami použitelné u dalších projektů.

Odpovědět

Kdo je online

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