Sari la conținut
ELFORUM - Forumul electronistilor

Ajutor corectare


vasile eugen

Postări Recomandate

Salutare.Am inceput  sa iau exemple de pornire de pe net.Am reusit  un exemplu  cu senzorul DHT11 care sa-mi arate  valorile pe terminal serial ,dar pe lcd 2*16   nu reusesc sa il compilez.Undeva   gresesc dar tot nu am reusit.Codul care l-am incercat este:

#include <DHT11.h>
//Declare objects
dht11 DHT11;
//Pin Numbers
#define DHT11PIN 2
#include <LiquidCrystal.h>
 
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
void setup() {
  Serial.begin(9600);
  lcd.begin(16, 2);
  dht.begin();
}
void loop() {
  float h = dht.readHumidity();
  float t = dht.readTemperature();
  if (isnan(t) || isnan(h)) {
    Serial.println("Failed to read from DHT");
  }
  else {
    lcd.setCursor(0, 0);
    lcd.print("Temp=");
    lcd.print(t);
    lcd.print(" *C");
    lcd.setCursor(0, 1);
    lcd.print("Humidity=");
    lcd.print(h);
    lcd.print("% ");
    delay(500);
  }
}
Link spre comentariu
  • Răspunsuri 13
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

Top autori în acest subiect

  • 9 luni mai târziu...

Postez aici sa nu mai deschid un alt threat.

Vreau sa fac un termometru cu arduino, 2 ds18b20 si lcd 16x2.

Am codul afiseaza temperaturile dar cand temperatura scade sub10 imi apare 9 si nu 09.

cum pot sa fac sa apara cu 0 in fata? Multumesc.

#include <OneWire.h>#include <DallasTemperature.h>// Data wire is plugged into pin 2 on the Arduino#define ONE_WIRE_BUS 8// Setup a oneWire instance to communicate with any OneWire devices // (not just Maxim/Dallas temperature ICs)OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature.DallasTemperature sensors(&oneWire);DeviceAddress Probe01 = {   0x28, 0x30, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0x8E }; DeviceAddress Probe02 = {   0x28, 0x31, 0xC5, 0xB8, 0x00, 0x00, 0x00, 0xB9 };/*  The circuit:   LCD RS pin to digital pin 2   LCD Enable pin to digital pin 3   LCD D4 pin to digital pin 4   LCD D5 pin to digital pin 5   LCD D6 pin to digital pin 6   LCD D7 pin to digital pin 7   LCD R/W pin to ground   10K resistor:   ends to +5V and ground   wiper to LCD VO pin (pin 3)*/// include the library code:#include <LiquidCrystal.h>// initialize the library with the numbers of the interface pinsLiquidCrystal lcd(2, 3, 4, 5, 6, 7);int LEDPin = 13; //digital pin output for lightbyte celsius[8]={  0b01100,  0b10010,  0b10010,  0b01100,  0b00000,  0b00000,  0b00000,  0b00000};void setup() {  // start serial port to show results  Serial.begin(9600);  Serial.print("Initializing Temperature Control Library Version ");  Serial.println(DALLASTEMPLIBVERSION);  // Initialize the Temperature measurement library  sensors.begin();  // set the resolution to 10 bit (Can be 9 to 12 bits .. lower is faster)  sensors.setResolution(Probe01, 9);  sensors.setResolution(Probe02, 9);  lcd.begin(16, 2);  lcd.print("Dual Thermometer");  delay (500);  lcd.clear();  pinMode(13, OUTPUT);  lcd.createChar(1,celsius);}void loop(){   Serial.println();  Serial.print("Number of Devices found on bus = ");    Serial.println(sensors.getDeviceCount());     Serial.print("Getting temperatures... ");    Serial.println();     // Command all devices on bus to read temperature    sensors.requestTemperatures();    Serial.print("Probe 01 temperature is:   ");  printTemperature(Probe01);  Serial.println();  Serial.print("Probe 02 temperature is:   ");  printTemperature(Probe02);  Serial.println();  }//--(end main loop )---/*-----( Declare User-written Functions )-----*/void printTemperature(DeviceAddress deviceAddress){  float temp1 = sensors.getTempC(Probe01);  float temp2 = sensors.getTempC(Probe02);  float tempC = sensors.getTempC(deviceAddress);  if (tempC == -127.00)   {    Serial.print("Error getting temperature  ");  }   else  {    Serial.print("C: ");    Serial.print(tempC);  }  lcd.setCursor(0, 0);  lcd.print("I:");  lcd.print(temp1, 1);  lcd.setCursor(6, 0);  lcd.write(1);  lcd.print("C");  lcd.setCursor(0, 1);  lcd.print("O:");  lcd.print(temp2, 1);  lcd.setCursor(6, 1);  lcd.write(1);  lcd.print("C");}// End printTemperature//*********( THE END )***********
Editat de Xaby
Link spre comentariu

...

Am codul afiseaza temperaturile dar cand temperatura scade sub 10 imi apare 9 si nu 09.

cum pot sa fac sa apara cu 0 in fata? 

...

 

 

In prima faza - exact cum ai scris:

lcd.print("I:");if (temp1<10) lcd.print('0');  // linie adaugata lcd.print(temp1, 1); 

la fel si la temp2.

 

Linia nou adaugata o putem "traduce" astfel: daca variabila temp1 contine o valoare mai mica decat zece atunci,  si numai atunci, executa instructiunea  lcd.print - tipareste un zero.

Editat de rlodina
Link spre comentariu

M-am gandit la 2 metode.

Prima metoda:

lcd.print("I:");  lcd.setCursor(2, 0);  if (temp1 <0) lcd.print('-');   else if (temp1 >0) lcd.print('+');   if (temp1 <0) temp1=-temp1;   if (temp1 <10) lcd.print('0');    lcd.print(temp1, 1);

A doua metoda:

lcd.print("I:");  lcd.setCursor(2, 0);  if (temp1 <0) lcd.print('-');  else if (temp1 >0) lcd.print('+');   if (temp1 <0) temp1=temp1*-1;   if (temp1 <10) lcd.print('0');  lcd.print(temp1, 1);

Amandoua metode functioneaza.

Care ar fi mai ok? Sau exista alta metode?

Link spre comentariu

Eu inclin spre ultima varianta pentru ca este mai logica.

Intr-un final urmareste care dintre programe ocupa mai putina memorie.

Si,

pune un millis() inainte si unul dupa secventa de cod si vezi timpul de executie pentru fiecare (diferenta dintre cele doua valori millis() ).

Vei afla astfel care varianta consuma mai mult timp de procesor.

Link spre comentariu

Faptul ca tu scrii o data cu * si o data fara nu impiedica compilatorul sa faca operatia pentru tine.

Ca fapt divers, am testat cele doua variante si ocupa aceeasi cantitate de memorie.

Grupat adica:

  lcd.print("I:");  lcd.setCursor(2, 0);  if (temp1 <0) {    lcd.print('-');     temp1=-temp1;  }  else if (temp1 >0) lcd.print('+');   if (temp1 <10) lcd.print('0');    lcd.print(temp1, 1);

Cele doo sketchuri de test:

void setup() {  // put your setup code here, to run once:}void loop() {  // put your main code here, to run repeatedly:  uint8_t i = 1;  i = i * (-1);  Serial.println(i);}
void setup() {  // put your setup code here, to run once:}void loop() {  // put your main code here, to run repeatedly:  uint8_t i = 1;  i = -i;  Serial.println(i);}

Rezultatul, in ambele cazuri:

Sketch uses 1,788 bytes (5%) of program storage space. Maximum is 32,256 bytes.Global variables use 200 bytes (9%) of dynamic memory, leaving 1,848 bytes for local variables. Maximum is 2,048 bytes.
Editat de Liviu M
Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări