vasile eugen Postat Februarie 22, 2015 Partajează Postat Februarie 22, 2015 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
Elison Postat Februarie 22, 2015 Partajează Postat Februarie 22, 2015 (editat) Tu folosesti pinul 2 atat pentru DHT11, cat si pentru LCD.Ar fi bine sa postezi si o schema de conectare pentru LCD. Editat Februarie 22, 2015 de Elison Link spre comentariu
vasile eugen Postat Februarie 22, 2015 Autor Partajează Postat Februarie 22, 2015 mersi am sa modific sa am s vad Link spre comentariu
niq_ro Postat Februarie 22, 2015 Partajează Postat Februarie 22, 2015 pune erorile.. ai librariile alea mentionate in sketch? DHT11 si LiquidCrystal ? Link spre comentariu
vasile eugen Postat Februarie 22, 2015 Autor Partajează Postat Februarie 22, 2015 Da le am .Eu sunt cel care va mai cere sfaturi si pe facebook.com.Am gasit un alt cod care imi merge. Link spre comentariu
Xaby Postat Decembrie 17, 2015 Partajează Postat Decembrie 17, 2015 (editat) 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 Decembrie 17, 2015 de Xaby Link spre comentariu
rlodina Postat Decembrie 17, 2015 Partajează Postat Decembrie 17, 2015 (editat) ... 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 Decembrie 17, 2015 de rlodina Link spre comentariu
Xaby Postat Decembrie 17, 2015 Partajează Postat Decembrie 17, 2015 Am adaugat linia noua acum este ok cand valoarea este pozitiva(apare 09.5). Problema este cand temperatura este negativa. Atunci imi apare -9.5 si nu -09.5. Cum fac si la valori negative? Link spre comentariu
Xaby Postat Decembrie 18, 2015 Partajează Postat Decembrie 18, 2015 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
mars01 Postat Decembrie 18, 2015 Partajează Postat Decembrie 18, 2015 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
Liviu M Postat Decembrie 18, 2015 Partajează Postat Decembrie 18, 2015 (editat) De ce nu grupezi cele doo if(temp1<0)? In rest, dupa parerea mea, cele doua variante sunt perfect identice. Cand scrii temp1 = -temp1 compilatorul face pentru tine fix operatia temp1=temp1*(-1). Cel putin asa cred. Editat Decembrie 18, 2015 de Liviu M Link spre comentariu
Xaby Postat Decembrie 18, 2015 Partajează Postat Decembrie 18, 2015 (editat) Diferenta este ca metoda a doua multiplica. Inclin sa cred ca prima metoda ocupa mai putin memorie.Cum sa-l grupez? Editat Decembrie 18, 2015 de Xaby Link spre comentariu
Liviu M Postat Decembrie 18, 2015 Partajează Postat Decembrie 18, 2015 (editat) 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 Decembrie 18, 2015 de Liviu M Link spre comentariu
Xaby Postat Decembrie 18, 2015 Partajează Postat Decembrie 18, 2015 (editat) Acum am inteles. Multumesc la toti pentru explicatie si ajutorul acordat. Editat Decembrie 18, 2015 de Xaby Link spre comentariu
Postări Recomandate
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 contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum