Torna indietro   BaroneRosso.it - Forum Modellismo > Elettronica > Circuiti Elettronici


Rispondi
 
Strumenti discussione Visualizzazione
Vecchio 13 maggio 17, 18:09   #11 (permalink)  Top
User
 
L'avatar di aero330
 
Data registr.: 03-09-2012
Residenza: Gubbio-Ravenna
Messaggi: 1.771
Con il seguente codice visualizzi alternativamente temperatura/umidità e ora/data ogni 0,5s....cambia il valore del delay a tuo piacere.
*nota che ho spostato alcune righe di codice dal setup al loop per riscrivere tutte le volte temp/umidità

Codice:
#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include "DHT.h"

#define DHTPIN 8   // 8 è il pin di Arduino a cui collego il sensore di temperatura
#define DHTTYPE DHT11  // dht11 è il tipo di sensore che uso

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)

char buffer1[20];
char buffer2[20];

RTC_DS1307 RTC;

const int setpin = 6;
boolean statepin = 0;
int t;
int h;

void setup() {
	lcd.begin(16, 2); // imposto il tipo di display (colonne, righe)
	lcd.setCursor(0,0);

	pinMode (6, INPUT);
	digitalWrite (6, HIGH);

	Wire.begin();
	RTC.begin();

	if (! RTC.isrunning()) {
	RTC.adjust(DateTime(__DATE__, __TIME__));
	}
}

void loop() {
	
	
	t = dht.readTemperature();
	h = dht.readHumidity();  // posiziono il cursore alla colonna 12 e riga 0
	
	lcd.print("Temperatura");
	lcd.setCursor(0,1);
	lcd.print("Umidita'");
	lcd.setCursor(15,0);
	lcd.print("C");
	lcd.setCursor(15,1);
	lcd.print("%");
	lcd.setCursor(12, 0);
	lcd.print(t);
	lcd.setCursor(12, 1);
	lcd.print(h);
	
	delay(500);	
	
	lcd.clear();   //pulisce tutto lo schermo e cursore in alto a sinistra (0,0)
	
	statepin = digitalRead (setpin);
	if (statepin == LOW)
	{
		RTC.adjust(DateTime(__DATE__, __TIME__));
	}
	
	DateTime now = RTC.now();
	sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
	lcd.setCursor(0,0);
	lcd.print( buffer1 );
	sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
	lcd.setCursor(0,1);
	lcd.print( buffer2 );

	delay(500);

	lcd.clear();
}
Per i transistor è indifferente, ho controllato i datasheet e sono pressochè identici
__________________
Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat
Sito Web: https://sites.google.com/site/curtmansquadroncombat/
aero330 non è collegato   Rispondi citando
Vecchio 13 maggio 17, 18:23   #12 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da aero330 Visualizza messaggio
Con il seguente codice visualizzi alternativamente temperatura/umidità e ora/data ogni 0,5s....cambia il valore del delay a tuo piacere.
*nota che ho spostato alcune righe di codice dal setup al loop per riscrivere tutte le volte temp/umidità

Codice:
#include <DHT.h>
#include <Wire.h>
#include <RTClib.h>
#include <LiquidCrystal.h>
#include "DHT.h"

#define DHTPIN 8   // 8 è il pin di Arduino a cui collego il sensore di temperatura
#define DHTTYPE DHT11  // dht11 è il tipo di sensore che uso

DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal lcd(12, 11, 5, 4, 3, 2); // connessione display (pin)

char buffer1[20];
char buffer2[20];

RTC_DS1307 RTC;

const int setpin = 6;
boolean statepin = 0;
int t;
int h;

void setup() {
	lcd.begin(16, 2); // imposto il tipo di display (colonne, righe)
	lcd.setCursor(0,0);

	pinMode (6, INPUT);
	digitalWrite (6, HIGH);

	Wire.begin();
	RTC.begin();

	if (! RTC.isrunning()) {
	RTC.adjust(DateTime(__DATE__, __TIME__));
	}
}

void loop() {
	
	
	t = dht.readTemperature();
	h = dht.readHumidity();  // posiziono il cursore alla colonna 12 e riga 0
	
	lcd.print("Temperatura");
	lcd.setCursor(0,1);
	lcd.print("Umidita'");
	lcd.setCursor(15,0);
	lcd.print("C");
	lcd.setCursor(15,1);
	lcd.print("%");
	lcd.setCursor(12, 0);
	lcd.print(t);
	lcd.setCursor(12, 1);
	lcd.print(h);
	
	delay(500);	
	
	lcd.clear();   //pulisce tutto lo schermo e cursore in alto a sinistra (0,0)
	
	statepin = digitalRead (setpin);
	if (statepin == LOW)
	{
		RTC.adjust(DateTime(__DATE__, __TIME__));
	}
	
	DateTime now = RTC.now();
	sprintf(buffer1,  "%02d:%02d:%02d", now.hour(), now.minute(), now.second());
	lcd.setCursor(0,0);
	lcd.print( buffer1 );
	sprintf(buffer2,  "%02d/%02d/%d", now.day(), now.month(), now.year());
	lcd.setCursor(0,1);
	lcd.print( buffer2 );

	delay(500);

	lcd.clear();
}
Per i transistor è indifferente, ho controllato i datasheet e sono pressochè identici
Grazie mille e gentilissimo! ti sarebbe possibile spiegarmi in parole povere come bisogna procedere nel codice? Facendo copia e incolla non imparerò mai una fava

ps. da quel poco che ho capito, hai semplicemente messo un delay(500) ?
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA

Ultima modifica di andore : 13 maggio 17 alle ore 18:27
andore non è collegato   Rispondi citando
Vecchio 13 maggio 17, 18:26   #13 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
Non conosco molto il linguaggio wire, quindi non posso essere molto d'aiuto, però inizia a togliere il primo "#include <DHT.h>" anche se il compilatore non da errore la duplicazione degli include è bene evitarla e se non erro il primo #include è bene che sia il <wire.h>

Però aspetta quelli che ne sanno più di me.

__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 13 maggio 17, 18:41   #14 (permalink)  Top
User
 
L'avatar di ElNonino
 
Data registr.: 06-05-2007
Residenza: Tre Ville (Preore)
Messaggi: 3.605
Invia un messaggio via MSN a ElNonino
ripeto perchè fuori tempo massimo per l'editazione.....

Non conosco molto il linguaggio wire, quindi non posso essere molto d'aiuto, però inizia a togliere il primo "#include <DHT.h>" anche se il compilatore non da errore la duplicazione degli include è bene evitarla e se non erro il primo #include è bene che sia il <wire.h>

Però aspetta quelli che ne sanno più di me.

Per fare in modo che ogni tot di tempo il display mostri dati diversi devi usare una variabile bool che passa da 0 ad 1 a 0 a 1 ad ogni giro, chiamiamola tic, quindi alla fine del loop metterai tic != tic (o tic not tic) non so come sia la sintassi corretta.

Quindi se inizializzi tic a 0 con tic = 0 prima di entrare nel loop al termine del primo giro tic varrà 1, al giro successivo sarà = a 0 e via di seguito.

All'interno del loop ti basterà implementare un if tipo
if tic = 0
display temperatura
else
display time

se dovessero servirti più display basterà che usi per tic una variabile byte che incrementerai ad ogni giro ed azzererai quando giro varrà giro +1:
tic = 0

switch tic
tic = 0: display temp
tic = 1 display time
tic = 2 display humidity
........
tic = 10 display hello

tic = tic + 1
if tic = 11 then tic = 0

è uno pseudo codice da adattare al linguaggio usato

poi ci sono metodi più furbi per fare il tutto specialmente se il numero di display da visualizzare è multiplo di 2.
__________________
Peace & Love
Fate le cose nel modo più semplice possibile, ma senza semplificare. (A. Einstein)
ElNonino non è collegato   Rispondi citando
Vecchio 13 maggio 17, 18:41   #15 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
Non conosco molto il linguaggio wire, quindi non posso essere molto d'aiuto, però inizia a togliere il primo "#include <DHT.h>" anche se il compilatore non da errore la duplicazione degli include è bene evitarla e se non erro il primo #include è bene che sia il <wire.h>

Però aspetta quelli che ne sanno più di me.

In effetti non l'avevo notato e di fatti il DHT sul codice lo segna in nero, quindi non l'ha preso in considerazione, l'ho appena tolto e funziona tutto normalmente.

La posizione degli #include non è indifferente? Se no, perchè?

Grazie anche a te nonino

Almeno quando sarà finito potrà essere di sicuro utile a qualcun'altro
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 13 maggio 17, 20:05   #16 (permalink)  Top
User
 
L'avatar di aero330
 
Data registr.: 03-09-2012
Residenza: Gubbio-Ravenna
Messaggi: 1.771
Citazione:
Originalmente inviato da andore Visualizza messaggio
In effetti non l'avevo notato e di fatti il DHT sul codice lo segna in nero, quindi non l'ha preso in considerazione, l'ho appena tolto e funziona tutto normalmente.

La posizione degli #include non è indifferente? Se no, perchè?

Grazie anche a te nonino

Almeno quando sarà finito potrà essere di sicuro utile a qualcun'altro
Confermo quanto detto da ElNonino (anche a me era sfuggito il DHT)

La posizione degli" include" alcune volte non è casuale ma sistemata in maniera opportuna, questo perchè, facendotela corta, in alcuni file header (quelli con estensione .h per l'appunto) sono contenute variabili (o altro) che sono definite/dichiarate in altri file .h

Il discorso è più complesso ma cerco di farti un esempio molto banale e terra terra:
Lavori in pizzeria e devi recapitare delle pizze (senza mangiartele ) ad un certo Andrea, Matteo, Alessia, Marta.....tu non hai la ben minima idea di chi siano e dove abitano per cui rimani fermo dove sei

Supponi ora, lo stesso scenario, ma questa volta prima ti viene riferito che

Andrea: sta al 3 piano di via XX
Marta: via YY
Matteo: piazza ZZ
Alessia: viale TT

per cui le pizze giungeranno ai clienti perchè a priori qualcuno ti ha dato delle informazioni aggiuntive !!

Ecco, nel mondo della programmazione, avviene qualcosa di simile. Se scambi di posto due #include può accadere che il compilatore (quello che verifica la corretta sintassi del codice, detto mooooooooooolto semplicemente) si trovi a dover gestire delle situazioni in cui non ha abbastanza informazioni per proseguire il controllo del codice. Anche se queste vengono fornite a psteriori non c'è nulla da fare, vanno date prima che queste vengano utilizzate.

Non pretendo che tu abbia capito, ma spero di essermi spiegato

Per il codice che ti ho scritto:
Premessa: devi pensare l'arduino, o meglio, il microntrollore a bordo della scheda Arduino, come un robot che esegue gli ordini (istruzioni di codice) che gli dai esattamente nell'ordine in cui le scrivi. Lui le mette in pratica senza fiatare in sequenza una dopo l'altro.

All'inizio del codice si includono le librerie necessarie per poter mettere in comunicazione la scheda con i sensori/oggetti esterni, nel tuo caso sensore, display e orologio.

Poi, in genere, la dichiarazione delle variabili che andranno utilizzate nel resto del codice

Nella funzione void setup() va scritto tutto quello che serve per configurare le porte della scheda come input/output, inizializzazione delle periferiche (display, sensore...), ovvero prepare Arduino a svolgere il lavoro pesante successivamente (vedila come una sorta d riscaldamento prima della partita)

Poi la parte principale del codice (nella programmazione in genere si chiama "main") espressa dalla funzione void loop() che viene eseguita ciclicamente fino a che non si interrompe l'alimentazione dalla scheda.
E' qui dentro che va scritto tutto quello che ti passa per la testa per il tuo progetto.
Nel caso specifico, quello che ho fatto, è stato leggere il sensore e riportare su display i valori di temperatura e umidità, attendere 500ms, pulire completamente il display e scrivere queta volta il valore di data/ora, attendere 500ms, pulire il display e ricominciare da capo con temperatura ecc ecc.
In pratica non ho fatto altro che riportare il mio pensiero logico in istruzioni macchina.

Ricorda questo: non esiste un unico modo per scrivere codice, possono esserci infiniti modi, chi lo scrive in 5 righe chi in 50, funziona tutto solo che il primo ha ottimizzato

Come si fa ad acquisire tutto ciò? Esperienza

Ho risposto un po' alla tua domanda?

P.s. valida anche la struttura switch/case di Elnonino ma siccome sei a digiuno di programmazione ho fatto le cose semplici semplici
__________________
Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat
Sito Web: https://sites.google.com/site/curtmansquadroncombat/
aero330 non è collegato   Rispondi citando
Vecchio 13 maggio 17, 23:08   #17 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da aero330 Visualizza messaggio
Confermo quanto detto da ElNonino (anche a me era sfuggito il DHT)

La posizione degli" include" alcune volte non è casuale ma sistemata in maniera opportuna, questo perchè, facendotela corta, in alcuni file header (quelli con estensione .h per l'appunto) sono contenute variabili (o altro) che sono definite/dichiarate in altri file .h

Il discorso è più complesso ma cerco di farti un esempio molto banale e terra terra:
Lavori in pizzeria e devi recapitare delle pizze (senza mangiartele ) ad un certo Andrea, Matteo, Alessia, Marta.....tu non hai la ben minima idea di chi siano e dove abitano per cui rimani fermo dove sei

Supponi ora, lo stesso scenario, ma questa volta prima ti viene riferito che

Andrea: sta al 3 piano di via XX
Marta: via YY
Matteo: piazza ZZ
Alessia: viale TT

per cui le pizze giungeranno ai clienti perchè a priori qualcuno ti ha dato delle informazioni aggiuntive !!

Ecco, nel mondo della programmazione, avviene qualcosa di simile. Se scambi di posto due #include può accadere che il compilatore (quello che verifica la corretta sintassi del codice, detto mooooooooooolto semplicemente) si trovi a dover gestire delle situazioni in cui non ha abbastanza informazioni per proseguire il controllo del codice. Anche se queste vengono fornite a psteriori non c'è nulla da fare, vanno date prima che queste vengano utilizzate.

Non pretendo che tu abbia capito, ma spero di essermi spiegato

Per il codice che ti ho scritto:
Premessa: devi pensare l'arduino, o meglio, il microntrollore a bordo della scheda Arduino, come un robot che esegue gli ordini (istruzioni di codice) che gli dai esattamente nell'ordine in cui le scrivi. Lui le mette in pratica senza fiatare in sequenza una dopo l'altro.

All'inizio del codice si includono le librerie necessarie per poter mettere in comunicazione la scheda con i sensori/oggetti esterni, nel tuo caso sensore, display e orologio.

Poi, in genere, la dichiarazione delle variabili che andranno utilizzate nel resto del codice

Nella funzione void setup() va scritto tutto quello che serve per configurare le porte della scheda come input/output, inizializzazione delle periferiche (display, sensore...), ovvero prepare Arduino a svolgere il lavoro pesante successivamente (vedila come una sorta d riscaldamento prima della partita)

Poi la parte principale del codice (nella programmazione in genere si chiama "main") espressa dalla funzione void loop() che viene eseguita ciclicamente fino a che non si interrompe l'alimentazione dalla scheda.
E' qui dentro che va scritto tutto quello che ti passa per la testa per il tuo progetto.
Nel caso specifico, quello che ho fatto, è stato leggere il sensore e riportare su display i valori di temperatura e umidità, attendere 500ms, pulire completamente il display e scrivere queta volta il valore di data/ora, attendere 500ms, pulire il display e ricominciare da capo con temperatura ecc ecc.
In pratica non ho fatto altro che riportare il mio pensiero logico in istruzioni macchina.

Ricorda questo: non esiste un unico modo per scrivere codice, possono esserci infiniti modi, chi lo scrive in 5 righe chi in 50, funziona tutto solo che il primo ha ottimizzato

Come si fa ad acquisire tutto ciò? Esperienza

Ho risposto un po' alla tua domanda?

P.s. valida anche la struttura switch/case di Elnonino ma siccome sei a digiuno di programmazione ho fatto le cose semplici semplici
Ti sei spiegato benissimo!

però diciamo che non sono proprio a digiuno di programmazione, sono agli inizi di html5, javascript, css ma, diciamo proprio alla prima portata dell'antipasto

Per cui detto questo, purtroppo alcune cose ancora mi sfuggono e ancora non riesco a integrarmi, destreggiarmi e ragionare con metodo nei vari linguaggi

Veramente grazie per la tua disponibilità
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 13 maggio 17, 23:34   #18 (permalink)  Top
User
 
L'avatar di aliante88
 
Data registr.: 20-04-2009
Residenza: torino
Messaggi: 77
Citazione:
Originalmente inviato da andore Visualizza messaggio
Ti sei spiegato benissimo!

però diciamo che non sono proprio a digiuno di programmazione, sono agli inizi di html5, javascript, css ma, diciamo proprio alla prima portata dell'antipasto

Per cui detto questo, purtroppo alcune cose ancora mi sfuggono e ancora non riesco a integrarmi, destreggiarmi e ragionare con metodo nei vari linguaggi

Veramente grazie per la tua disponibilità
__________________
Non smettiamo di giocare perchè invecchiamo,
invecchiamo perchè smettiamo di giocare.
aliante88 non è collegato   Rispondi citando
Vecchio 13 maggio 17, 23:36   #19 (permalink)  Top
User
 
L'avatar di andore
 
Data registr.: 20-04-2009
Residenza: Potenza
Messaggi: 934
Citazione:
Originalmente inviato da ElNonino Visualizza messaggio
ripeto perchè fuori tempo massimo per l'editazione.....

Non conosco molto il linguaggio wire, quindi non posso essere molto d'aiuto, però inizia a togliere il primo "#include <DHT.h>" anche se il compilatore non da errore la duplicazione degli include è bene evitarla e se non erro il primo #include è bene che sia il <wire.h>

Però aspetta quelli che ne sanno più di me.

Per fare in modo che ogni tot di tempo il display mostri dati diversi devi usare una variabile bool che passa da 0 ad 1 a 0 a 1 ad ogni giro, chiamiamola tic, quindi alla fine del loop metterai tic != tic (o tic not tic) non so come sia la sintassi corretta.

Quindi se inizializzi tic a 0 con tic = 0 prima di entrare nel loop al termine del primo giro tic varrà 1, al giro successivo sarà = a 0 e via di seguito.

All'interno del loop ti basterà implementare un if tipo
if tic = 0
display temperatura
else
display time

se dovessero servirti più display basterà che usi per tic una variabile byte che incrementerai ad ogni giro ed azzererai quando giro varrà giro +1:
tic = 0

switch tic
tic = 0: display temp
tic = 1 display time
tic = 2 display humidity
........
tic = 10 display hello

tic = tic + 1
if tic = 11 then tic = 0

è uno pseudo codice da adattare al linguaggio usato

poi ci sono metodi più furbi per fare il tutto specialmente se il numero di display da visualizzare è multiplo di 2.
Ti ringrazio ElNonino sei stato chiaro anche te, diciamo che vedendo il risultato pratico, poi leggere e capire lo script mi è risultato molto più facile

magari ora devo capire solo come far partire il motore DC in maniera pratica perchè, ho fatto una prova separatamente e non parte, forse mi serve energia aggiuntiva vero?

Intanto questo è lo schema che ho fatto, manca solo sto motore che non saprei come montarlo io avevo pensato di mettere il negativo al pin 7 o pin 13 e il positivo che va al modulo di energia aggiuntivo più alla 5v del pin di arduino. Faccio la cazzata o è esatto?

Per il codice invece era quello di aggiungere la variabile (i) e se non sbaglio il motore DC va da 0 a 250 quindi, se per esempio la temperatura supera i 32 C° allora di accende il motore con la ventola, altrimenti rimane spento.
__________________
FIUMI DI PENSIERI VAGANO NELLA MIA MENTE IGNORANDO LA PERCEZIONE DELLA REALTA' IMPOSTA
andore non è collegato   Rispondi citando
Vecchio 14 maggio 17, 02:21   #20 (permalink)  Top
User
 
L'avatar di aero330
 
Data registr.: 03-09-2012
Residenza: Gubbio-Ravenna
Messaggi: 1.771
Citazione:
Originalmente inviato da andore Visualizza messaggio
Ti sei spiegato benissimo!

però diciamo che non sono proprio a digiuno di programmazione, sono agli inizi di html5, javascript, css ma, diciamo proprio alla prima portata dell'antipasto

Per cui detto questo, purtroppo alcune cose ancora mi sfuggono e ancora non riesco a integrarmi, destreggiarmi e ragionare con metodo nei vari linguaggi

Veramente grazie per la tua disponibilità
E che ci sta a fare il forum
__________________
Divertirsi insieme e con poco? Prova il combat! Curtman Squadron Combat
Sito Web: https://sites.google.com/site/curtmansquadroncombat/
aero330 non è collegato   Rispondi citando
Rispondi

Bookmarks



Strumenti discussione
Visualizzazione

Regole di scrittura
Non puoi creare nuove discussioni
Non puoi rispondere alle discussioni
Non puoi inserire allegati
Non puoi modificare i tuoi messaggi

BB code è Attivato
Le faccine sono Attivato
Il codice [IMG] è Attivato
Il codice HTML è Disattivato
Trackbacks è Disattivato
Pingbacks è Disattivato
Refbacks è Disattivato


Discussioni simili
Discussione Autore discussione Forum Commenti Ultimo Commento
arduino uno e ..... FLYTS Circuiti Elettronici 3 23 settembre 14 15:50



Tutti gli orari sono GMT +2. Adesso sono le 22:52.


Basato su: vBulletin versione 3.8.11
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
E' vietata la riproduzione, anche solo in parte, di contenuti e grafica. Copyright 1998/2019 - K-Bits P.I. 09395831002