Если датчик не выдает данные - меняй датчик.
Спасибо
там не может быть пусто, скорость порта монитора 115200 выставлял?
там минимум это:
START
In LOOP
CRC=0
0.00
0.0
In LOOP
CRC=0
0.00
0.0
In LOOP
CRC=0
0.00
0.0
#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(2);
display.setTextColor(WHITE);
Serial.println(Tc_100, 1);
display.print(Tc_100, 1); //Выводим переменную на дисплей
display.display();
delay(1000);
}
спасибо и на этом,у меня есть тоже самое на атмега 8 но китайцы шлют залоченные,доктор фьюзов нужен просто
А зачем? При разлочивании мк доктор трёт содержимое flash…
я вспомнил что там не так!!
// Для дисплея
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // Ширина OLED-дисплея, в пикселях
#define SCREEN_HEIGHT 64 // Высота OLED-дисплея в пикселях
#define OLED_RESET -1 // т.к.у дисплея нет пина сброса прописываем -1, если используется общий сброс Arduino
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, 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.print("T=");
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(2);
display.setTextColor(WHITE);
Serial.println(Tc_100, 1);
display.println(Tc_100, 1); //Выводим переменную на дисплей
display.display();
delay(1000);
}
строки 6-10
ОГРОМНОЕ СПАСИБО,побольше бы таких людей,все работает
Если не тяжело попробуй в оригинальном скетче эту строку поменять на эту
Эту
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
на эту
display.begin(SSD1306_SWITCHCAPVCC, 0x3D);
на котором у меня ничего неработало?
можешь на моём, где уже отображение было. кроме температуры
я смотрю, ты сегодня в ударе
голова лопнет,от того что незнаеш
да нет, это я местному “гуру” @ua6em, написал.
у него в привычку входит, по выходным, пару раз садится в лужу.
отрицательный результат тоже результат
а что должно было произойти если у устройства адрес 0x3C, а не 0x3D ?
< See datasheet for Address; 0x3D for 128x64, 0x3C for 128x32>