решил вывести температуру двигателя на панель приборов,нашел на старом сайте такую тему Нужно вывести температуру с DS18B20 на OLED LCD 0,96 128x64 ,беру код и заливаю в ардуино про мини а он неработает,на экране снег,меняю библиотеку от дисплея заливаю,надпись engin T появилась но нет самих цифр,отключил включил опять снег
С каким?
введите или вставьте сюда код
```// Для дисплея
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
// Для датчика температуры
#include <OneWire.h>
OneWire ds(7); // работаем через пин 7
void setup(){
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
//Работа датчика температуры
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("\n");
ds.reset_search();
return;
}
ds.reset();
ds.select(addr);
ds.write(0x44,1); // запускаем преобразование, оставляем питание на линии (второй параметр =1)
delay(1000); // должно хватить 750 мс
// после завершения преобразования нужно снять питание с линии вызвав метод ds.depower
// метод reset сделает это за нас
ds.reset();
ds.select(addr);
ds.write(0xBE); // чтение показаний датчика
for ( i = 0; i < 9; i++) { // читаем 9 байт
data[i] = ds.read();
}
Serial.print(" CRC="); //Вроде должно исправлять ошибки вычисления
Serial.print( OneWire::crc8( data, 8), HEX);
Serial.println();
float Tc_100;
Tc_100 = (data[1]*256. + data[0])/16.;
Serial.print(Tc_100);
//Работа Дисплея
display.clearDisplay();
display.setCursor(5,5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("ENGINE"); //Надпись сверху дисплея
display.setCursor(90,5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("T"); //Знак температуры
display.setCursor(109,5);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("O"); //Импровезированный знак градуса
display.setCursor(115,5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("C"); //Импровезированный знак Цельсия
display.setCursor(30,38);
display.setTextSize(3);
display.setTextColor(WHITE);
display.print(Tc_100,1); //Выводим переменную на дисплей
display.display();
delay(1000);
}`Программный код`
Исправляет ошибки вычисления?
я не программист,извените конечно,я больше по ремонту,я незнаю что это означает,
Проверь, что в сериал выводится.
От библиотеки экрана примеры прогони.
если б я знал как это делать
ecли вставить библиотеку разработчика появляется такая ошибка,что это значит
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp: In member function ‘virtual void Adafruit_SSD1306::drawPixel(int16_t, int16_t, uint16_t)’:
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:113:5: error: ‘swap’ was not declared in this scope
swap(x, y);
^~~~
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:113:5: note: suggested alternative: ‘wrap’
swap(x, y);
^~~~
wrap
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp: In member function ‘virtual void Adafruit_SSD1306::drawFastHLine(int16_t, int16_t, int16_t, uint16_t)’:
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:565:7: error: ‘swap’ was not declared in this scope
swap(x, y);
^~~~
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:565:7: note: suggested alternative: ‘wrap’
swap(x, y);
^~~~
wrap
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp: In member function ‘virtual void Adafruit_SSD1306::drawFastVLine(int16_t, int16_t, int16_t, uint16_t)’:
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:633:7: error: ‘swap’ was not declared in this scope
swap(x, y);
^~~~
C:\Users\kawli\Documents\Arduino\libraries\Adafruit_SSD1306\Adafruit_SSD1306.cpp:633:7: note: suggested alternative: ‘wrap’
swap(x, y);
^~~~
wrap
exit status 1
Compilation error: exit status 1
Как в мире ремонтников поступают с человеком, которому нужно что-то отремонтировать, но он в этом ни в зуб ногой?
попробуй этот скетч
// Для дисплея
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
// Для датчика температуры
#include <OneWire.h>
OneWire ds(7); // работаем через пин 7
void setup() {
Serial.begin(115200);
Serial.println("START");
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
Serial.println("In LOOP");
//Работа датчика температуры
byte i;
byte present = 0;
byte data[12];
byte addr[8];
if ( !ds.search(addr)) {
Serial.print("\n");
ds.reset_search();
// return;
}
ds.reset();
ds.select(addr);
ds.write(0x44, 1); // запускаем преобразование, оставляем питание на линии (второй параметр =1)
delay(1000); // должно хватить 750 мс
// после завершения преобразования нужно снять питание с линии вызвав метод ds.depower
// метод reset сделает это за нас
ds.reset();
ds.select(addr);
ds.write(0xBE); // чтение показаний датчика
for ( i = 0; i < 9; i++) { // читаем 9 байт
data[i] = ds.read();
}
Serial.print(" CRC="); //Вроде должно исправлять ошибки вычисления
Serial.print( OneWire::crc8( data, 8), HEX);
Serial.println();
float Tc_100 = 0;
Tc_100 = (data[1] * 256.0 + data[0]) / 16.0;
Serial.println(Tc_100);
//Работа Дисплея
display.clearDisplay();
display.setCursor(5, 5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("ENGINE"); //Надпись сверху дисплея
display.setCursor(90, 5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("T"); //Знак температуры
display.setCursor(109, 5);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println("O"); //Импровезированный знак градуса
display.setCursor(115, 5);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("C"); //Импровезированный знак Цельсия
display.setCursor(30, 38);
display.setTextSize(3);
display.setTextColor(WHITE);
Serial.println(Tc_100, 1);
display.print(Tc_100, 1); //Выводим переменную на дисплей
display.display();
delay(1000);
}
обращаются к тому кто понимает,я так и сделал
Значит для начала надо определиться исправен и подключен ли правильно датчик температуры, смотрим в мониторе порта:
#include <OneWire.h>
void setup()
{
Serial.begin(115200);
Serial.println("//\n// Start oneWireSearch.ino \n//");
for (uint8_t pin = 2; pin < 13; pin++)
{
findDevices(pin);
}
Serial.println("\n//\n// End oneWireSearch.ino \n//");
}
void loop()
{
}
uint8_t findDevices(int pin)
{
OneWire ow(pin);
uint8_t address[8];
uint8_t count = 0;
if (ow.search(address))
{
Serial.print("\nuint8_t pin");
Serial.print(pin, DEC);
Serial.println("[][8] = {");
do {
count++;
Serial.println(" {");
for (uint8_t i = 0; i < 8; i++)
{
Serial.print("0x");
if (address[i] < 0x10) Serial.print("0");
Serial.print(address[i], HEX);
if (i < 7) Serial.print(", ");
}
Serial.println(" },");
} while (ow.search(address));
Serial.println("};");
Serial.print("// nr devices found: ");
Serial.println(count);
}
return count;
}
Если после заливки скетча в моторе порта получим нижеследующее, значит датчик не найден, неисправен или неправильно подключен.
//
// Start oneWireSearch.ino
//
//
// End oneWireSearch.ino
//
я шью через AVRDUDE ардуино иде невидит usbasp
залей загрузчик и далее шей через USB-UART иначе ты не сможешь отлаживаться или ищи ардуино нано к примеру, потом перенесёшь на свой девайс
как подключен, резистор подтяжки есть?
Вы сделали это не в том разделе. Вам нужен раздел “Ищу исполнителя”
Ведь так и принято в мире ремонтников, верно?
Вывод: всё нормально - дисплей исправен и библиотека к нему походит
Виноват Ваш код и ничто другое.
Вы говорили, что:
Так ответьте пожалуйста на вопрос, который Вы почему-то проигнорировали:
Ваш ответ я вижу, только Вы не уточнили - обращаются просто “сделай мне” или таки заказывают и оплачивают работу. Уточните, пожалуйста.