Buon giorno a tutti,
mi presento
Mi chiamo Giuseppe sono un elettronico pensionato.
Mi sono da poco avvicinato al mondo Arduino.
Premetto che il software non e' il mio forte.
Volevo realizzare un termometre higrometro con valvole nizie.
Ho trovato un bel progetto.
Ma compilando il software mi da degli errori.
Essendo io poco esperto, dopo numerose ore, non sono riuscito arisolvere il problema.
Mi rivolgo a voi esperti, se c'e' qualche d'uno che mi aiuti a capire come risolvere il problema.
Allego il codice in questione.
Grazie anticipate.
Problema compilazione sensore DHT
27 messaggi
• Pagina 1 di 3 • 1, 2, 3
0
voti
- Allegati
-
ThermoHygrometer.zip- (2.36 KiB) Scaricato 17 volte
Ultima modifica di
WALTERmwp il 31 dic 2025, 19:06, modificato 3 volte in totale.
Motivazione: Modificato titolo e spostato "quì" da Firmware e programmaazione
Motivazione: Modificato titolo e spostato "quì" da Firmware e programmaazione
0
voti
boiler ha scritto:Benvenuti nel mondo arduino!
[...]
Ogni tanto fa bene dare un'occhiata a queste cose, mi confermano che la scelta di starne alla larga è quella giusta![]()
Però non puoi dare la colpa al micro e al suo contorno HW se ci sono anche cani a scrivere SW... (senza riferimento specifico alla libreria in questione, ovviamente)
Basta selezionare e/o scrivere in proprio.
0
voti
trex450 ha scritto:Mi rivolgo a voi esperti, se c'e' qualche d'uno che mi aiuti a capire come risolvere il problema.
Allego il codice in questione.
Grazie anticipate.
Invece del .zip sarebbe meglio mettere nel post il codice incriminato. Molti non scaricano file non di testo per sicurezza.
0
voti
GioArca67 ha scritto:Però non puoi dare la colpa al micro e al suo contorno HW
Quando parlo di arduino, intendo tutto l'ecosistema, la religione e l'utente-discepolo che ci gravita attorno. L'Atmega328 ha una sua dignità, nulla contro il micro in sè.
0
voti
Salve
chiedo scusa, sono nuovo.
Ecco il codice inriminato:
/*
Thermometer with ZM1000 Nixie and IN-19 Nixie variable
The bargraph IN-9 simulate the analogical thermometer
the sensor is a Dallas DS18B20 1 wire communication chip
Luca Lombardi 19 Mar 2020 Prague
*/
// Libraries to manage the Temprature Sensor Dallas DS18B20
#include <OneWire.h>
#include <DHT.h>
// PWM Katode IN-9 bargraph
#define PWM_pin 9
// OneWire DS18B20 DQ PIN
#define SensorPIN A3
// Humidity DHT11
#define DHT11_PIN 4
// Function Shift Button
#define ShiftFn_PIN 10
/*
* ----------------- Nixie Pin declaration -----------------------
*
* Relative Humidity % simbol
* Decimal point |
* Celsius Symbol | |
* Kelvin symbol | | |
* hundreds of celsius | | | |
* tens of celsius | | | | |
* unit of celsius | | | | | |
*/
const int Nixie[]= {A2, 11, 2, A0, 8, A1, 3};
// K155ID1 BCD port A, B, C, D
const int K155ID1[] = {1, A5, A4, 0};
//DeviceAddress insideThermometer;
byte insideThermometer[] = {0x28, 0xE1, 0x15, 0x67, 0x0B, 0x00, 0x00, 0x79};
// Temperature LED
const int LED[] ={7, 6, 5}; //LED Blue, Green, Red
//--------------------------- Global variables declaration ---------------------
DHT;
int Function = 1;
int digit = 0;
int val = 0;
int LEDcode = 2;
int digits[] = {0, 0, 0};
float tempC = 7.0;
float RH = 50.0;
long lastDebounceTime;
long shiftTime = 6000;
long Start = 0.0;
long dt = 0;
//long Stop = 100;
//------------------------------------------------------------------------------------------------
void setup() {
// Serial.begin(9600);
dallas(SensorPIN,1); //merely start the ball rolling
// sets the pin as output ZM1000 anodes
for (int i = 0; i <= 6; i++) {
pinMode(Nixie[i], OUTPUT);
digitalWrite(Nixie[i], LOW);
}
for (int i = 0; i <= 2; i++){
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], LOW);
}
// Function Shift Button
pinMode(ShiftFn_PIN, INPUT);
// sets the pin as output IN-9 katode
pinMode(PWM_pin, OUTPUT);
// sets the pin as output K155ID1 BCD to decimal and initialize
for (int i = 0; i <=3 ; i++) {
pinMode(K155ID1[i], OUTPUT);
digitalWrite(K155ID1[i], LOW);
}
}
//-----------------------------------------------------------------------
void loop() {
lastDebounceTime = 0;
// Serial.print("Function: ");
// Serial.println(Function);
if (Function == 1) {
// Temperature - deg Celsius
NixieCelsius();
DigiSplit();
DispTemp();}
else if (Function == 2) {
// Temperature - Kelvin
NixieKelvin();
DigiSplit();
DispTemp();}
else if (Function == 3) {
// Relative Humidity
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else if (Function == 4) {
// Continuous display shift of Temp °C --> K
dt = millis() - Start;
if (dt < shiftTime) {
NixieCelsius();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
NixieKelvin();
DigiSplit();
DispTemp();}
else {Start = millis();}}
else if (Function == 5) {
// Continuous display shift of Temp °C --> RH
dt = millis() - Start;
if (dt < shiftTime) {
NixieCelsius();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else {Start = millis();}}
else if (Function == 6) {
// Continuous display shift of Temp K --> RH
dt = millis() - Start;
if (dt < shiftTime) {
NixieKelvin();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else {Start = millis();}}
else if (Function == 7) {
// Continuous display shift of Temp °C --> RH
dt = millis() - Start;
if (dt < shiftTime) {
NixieCelsius();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
NixieKelvin();
DigiSplit();
DispTemp();}
else if ((dt > 2*shiftTime) and (dt < 3*shiftTime)) {
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else {Start = millis();}}
}
void DigiSplit(){
digits[0] = (digit%10);
digits[1] = ((digit/10)%10);
digits[2] = ((digit/100)%10);
}
int16_t dallas(int x, byte start){
OneWire ds(x);
byte i;
byte data[2];
int16_t result;
do {
ds.reset();
ds.write(0xCC); //skip ROM command
ds.write(0xBE); //Read 1st 2 bytes of Screatchpad
for (i = 0 ; i < 2; i++) data[i] = ds.read();
result = (data[1]<<8) | data[0];
// result >>= 4; //reduction to 9 bit
// if (data[1]&128) result|=61440; //if positive force the 4 MSB to 1
// if (data[0]&8) ++result; //round
ds.reset();
ds.write(0xCC); //Skip ROM command
ds.write(0x44,1); //Start Conversion, assuming 5V connected
if (start) delay(1000);
}
while (start--);
return result;
}
void K155ID1call(byte num){
for (int i = 0; i <= 3; i++){
digitalWrite(K155ID1[i], bitRead(num, i));
}
}
void NixieCelsius(){
// Set the Nixie to display Temperature - deg Celsius
if (tempC < 99.95) {
digit = int(tempC * 10.0 + 0.5);
digitalWrite(Nixie[3], HIGH);
digitalWrite(Nixie[4], LOW);
digitalWrite(Nixie[5], HIGH);
digitalWrite(Nixie[6], LOW);
} else {
digit = int(tempC + 0.5);
digitalWrite(Nixie[3], HIGH);
digitalWrite(Nixie[4], LOW);
digitalWrite(Nixie[5], LOW);
digitalWrite(Nixie[6], LOW);
}
}
void NixieKelvin(){
// Set the Nixie to display Temperature - Kelvin
digit = int(tempC + 273.15 + 0.5);
digitalWrite(Nixie[3], LOW);
digitalWrite(Nixie[4], HIGH);
digitalWrite(Nixie[5], LOW);
digitalWrite(Nixie[6], LOW);
}
void NixieRH(){
// Set the Nixie to display Relative Humidity
digit = int(RH * 10 + 0.5);
digitalWrite(Nixie[3], LOW);
digitalWrite(Nixie[4], LOW);
digitalWrite(Nixie[5], HIGH);
digitalWrite(Nixie[6], HIGH);
}
void BarGraph(bool isTemp){
if (isTemp) {
if (tempC < 0.0){
val = int(abs(tempC*5));
LEDcode = 1;}
else if ((tempC < 50.0) and (tempC >= 0.0)){
val = int (tempC*5);
LEDcode = 2;}
else if ((tempC < 100.0) and (tempC >= 50.0)){
val = int((tempC - 50.0)*5);
LEDcode = 4;}
else{
val = int((tempC - 100.0)*5);
LEDcode = 4;}}
else {
val = int(RH * 2.5);
LEDcode = 0;
}
analogWrite(PWM_pin, val);
//-------------- LED light --------------
for (int i = 0; i < 3; i++){
digitalWrite(LED[i], bitRead(LEDcode, i));
}
}
void DispTemp(){
BarGraph(1);
for (int i = 0; i <=63 ; i++) { // 63 produce an update every 1004ms.
for (int j = 0; j <=2 ; j++) {
if (digitalRead(ShiftFn_PIN) == LOW) {
// debounce
do{
if (digitalRead(ShiftFn_PIN) == LOW) {
lastDebounceTime = millis();
}
} while ((millis() - lastDebounceTime) < 20);
Function += 1;
if (Function > 7) {Function = 1;}
if (Function > 3) {Start = millis();}
break;
}
K155ID1call(digits[j]); // send to K155ID1 the digit
digitalWrite(Nixie[j], HIGH);
// every temp reading takes 5-7ms, here used as delay() command
tempC = (float)dallas(SensorPIN,0) / 16.0;
digitalWrite(Nixie[j], LOW);
}
}
}
void DispHumidity(){
BarGraph(0);
for (int i = 0; i <=133 ; i++) { // produce an update every 2s.
for (int j = 0; j <=2 ; j++) {
if (digitalRead(ShiftFn_PIN) == LOW) {
// debounce
do{
if (digitalRead(ShiftFn_PIN) == LOW) {
lastDebounceTime = millis();
}
} while ((millis() - lastDebounceTime) < 20);
Function += 1;
if (Function > 7) {Function = 1;}
if (Function > 3) {Start = millis();}
break;
}
K155ID1call(digits[j]); // send to K155ID1 the digit
digitalWrite(Nixie[j], HIGH);
delay (5);
digitalWrite(Nixie[j], LOW);
}
}
}
Grazie a chi puo' aiutarmi.
Buon anno.
chiedo scusa, sono nuovo.
Ecco il codice inriminato:
/*
Thermometer with ZM1000 Nixie and IN-19 Nixie variable
The bargraph IN-9 simulate the analogical thermometer
the sensor is a Dallas DS18B20 1 wire communication chip
Luca Lombardi 19 Mar 2020 Prague
*/
// Libraries to manage the Temprature Sensor Dallas DS18B20
#include <OneWire.h>
#include <DHT.h>
// PWM Katode IN-9 bargraph
#define PWM_pin 9
// OneWire DS18B20 DQ PIN
#define SensorPIN A3
// Humidity DHT11
#define DHT11_PIN 4
// Function Shift Button
#define ShiftFn_PIN 10
/*
* ----------------- Nixie Pin declaration -----------------------
*
* Relative Humidity % simbol
* Decimal point |
* Celsius Symbol | |
* Kelvin symbol | | |
* hundreds of celsius | | | |
* tens of celsius | | | | |
* unit of celsius | | | | | |
*/
const int Nixie[]= {A2, 11, 2, A0, 8, A1, 3};
// K155ID1 BCD port A, B, C, D
const int K155ID1[] = {1, A5, A4, 0};
//DeviceAddress insideThermometer;
byte insideThermometer[] = {0x28, 0xE1, 0x15, 0x67, 0x0B, 0x00, 0x00, 0x79};
// Temperature LED
const int LED[] ={7, 6, 5}; //LED Blue, Green, Red
//--------------------------- Global variables declaration ---------------------
DHT;
int Function = 1;
int digit = 0;
int val = 0;
int LEDcode = 2;
int digits[] = {0, 0, 0};
float tempC = 7.0;
float RH = 50.0;
long lastDebounceTime;
long shiftTime = 6000;
long Start = 0.0;
long dt = 0;
//long Stop = 100;
//------------------------------------------------------------------------------------------------
void setup() {
// Serial.begin(9600);
dallas(SensorPIN,1); //merely start the ball rolling
// sets the pin as output ZM1000 anodes
for (int i = 0; i <= 6; i++) {
pinMode(Nixie[i], OUTPUT);
digitalWrite(Nixie[i], LOW);
}
for (int i = 0; i <= 2; i++){
pinMode(LED[i], OUTPUT);
digitalWrite(LED[i], LOW);
}
// Function Shift Button
pinMode(ShiftFn_PIN, INPUT);
// sets the pin as output IN-9 katode
pinMode(PWM_pin, OUTPUT);
// sets the pin as output K155ID1 BCD to decimal and initialize
for (int i = 0; i <=3 ; i++) {
pinMode(K155ID1[i], OUTPUT);
digitalWrite(K155ID1[i], LOW);
}
}
//-----------------------------------------------------------------------
void loop() {
lastDebounceTime = 0;
// Serial.print("Function: ");
// Serial.println(Function);
if (Function == 1) {
// Temperature - deg Celsius
NixieCelsius();
DigiSplit();
DispTemp();}
else if (Function == 2) {
// Temperature - Kelvin
NixieKelvin();
DigiSplit();
DispTemp();}
else if (Function == 3) {
// Relative Humidity
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else if (Function == 4) {
// Continuous display shift of Temp °C --> K
dt = millis() - Start;
if (dt < shiftTime) {
NixieCelsius();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
NixieKelvin();
DigiSplit();
DispTemp();}
else {Start = millis();}}
else if (Function == 5) {
// Continuous display shift of Temp °C --> RH
dt = millis() - Start;
if (dt < shiftTime) {
NixieCelsius();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else {Start = millis();}}
else if (Function == 6) {
// Continuous display shift of Temp K --> RH
dt = millis() - Start;
if (dt < shiftTime) {
NixieKelvin();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else {Start = millis();}}
else if (Function == 7) {
// Continuous display shift of Temp °C --> RH
dt = millis() - Start;
if (dt < shiftTime) {
NixieCelsius();
DigiSplit();
DispTemp();}
else if ((dt > shiftTime) and (dt < 2*shiftTime)) {
NixieKelvin();
DigiSplit();
DispTemp();}
else if ((dt > 2*shiftTime) and (dt < 3*shiftTime)) {
int chk = DHT.read11(DHT11_PIN);
RH = DHT.humidity;
NixieRH();
DigiSplit();
DispHumidity();}
else {Start = millis();}}
}
void DigiSplit(){
digits[0] = (digit%10);
digits[1] = ((digit/10)%10);
digits[2] = ((digit/100)%10);
}
int16_t dallas(int x, byte start){
OneWire ds(x);
byte i;
byte data[2];
int16_t result;
do {
ds.reset();
ds.write(0xCC); //skip ROM command
ds.write(0xBE); //Read 1st 2 bytes of Screatchpad
for (i = 0 ; i < 2; i++) data[i] = ds.read();
result = (data[1]<<8) | data[0];
// result >>= 4; //reduction to 9 bit
// if (data[1]&128) result|=61440; //if positive force the 4 MSB to 1
// if (data[0]&8) ++result; //round
ds.reset();
ds.write(0xCC); //Skip ROM command
ds.write(0x44,1); //Start Conversion, assuming 5V connected
if (start) delay(1000);
}
while (start--);
return result;
}
void K155ID1call(byte num){
for (int i = 0; i <= 3; i++){
digitalWrite(K155ID1[i], bitRead(num, i));
}
}
void NixieCelsius(){
// Set the Nixie to display Temperature - deg Celsius
if (tempC < 99.95) {
digit = int(tempC * 10.0 + 0.5);
digitalWrite(Nixie[3], HIGH);
digitalWrite(Nixie[4], LOW);
digitalWrite(Nixie[5], HIGH);
digitalWrite(Nixie[6], LOW);
} else {
digit = int(tempC + 0.5);
digitalWrite(Nixie[3], HIGH);
digitalWrite(Nixie[4], LOW);
digitalWrite(Nixie[5], LOW);
digitalWrite(Nixie[6], LOW);
}
}
void NixieKelvin(){
// Set the Nixie to display Temperature - Kelvin
digit = int(tempC + 273.15 + 0.5);
digitalWrite(Nixie[3], LOW);
digitalWrite(Nixie[4], HIGH);
digitalWrite(Nixie[5], LOW);
digitalWrite(Nixie[6], LOW);
}
void NixieRH(){
// Set the Nixie to display Relative Humidity
digit = int(RH * 10 + 0.5);
digitalWrite(Nixie[3], LOW);
digitalWrite(Nixie[4], LOW);
digitalWrite(Nixie[5], HIGH);
digitalWrite(Nixie[6], HIGH);
}
void BarGraph(bool isTemp){
if (isTemp) {
if (tempC < 0.0){
val = int(abs(tempC*5));
LEDcode = 1;}
else if ((tempC < 50.0) and (tempC >= 0.0)){
val = int (tempC*5);
LEDcode = 2;}
else if ((tempC < 100.0) and (tempC >= 50.0)){
val = int((tempC - 50.0)*5);
LEDcode = 4;}
else{
val = int((tempC - 100.0)*5);
LEDcode = 4;}}
else {
val = int(RH * 2.5);
LEDcode = 0;
}
analogWrite(PWM_pin, val);
//-------------- LED light --------------
for (int i = 0; i < 3; i++){
digitalWrite(LED[i], bitRead(LEDcode, i));
}
}
void DispTemp(){
BarGraph(1);
for (int i = 0; i <=63 ; i++) { // 63 produce an update every 1004ms.
for (int j = 0; j <=2 ; j++) {
if (digitalRead(ShiftFn_PIN) == LOW) {
// debounce
do{
if (digitalRead(ShiftFn_PIN) == LOW) {
lastDebounceTime = millis();
}
} while ((millis() - lastDebounceTime) < 20);
Function += 1;
if (Function > 7) {Function = 1;}
if (Function > 3) {Start = millis();}
break;
}
K155ID1call(digits[j]); // send to K155ID1 the digit
digitalWrite(Nixie[j], HIGH);
// every temp reading takes 5-7ms, here used as delay() command
tempC = (float)dallas(SensorPIN,0) / 16.0;
digitalWrite(Nixie[j], LOW);
}
}
}
void DispHumidity(){
BarGraph(0);
for (int i = 0; i <=133 ; i++) { // produce an update every 2s.
for (int j = 0; j <=2 ; j++) {
if (digitalRead(ShiftFn_PIN) == LOW) {
// debounce
do{
if (digitalRead(ShiftFn_PIN) == LOW) {
lastDebounceTime = millis();
}
} while ((millis() - lastDebounceTime) < 20);
Function += 1;
if (Function > 7) {Function = 1;}
if (Function > 3) {Start = millis();}
break;
}
K155ID1call(digits[j]); // send to K155ID1 the digit
digitalWrite(Nixie[j], HIGH);
delay (5);
digitalWrite(Nixie[j], LOW);
}
}
}
Grazie a chi puo' aiutarmi.
Buon anno.
0
voti
trex450 ha scritto:Buon giorno a tutti,
mi presento
Mi chiamo Giuseppe sono un elettronico pensionato.
Mi sono da poco avvicinato al mondo Arduino.
Premetto che il software non e' il mio forte.
Volevo realizzare un termometre higrometro con valvole nizie.
Ho trovato un bel progetto.
Ma compilando il software mi da degli errori.
Essendo io poco esperto, dopo numerose ore, non sono riuscito arisolvere il problema.
Mi rivolgo a voi esperti, se c'e' qualche d'uno che mi aiuti a capire come risolvere il problema.
Allego il codice in questione.
Grazie anticipate.
Io non scarico zip
Se credi metti qualche link e qualche info tecnica, ma in chiaro
Poi vedremo se si può fare qualcosa
PS
Buon anno a tutti
Edit
Già fatto...
-

standardoil
547 2 4 - Stabilizzato

- Messaggi: 420
- Iscritto il: 15 lug 2022, 19:14
0
voti
Ho aggiunto anche il link.
https://www.instructables.com/Nixie-The ... uino-Nano/
Grazie ancora.
Buon Anno a tutti
https://www.instructables.com/Nixie-The ... uino-Nano/
Grazie ancora.
Buon Anno a tutti
0
voti
Due cose:
Esattamente che errore ti dà?
Copialo e incollalo, non descriverlo
E poi, forse sarebbe il caso di aprire una discussione apposta, non attaccarsi a una vecchia
Esattamente che errore ti dà?
Copialo e incollalo, non descriverlo
E poi, forse sarebbe il caso di aprire una discussione apposta, non attaccarsi a una vecchia
-

standardoil
547 2 4 - Stabilizzato

- Messaggi: 420
- Iscritto il: 15 lug 2022, 19:14
0
voti
Ma leggi i post?
Lo ha scritto all'inizio.
Per l'OP
Il problema, come per altro già fatto notare, è nella libreria e non nel codice tuo.
Modifica la libreria (basta il .h) come ti hanno già suggerito.
Lo ha scritto all'inizio.
Per l'OP
Il problema, come per altro già fatto notare, è nella libreria e non nel codice tuo.
Modifica la libreria (basta il .h) come ti hanno già suggerito.
0
voti
Salve
come dicevo sopra,
sono nuovo del forum.
Mi leggero' bene le regole.
Abbiate pazienza.
Allego foto dell'errore:
come dicevo sopra,
sono nuovo del forum.
Mi leggero' bene le regole.
Abbiate pazienza.
Allego foto dell'errore:
27 messaggi
• Pagina 1 di 3 • 1, 2, 3
Chi c’è in linea
Visitano il forum: Nessuno e 5 ospiti

Elettrotecnica e non solo (admin)
Un gatto tra gli elettroni (IsidoroKZ)
Esperienza e simulazioni (g.schgor)
Moleskine di un idraulico (RenzoDF)
Il Blog di ElectroYou (webmaster)
Idee microcontrollate (TardoFreak)
PICcoli grandi PICMicro (Paolino)
Il blog elettrico di carloc (carloc)
DirtEYblooog (dirtydeeds)
Di tutto... un po' (jordan20)
AK47 (lillo)
Esperienze elettroniche (marco438)
Telecomunicazioni musicali (clavicordo)
Automazione ed Elettronica (gustavo)
Direttive per la sicurezza (ErnestoCappelletti)
EYnfo dall'Alaska (mir)
Apriamo il quadro! (attilio)
H7-25 (asdf)
Passione Elettrica (massimob)
Elettroni a spasso (guidob)
Bloguerra (guerra)



