Печать доступна с помощью U8GLib
У меня есть этот код, который берет значения температуры и влажности от датчика DHT11 и количество граней из внешнего кода python и печатает их на OLED-экране, но вместо значений переменных он продолжает печатать 0, как я могу это решить? (К сожалению, некоторые части не на английском языке, но просто рассматривайте их как имена случайных величин.)
//dht11 kodu için ayarlamalar
#include <dht.h>
dht DHT;
#define DHT11_PIN 7
//ekran için ayarlamalar
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);
char bufferX [20];
char bufferY [20];
char bufferZ [20];
//fan kodu için ayarlamalar
int mot1 = 8;
int mot2 = 9;
int en1 = 10;
int dir = 6;
bool state = true;
int nob = A0;
int val = 0;
int fan_hizi = 0;
String faces_str;
int faces;
float sicaklik;
float nem;
void draw(void)
{
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 15, bufferX);
u8g.drawStr( 0, 30, bufferX);
u8g.drawStr( 0, 45, bufferY);
u8g.drawStr( 0, 60, bufferZ);
}
void setup() {
Serial.begin(9600); //iletişim ve dht11 verisi
// pin ayarları
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(en1,OUTPUT);
pinMode(dir,INPUT_PULLUP);
}
void loop() {
//dht11 kodu
sicaklik = DHT.temperature;
nem = DHT.humidity;
delay(1000);
//iletişim kodu
if(Serial.available() > 0) {
faces_str = Serial.readString();
faces = faces_str.toInt();
}
Serial.print(faces);
//sınırlar
if(faces == 0 && sicaklik < 25 && nem < 65) {
fan_hizi = 50;
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
}
if(faces >= 1 || sicaklik >= 25 || nem >= 65) {
fan_hizi = 250;
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
}
//ekran
sprintf(bufferX, "Yuzler: %d", faces);
sprintf(bufferY, "Sicaklik: %d", sicaklik);
sprintf(bufferZ, "Nem: %d", nem);
u8g.firstPage();
do {
draw();
}
while ( u8g.nextPage() );
delay(10);
//fan kodu
analogWrite(en1, fan_hizi);
digitalWrite(mot1, HIGH);
digitalWrite(mot2, LOW);
delay(1000);
digitalWrite(mot1, LOW);
}
@vueenx, 👍1
Обсуждение1 ответ
Я не понимаю, как вы инициализируете объект датчика DHT. (Интересно, почему это вообще компилируется?)
Ваш путь:
//dht11 kodu için ayarlamalar
#include <dht.h>
dht DHT;
#define DHT11_PIN 7
Я бы использовал:
//dht11 kodu için ayarlamalar
#include <DHT.h>
#define DHT11_PIN 7
DHT dht( DHT11_PIN, DHT11 );
Не забудьте начать объект DHT с:
void setup() {
// ... код удален для краткости
dht.begin();
}
Теперь используйте объект dht
instad класса DHT.
sicaklik = dht.readTemperature();
nem = dht.readHumidity();
Вы не указали, какие библиотеки вы использовали. Но я перепробовал все библиотеки DHT, которые смог найти, и ни одна из них не скомпилировалась с вашим кодом без ошибок.
Следующий код компилируется в моей IDE для arduino UNO с установленной библиотекой датчиков olivers ug8lib и adafruits DHT. Кстати: Вы даже не упомянули Arduino/ESP, который вы использовали. Так что я думаю, что это Uno.
//dht11 kodu için ayarlamalar
#include "DHT.h"
#define DHT11_PIN 7
DHT dht( DHT11_PIN, DHT11 );
//ekran için ayarlamalar
#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE | U8G_I2C_OPT_DEV_0);
char bufferX [20];
char bufferY [20];
char bufferZ [20];
//fan kodu için ayarlamalar
int mot1 = 8;
int m ot2 = 9;
int en1 = 10;
int dir = 6;
bool state = true;
int nob = A0;
int val = 0;
int fan_hizi = 0;
String faces_str;
int faces;
float sicaklik;
float nem;
void draw(void)
{
u8g.setFont(u8g_font_unifont);
u8g.drawStr( 0, 15, bufferX);
u8g.drawStr( 0, 30, bufferX);
u8g.drawStr( 0, 45, bufferY);
u8g.drawStr( 0, 60, bufferZ);
}
void setup()
{
Serial.begin(9600); //iletişim ve dht11 verisi
// pin ayarları
pinMode(mot1,OUTPUT);
pinMode(mot2,OUTPUT);
pinMode(en1,OUTPUT);
pinMode(dir,INPUT_PULLUP);
}
void loop()
{
//dht11 kodu
sicaklik = dht.readTemperature();
nem = dht.readHumidity();
delay(1000);
//iletişim kodu
if(Serial.available() > 0)
{
faces_str = Serial.readString();
faces = faces_str.toInt();
}
Serial.print(faces);
//sınırlar
if(faces == 0 && sicaklik < 25 && nem < 65)
{
fan_hizi = 50;
digitalWrite(13, HIGH);
digitalWrite(12, LOW);
}
if(faces >= 1 || sicaklik >= 25 || nem >= 65)
{
fan_hizi = 250;
digitalWrite(13, LOW);
digitalWrite(12, HIGH);
}
//ekran
sprintf(bufferX, "Yuzler: %d", faces);
sprintf(bufferY, "Sicaklik: %d", sicaklik);
sprintf(bufferZ, "Nem: %d", nem);
u8g.firstPage();
do
{
draw();
} while ( u8g.nextPage() );
delay(10);
//fan kodu
analogWrite(en1, fan_hizi);
digitalWrite(mot1, HIGH);
digitalWrite(mot2, LOW);
delay(1000);
digitalWrite(mot1, LOW);
}
У меня нет времени собирать оборудование, чтобы попробовать его. Поэтому я могу сказать, что он компилируется, но не могу сказать, что он работает.
ПРАВКА:
Теперь я нашел adidax "DHT11 lib". ваш код компилируется с помощью этой библиотеки. Но вы забываете считывать значения с датчика, прежде чем считывать их с переменных.
Отсутствует следующая строка:
void loop() {
//dht11 коду
DHT.read( DHT11_PIN ); // <-- в этой строке отсутствует
sicaklik = DHT.temperature;
nem = DHT.humidity;
...
спасибо вам за ваш ответ. я довольно новичок в arduino. да, я использовал плату uno. а насчет dht11 я использовал код, который нашел в Интернете. я не знаю, как именно это работает., @vueenx
- Сообщение об ошибке при попытке настроить библиотеку U8g2
- Как правильно поместить дескриптор u8g2 в класс
- SSD1306 показывает статику, когда я пытаюсь отобразить изображение XBM
- Как объявить массив переменного размера (глобально)
- Как получить тип данных переменной?
- Преобразование long в массив символов и обратно
- Почему я не могу распечатать значения логических переменных (0 и 1) с помощью функции println?
- контент» не захватывается
может быть, он печатает 0, потому что получает 0 ... сделайте некоторую отладку, @jsotola