myOLED.print(String(temperature()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых
У меня OLED не было, синтаксис не очень предствляю. В этих строках должен быть вывод temp1/16 и temp2/16.
И библиотека OLED зачем то два раза объявлена?
Сейчас, если адреса правильные, должен погнать температуру на компьютер. Паразитное питание все убрал, хочешь использовать, сам потом долбайся.
Если в сериал идет нормально, снимай комментарии со своего OLED и пробуй с ним. У меня этой библы нет, не проверить. Сперва раскомментируй в области инициализации, проверь, нет ошибок, снимай комментарии в loop.
Да, на OLED не поправил, должно быть - /16.0, как у меня в сериале.
Serial.println("PISHEM");
Serial.print(temp1/16.0);
//myOLED.clrScr(); // Стираем все с экрана
//myOLED.setFont(RusFont); // Инициализируем русский шрифт
//myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык"
//myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык"
//myOLED.setFont(BigNumbers); // Инициализируем шрифт
//myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых
Serial.println("PISHEM");
Serial.print(temp2/16.0);
//myOLED.setFont(RusFont); // Инициализируем русский шрифт
//myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык"
//myOLED.setFont(BigNumbers); // Инициализируем шрифт
//myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых
//myOLED.update(); // Обновляем информацию на дисплее
Славненько, переходим к радикальным процедурам. Открываем "Файл"-"Примеры"-"OneWire"-"DS18x20 Temperature"
Либо переключаем DATA на 10 пин (у меня так в примере) или правим эту строчку на 2 пин. Запускаем, отписываемся, что видим.
А дальше, вот почто ты мне старому человеку мозг третий час выносишь? Я три раза сказал, прописать в адреса коды СВОИХ ДАТЧИКОВ, а у тебя там погода в провинции выньхер. Меняй на эти цифры в addr1 и addr2, в формате как там 0х28 0х... Однозначные числа пишем как 0х03.
Serial.println(temp1/16.0);
myOLED.clrScr(); // Стираем все с экрана
myOLED.setFont(RusFont); // Инициализируем русский шрифт
myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык"
myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык"
myOLED.setFont(BigNumbers); // Инициализируем шрифт
//myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых
Serial.println(temp2/16.0);
myOLED.setFont(RusFont); // Инициализируем русский шрифт
myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык"
myOLED.setFont(BigNumbers); // Инициализируем шрифт
//myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых
myOLED.update(); // Обновляем информацию на дисплее
DATA обое во 2 пин
Проверь фигурные скобки, кажется в сетапе одной не хватает, а в loop одна лишняя. Количество окрывающих = количеству закрывающих.
Убрал в сетапе одну перед сериал и в лооп в конце стало выделять
Arduino: 1.6.14 Hourly Build 2016/11/25 05:33 (Windows 10), Плата:"Arduino/Genuino Uno" C:\Users\victo\Desktop\arduino-nightly\arduino-builder -dump-prefs -logger=machine -hardware C:\Users\victo\Desktop\arduino-nightly\hardware -tools C:\Users\victo\Desktop\arduino-nightly\tools-builder -tools C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr -built-in-libraries C:\Users\victo\Desktop\arduino-nightly\libraries -libraries C:\Users\victo\OneDrive\Документы\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10614 -build-path C:\Users\victo\AppData\Local\Temp\arduino_build_163057 -warnings=all -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr -verbose C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino C:\Users\victo\Desktop\arduino-nightly\arduino-builder -compile -logger=machine -hardware C:\Users\victo\Desktop\arduino-nightly\hardware -tools C:\Users\victo\Desktop\arduino-nightly\tools-builder -tools C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr -built-in-libraries C:\Users\victo\Desktop\arduino-nightly\libraries -libraries C:\Users\victo\OneDrive\Документы\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10614 -build-path C:\Users\victo\AppData\Local\Temp\arduino_build_163057 -warnings=all -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avr-gcc.path=C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr -prefs=runtime.tools.avrdude.path=C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr -verbose C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino Using board 'uno' from platform in folder: C:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr Using core 'arduino' from platform in folder: C:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr Detecting libraries used... "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\sketch\sketch_jan12d.ino.cpp" -o "nul" "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\sketch\sketch_jan12d.ino.cpp" -o "nul" "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "-IC:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C" "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\sketch\sketch_jan12d.ino.cpp" -o "nul" "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "-IC:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C" "C:\Users\victo\Desktop\arduino-nightly\libraries\OneWire\OneWire.cpp" -o "nul" "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "-IC:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C" "C:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C\DefaultFonts.c" -o "nul" "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "-IC:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C" "C:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C\OLED_I2C.cpp" -o "nul" Generating function prototypes... "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "-IC:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C" "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\sketch\sketch_jan12d.ino.cpp" -o "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\preproc\ctags_target_for_gcc_minus_e.cpp" "C:\Users\victo\Desktop\arduino-nightly\tools-builder\ctags\5.8-arduino10/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\preproc\ctags_target_for_gcc_minus_e.cpp" Компиляция скетча... "C:\Users\victo\Desktop\arduino-nightly\hardware\tools\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10614 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\cores\arduino" "-IC:\Users\victo\Desktop\arduino-nightly\hardware\arduino\avr\variants\standard" "-IC:\Users\victo\Desktop\arduino-nightly\libraries\OneWire" "-IC:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C" "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\sketch\sketch_jan12d.ino.cpp" -o "C:\Users\victo\AppData\Local\Temp\arduino_build_163057\sketch\sketch_jan12d.ino.cpp.o" C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino: In function 'void loop()': C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino:40:42: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык" ^ C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino:41:35: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык" ^ sketch_jan12d:43: error: 'temperature' was not declared in this scope myOLED.print(String(temperature()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых ^ C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino:45:33: warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings] myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык" ^ C:\Users\victo\AppData\Local\Temp\arduino_modified_sketch_364199\sketch_jan12d.ino: At global scope: sketch_jan12d:51: error: expected declaration before '}' token } ^ Несколько библиотек найдено для "OLED_I2C.h" Используется: C:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C Не используется: C:\Users\victo\Desktop\arduino-nightly\libraries\OLED_I2C Используем библиотеку OneWire версии 2.3.2 из папки: C:\Users\victo\Desktop\arduino-nightly\libraries\OneWire Используем библиотеку OLED_I2C в папке: C:\Users\victo\OneDrive\Документы\Arduino\libraries\OLED_I2C (legacy) exit status 1 'temperature' was not declared in this scopeУ меня OLED не было, синтаксис не очень предствляю. В этих строках должен быть вывод temp1/16 и temp2/16.
И библиотека OLED зачем то два раза объявлена?
Пробовал добавит скобку в сетапе она выделяет сериал 9600 в лопе убрал последнюю она на олед выделяет.
Уже убрал
#include <OneWire.h> #include <OLED_I2C.h> OLED myOLED(A4, A5, A4); // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21 extern uint8_t RusFont[]; // Подключаем русский шрифт extern uint8_t SmallFont[]; // Подключаем латинский шрифтом extern uint8_t RusFont[]; // Подключаем русский шрифт extern uint8_t SmallFont[]; // Подключаем латинский шрифтом #define ONE_WIRE_BUS 2 // Указываем пин подключения data-вывода датчика температуры #define term_power 4 // Указываем пин подключения питания датчика температуры OneWire oneWire(ONE_WIRE_BUS); // Сообщаем библиотеке об устройстве, работающем по протоколу OneWire ds(2); byte addr1[8]={0x28,0x04,0x13,0x80,0x06,0x00,0x00,0xF8}; byte addr2[8]={0x28,0x47,0x1F,0x5C,0x06,0x00,0x00,0xE6}; volatile int temp1,temp2; extern uint8_t BigNumbers[]; // Подключаем шрифт void setup(void) { myOLED.begin(); pinMode(term_power, OUTPUT); } Serial.begin(9600); WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты WDTCSR=(1<<WDIE)| (1<<WDP2)|(1<<WDP1); // разрешение прерывания + выдержка 1 секунда // (55 страница <a href="<a href="<a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a>" rel="nofollow"><a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></a>" rel="nofollow">даташита</a>) // снять все ремарки если нужно поменять разрешение // ds.reset(); // сброс шины // ds.select(addr2); //выставить адрес // ds.write(0x4E); // разрешение записать конфиг // ds.write(0x7F); // Th контроль температуры макс 128грд // ds.write(0xFF); //Tl контроль температуры мин -128грд // ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение } void loop(void) { myOLED.clrScr(); // Стираем все с экрана myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык" myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык" myOLED.setFont(BigNumbers); // Инициализируем шрифт myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык" myOLED.setFont(BigNumbers); // Инициализируем шрифт myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых myOLED.update(); // Обновляем информацию на дисплее } } ISR (WDT_vect){ //вектор прерывания WD static boolean n=0; // флаг работы: запрос температуры или её чтение n=!n; if (n) {ds.reset(); // сброс шины ds.write(0xCC);//обращение ко всем датчикам ds.write(0x44);// начать преобразование (без паразитного питания) } else {ds.reset(); ds.select(addr1); ds.write(0xBE); // Read Scratchpad (чтение регистров) temp1 = ds.read() | (ds.read()<<8); //прочитаны 2 байта // получение с 2-го датчика ds.reset(); ds.select(addr2); ds.write(0xBE); // Read Scratchpad (чтение регистров) temp2 = ds.read() | (ds.read()<<8); //прочитаны 2 байта } }Скидывай полный скетч, попробую поправить.
Сделал так теперь Serial.begin(9600);
выделяет
Я тебе буду ну просто ооооочень благодарен.
Может за одно подскажешь какие нибуть сайты по прагромированию хорошие.Хотя когда с человеком общаешься лицом к лицу больше понимаешь.
#include <OneWire.h> #include <OLED_I2C.h> OLED myOLED(A4, A5, A4); // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21 extern uint8_t RusFont[]; // Подключаем русский шрифт extern uint8_t SmallFont[]; // Подключаем латинский шрифтом extern uint8_t RusFont[]; // Подключаем русский шрифт extern uint8_t SmallFont[]; // Подключаем латинский шрифтом #define ONE_WIRE_BUS 2 // Указываем пин подключения data-вывода датчика температуры #define term_power 4 // Указываем пин подключения питания датчика температуры OneWire oneWire(ONE_WIRE_BUS); // Сообщаем библиотеке об устройстве, работающем по протоколу OneWire ds(2); byte addr1[8]={0x28,0x04,0x13,0x80,0x06,0x00,0x00,0xF8}; byte addr2[8]={0x28,0x47,0x1F,0x5C,0x06,0x00,0x00,0xE6}; volatile int temp1,temp2; extern uint8_t BigNumbers[]; // Подключаем шрифт void setup(void) { myOLED.begin(); pinMode(term_power, OUTPUT); } Serial.begin(9600); WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты WDTCSR=(1<<WDIE)| (1<<WDP2)|(1<<WDP1); // разрешение прерывания + выдержка 1 секунда // (55 страница <a href="<a href="<a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a>" rel="nofollow"><a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></a>" rel="nofollow">даташита</a>) // снять все ремарки если нужно поменять разрешение // ds.reset(); // сброс шины // ds.select(addr2); //выставить адрес // ds.write(0x4E); // разрешение записать конфиг // ds.write(0x7F); // Th контроль температуры макс 128грд // ds.write(0xFF); //Tl контроль температуры мин -128грд // ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение } void loop(void) { myOLED.clrScr(); // Стираем все с экрана myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык" myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык" myOLED.setFont(BigNumbers); // Инициализируем шрифт myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык" myOLED.setFont(BigNumbers); // Инициализируем шрифт myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых myOLED.update(); // Обновляем информацию на дисплее } } ISR (WDT_vect){ //вектор прерывания WD static boolean n=0; // флаг работы: запрос температуры или её чтение n=!n; if (n) {ds.reset(); // сброс шины ds.write(0xCC);//обращение ко всем датчикам ds.write(0x44);// начать преобразование (без паразитного питания) } else {ds.reset(); ds.select(addr1); ds.write(0xBE); // Read Scratchpad (чтение регистров) temp1 = ds.read() | (ds.read()<<8); //прочитаны 2 байта // получение с 2-го датчика ds.reset(); ds.select(addr2); ds.write(0xBE); // Read Scratchpad (чтение регистров) temp2 = ds.read() | (ds.read()<<8); //прочитаны 2 байта } }Тяк, загружаем, просветляемся.:
#include <OneWire.h> //#include <OLED_I2C.h> //OLED myOLED(A4, A5, A4); // Определяем пины I2C интерфейса: UNO и NANO -- SDA - пин A4, SCL - пин A5; MEGA -- SDA - пин 20, SCL - пин 21 //extern uint8_t RusFont[]; // Подключаем русский шрифт //extern uint8_t SmallFont[]; // Подключаем латинский шрифтом //extern uint8_t RusFont[]; // Подключаем русский шрифт //extern uint8_t SmallFont[]; // Подключаем латинский шрифтом OneWire ds(2); byte addr1[8]={0x28,0x04,0x13,0x80,0x06,0x00,0x00,0xF8}; byte addr2[8]={0x28,0x47,0x1F,0x5C,0x06,0x00,0x00,0xE6}; volatile int temp1,temp2; //extern uint8_t BigNumbers[]; // Подключаем шрифт void setup(void) { //myOLED.begin(); Serial.begin(9600); WDTCSR=(1<<WDCE)|(1<<WDE); //установить биты WDCE WDE (что б разрешить запись в другие биты WDTCSR=(1<<WDIE)| (1<<WDP2)|(1<<WDP1); // разрешение прерывания + выдержка 1 секунда // (55 страница <a href="<a href="<a href="<a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a>" rel="nofollow"><a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></a>" rel="nofollow"><a href="<a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a>" rel="nofollow"><a href="http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf" rel="nofollow">http://www.atmel.com/images/Atmel-8271-8-bit-AVR-Microcontroller-ATmega48A-48PA-88A-88PA-168A-168PA-328-328P_datasheet_Complete.pdf</a></a></a>" rel="nofollow">даташита</a>) // снять все ремарки если нужно поменять разрешение // ds.reset(); // сброс шины // ds.select(addr2); //выставить адрес // ds.write(0x4E); // разрешение записать конфиг // ds.write(0x7F); // Th контроль температуры макс 128грд // ds.write(0xFF); //Tl контроль температуры мин -128грд // ds.write(0x60); // 0x60 12-бит разрешение, 0x00 -9бит разрешение } void loop(void) { Serial.print(temp1/16.0); //myOLED.clrScr(); // Стираем все с экрана //myOLED.setFont(RusFont); // Инициализируем русский шрифт //myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык" //myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык" //myOLED.setFont(BigNumbers); // Инициализируем шрифт //myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых Serial.print(temp2/16.0); //myOLED.setFont(RusFont); // Инициализируем русский шрифт //myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык" //myOLED.setFont(BigNumbers); // Инициализируем шрифт //myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых //myOLED.update(); // Обновляем информацию на дисплее } ISR (WDT_vect){ //вектор прерывания WD static boolean n=0; // флаг работы: запрос температуры или её чтение n=!n; if (n) {ds.reset(); // сброс шины ds.write(0xCC);//обращение ко всем датчикам ds.write(0x44);// начать преобразование (без паразитного питания) } else {ds.reset(); ds.select(addr1); ds.write(0xBE); // Read Scratchpad (чтение регистров) temp1 = ds.read() | (ds.read()<<8); //прочитаны 2 байта // получение с 2-го датчика ds.reset(); ds.select(addr2); ds.write(0xBE); // Read Scratchpad (чтение регистров) temp2 = ds.read() | (ds.read()<<8); //прочитаны 2 байта } }Сейчас, если адреса правильные, должен погнать температуру на компьютер. Паразитное питание все убрал, хочешь использовать, сам потом долбайся.
Если в сериал идет нормально, снимай комментарии со своего OLED и пробуй с ним. У меня этой библы нет, не проверить. Сперва раскомментируй в области инициализации, проверь, нет ошибок, снимай комментарии в loop.
Да, на OLED не поправил, должно быть - /16.0, как у меня в сериале.
Попробую
залил но ком порт ни че не кажет
Кнопочку "Монитор порта" нажимали?
а где тут у тебя указаны пины подключения датчиков?
монитор порта нажимаю а там пусто и так почему то было всегда
во показывает но какой бод выставить там какие то цифры и все куча
чисто 0000000000000000000000.000000000
а где тут у тебя указаны пины подключения датчиков?
10-я строка, 2-й цифровой.
А как без сериала отлаживать я смутно представляю, скорость проверь, должно быть 9600.
выставил идут 000.000.000. и так всегда
температуру не показывает вообще ком порт
Карашо, перед 35 и 42 строками поставь: Serial.println("PISHEM");
И мои с цифрами исправь на Serial.println
Давно не выводил, забыл.
Serial.println("PISHEM"); Serial.print(temp1/16.0); //myOLED.clrScr(); // Стираем все с экрана //myOLED.setFont(RusFont); // Инициализируем русский шрифт //myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык" //myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык" //myOLED.setFont(BigNumbers); // Инициализируем шрифт //myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых Serial.println("PISHEM"); Serial.print(temp2/16.0); //myOLED.setFont(RusFont); // Инициализируем русский шрифт //myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык" //myOLED.setFont(BigNumbers); // Инициализируем шрифт //myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых //myOLED.update(); // Обновляем информацию на дисплееТак?
Исправил как ты сказал бегут PISHEM
0.00
PISHEM
-0.06
В 02 и 10 строках тоже на println исправь и запускай. print гонит в одну строку, println каждый раз переводит.
исправил и вот выше написал что показывает в столбик
Славненько, переходим к радикальным процедурам. Открываем "Файл"-"Примеры"-"OneWire"-"DS18x20 Temperature"
Либо переключаем DATA на 10 пин (у меня так в примере) или правим эту строчку на 2 пин. Запускаем, отписываемся, что видим.
вооооооооооо теперь работает два датчика оба разная температура.что дальше
А дальше скопипасть, что этот пример пишет в ROM
там два значения
один датчик и второй оба разные
?
Оба и пиши
Куда?
Сюда, скопируй с экрана.
Не копирует с порта
Во
Тогда останови и руками перепиши. Хосподи.
что дальше?
что дальше?
А дальше, вот почто ты мне старому человеку мозг третий час выносишь? Я три раза сказал, прописать в адреса коды СВОИХ ДАТЧИКОВ, а у тебя там погода в провинции выньхер. Меняй на эти цифры в addr1 и addr2, в формате как там 0х28 0х... Однозначные числа пишем как 0х03.
Вот щас по вашему скетчу показывает температуру в ком порте спс.Теперь осталось вывести на дисплей
Вот и ладненько, на сегодня я спать, сам мучай. Может все сразу заведется.
Хорошо спс большое буду пробовать вы уж извените.Я же пока учусь может потом проще будет.Когда вот так объясняют нормально
Serial.println(temp1/16.0); myOLED.clrScr(); // Стираем все с экрана myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print("NTVGTHFNEHF", CENTER, 0); // Выводим надпись "Русский язык" myOLED.print("EKBWF", LEFT, 10); // Выводим надпись "Русский язык" myOLED.setFont(BigNumbers); // Инициализируем шрифт //myOLED.print(String(temp1/16()),RIGHT, 10); // Выводим текущее значение температуры датчика, округленное до десятых Serial.println(temp2/16.0); myOLED.setFont(RusFont); // Инициализируем русский шрифт myOLED.print("LJV", LEFT, 40); // Выводим надпись "Русский язык" myOLED.setFont(BigNumbers); // Инициализируем шрифт //myOLED.print(String(temp2/16()),RIGHT, 40); // Выводим текущее значение температуры датчика, округленное до десятых myOLED.update(); // Обновляем информацию на дисплееесли я убираю // вот это то у меня текст выводит мой но температуру нет.А если я в этих сроках убиру 07 и 12 // то выдает ошибку