Помогите разобраться с кодом

решил вывести температуру двигателя на панель приборов,нашел на старом сайте такую тему Нужно вывести температуру с 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

Как в мире ремонтников поступают с человеком, которому нужно что-то отремонтировать, но он в этом ни в зуб ногой?

2 лайка

попробуй этот скетч

// Для дисплея
#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 иначе ты не сможешь отлаживаться или ищи ардуино нано к примеру, потом перенесёшь на свой девайс

как подключен, резистор подтяжки есть?

Вы сделали это не в том разделе. Вам нужен раздел “Ищу исполнителя”

Ведь так и принято в мире ремонтников, верно? :wink:

Вывод: всё нормально - дисплей исправен и библиотека к нему походит

Виноват Ваш код и ничто другое.

Вы говорили, что:

Так ответьте пожалуйста на вопрос, который Вы почему-то проигнорировали:

Ваш ответ я вижу, только Вы не уточнили - обращаются просто “сделай мне” или таки заказывают и оплачивают работу. Уточните, пожалуйста.