Witam.
Buduję projekt termometru bazującego na czujnikach DS18B20 przy tym wykorzytując moduł bluetooth xm15b do komunikacji z telefonem a dokładniej virtuino. Sam program w takiej konfiguracji działa dobrze jednak chcę dołożyć obsługę wyświetlacza oled SH1106 z komunikacją i2C. Po złożeniu kodu dla obsługi samego wyświetlacza i zczytywaniu danych z czujników ta część programu również działa dobrze. Problem mój zaczyna się w momencie sklejenia tych dwóch części programu do kupy, moja wiedza jest początkująca w zakresie programowania ale z tego co zauważyłem program gubi się przy inicjalizacji ekranu. wrzucę 3 kody pierwszy to kod obsługujący temperaturę bluetooth i virtuino, drugi obługuje temperaturę i oled a trzeci to złożenie obu do kupy.
kod nr 2:
i kod sklejany (skróciłem go do obsługi jednego czujnika dla czytelności:
Jak ktoś mógłby cos podpowiedzieć będę wdzięczny, póki co jestem świeży w tym temacie i sporo korzystam z gotowców dostosowując je pod siebie, ale od kilku dni z tym walcze i już kończą się pomysły, gdzieś na forum angielskim znalazłem coś że chodzi o pin resetu w arduino jednak nie bardzo mi idzie znalezienie informacji co z tym mogę zrobić, a może arduino uno jest nie wystarczające?
pozdrawiam i z góry dzięki za fatygę.
Buduję projekt termometru bazującego na czujnikach DS18B20 przy tym wykorzytując moduł bluetooth xm15b do komunikacji z telefonem a dokładniej virtuino. Sam program w takiej konfiguracji działa dobrze jednak chcę dołożyć obsługę wyświetlacza oled SH1106 z komunikacją i2C. Po złożeniu kodu dla obsługi samego wyświetlacza i zczytywaniu danych z czujników ta część programu również działa dobrze. Problem mój zaczyna się w momencie sklejenia tych dwóch części programu do kupy, moja wiedza jest początkująca w zakresie programowania ale z tego co zauważyłem program gubi się przy inicjalizacji ekranu. wrzucę 3 kody pierwszy to kod obsługujący temperaturę bluetooth i virtuino, drugi obługuje temperaturę i oled a trzeci to złożenie obu do kupy.
Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include "VirtuinoBluetooth.h"
#include <SoftwareSerial.h>
#define ONE_WIRE_BUS 6
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
SoftwareSerial bluetoothSerial = SoftwareSerial(2,3);
VirtuinoBluetooth virtuino(bluetoothSerial);
//======================================================================== setup
void setup(void){
Serial.begin(9600);
bluetoothSerial.begin(9600);
virtuino.DEBUG=true;
sensors.begin();
Serial.println("Setup complete.");
}
//======================================================================== setup
void readTemperatures(){
Serial.println(" Requesting temperatures...");
sensors.requestTemperatures();
Serial.println("DONE");
float temperature1=sensors.getTempCByIndex(0);
float temperature2=sensors.getTempCByIndex(1);
float temperature3=sensors.getTempCByIndex(2);
float temperature4=sensors.getTempCByIndex(3);
float temperature5=sensors.getTempCByIndex(4);
float temperature6=sensors.getTempCByIndex(5);
float temperature7=sensors.getTempCByIndex(6);
Serial.println("Temperature for Device 1 is: "+String(temperature1));
Serial.println("Temperature for Device 2 is: "+String(temperature2));
Serial.println("Temperature for Device 3 is: "+String(temperature3));
Serial.println("Temperature for Device 4 is: "+String(temperature4));
Serial.println("Temperature for Device 5 is: "+String(temperature5));
Serial.println("Temperature for Device 6 is: "+String(temperature6));
Serial.println("Temperature for Device 7 is: "+String(temperature7));
virtuino.vMemoryWrite(0,temperature1);
virtuino.vMemoryWrite(1,temperature2);
virtuino.vMemoryWrite(2,temperature3);
virtuino.vMemoryWrite(3,temperature4);
virtuino.vMemoryWrite(4,temperature5);
virtuino.vMemoryWrite(5,temperature6);
virtuino.vMemoryWrite(6,temperature7);
}
void loop(void){
virtuino.run();
readTemperatures();
virtuino.vDelay(1000);
}Kod:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#include <OneWire.h>
#include <DallasTemperature.h>
/* Uncomment the initialize the I2C address , uncomment only one, If you get a totally blank screen try the other*/
#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
//#define i2c_Address 0x3d //initialize with the I2C addr 0x3D Typically Adafruit OLED's
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // QT-PY / XIAO
#define ONE_WIRE_BUS 6
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
void setup() {
Serial.begin(9600);
// Show image buffer on the display hardware.
// Since the buffer is intialized with an Adafruit splashscreen
// internally, this will display the splashscreen.
delay(250); // wait for the OLED to power up
display.begin(i2c_Address, true); // Address 0x3C default
//display.setContrast (0); // dim display
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
void loop() {
Serial.println(" Requesting temperatures...");
sensors.requestTemperatures();
Serial.println("DONE");
float temperature1 = sensors.getTempCByIndex(0);
float temperature2 = sensors.getTempCByIndex(1);
float temperature3 = sensors.getTempCByIndex(2);
float temperature4 = sensors.getTempCByIndex(3);
float temperature5 = sensors.getTempCByIndex(4);
float temperature6 = sensors.getTempCByIndex(5);
float temperature7 = sensors.getTempCByIndex(6);
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
display.setCursor(25, 0);
display.println("Termometr PRO");
display.setTextColor(SH110X_WHITE);
display.print("Tk=");
display.print(temperature1);
display.print(", T10=");
display.println(temperature2);
display.print("T1/2=");
display.println(temperature3);
display.print("Twej=");
display.print(temperature4);
display.print(", Twyj");
display.println(temperature5);
display.print("T_gl=");
display.print(temperature6);
display.display();
display.clearDisplay();
}Kod:
#include <OneWire.h>
#include <DallasTemperature.h>
#include "VirtuinoBluetooth.h"
#include <SoftwareSerial.h>
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH110X.h>
#define ONE_WIRE_BUS 6
/* Uncomment the initialize the I2C address , uncomment only one, If you get a totally blank screen try the other*/
#define i2c_Address 0x3c //initialize with the I2C addr 0x3C Typically eBay OLED's
//#define i2c_Address 0x3d //initialize with the I2C addr 0x3D Typically Adafruit OLED's
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // QT-PY / XIAO
Adafruit_SH1106G display = Adafruit_SH1106G(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
SoftwareSerial bluetoothSerial = SoftwareSerial(2,3);
VirtuinoBluetooth virtuino(bluetoothSerial);
//======================================================================== setup
void setup(){
Serial.begin(9600);
bluetoothSerial.begin(9600);
virtuino.DEBUG=true;
sensors.begin();
Serial.println("Setup complete.");
// Show image buffer on the display hardware.
// Since the buffer is intialized with an Adafruit splashscreen
// internally, this will display the splashscreen.
delay(1500); // wait for the OLED to power up
display.begin(i2c_Address, true); // Address 0x3C default
//display.setContrast (0); // dim display
display.display();
delay(2000);
// Clear the buffer.
display.clearDisplay();
}
//======================================================================== setup
void readTemperatures(){
Serial.println(" Requesting temperatures...");
sensors.requestTemperatures();
Serial.println("DONE");
float temperature1=sensors.getTempCByIndex(0);
Serial.println("Temperature for Device 1 is: "+String(temperature1));
display.setTextSize(1);
display.setTextColor(SH110X_WHITE);
display.setCursor(25, 0);
display.println("Termometr PRO");
display.setTextColor(SH110X_WHITE);
display.print("Tk=");
display.print(temperature1);
virtuino.vMemoryWrite(0,temperature1);
}
void loop(){
virtuino.run();
readTemperatures();
virtuino.vDelay(1000);
}pozdrawiam i z góry dzięki za fatygę.


; // Don't proceed, loop forever
. Piszę dla potomnych żeby nie było. Kod programu napisany jest poprawnie, Po zmianie na Arduino mega wszystko śmiga trzeba pamiętać tylko o tym że w mega względem UNO inaczej trzeba podpiąć bluetooth wykorzystując softwareserial (u mnie to są w mega piny 10,11), oraz wyświetlacz pod piny sda, scl (u mnie 20,21). Dokładnej przyczyny nie mam ale wygląda to tak jak napisał Kaczakat że być może brakuje Ram pomimo poprawnej kompilacji programu na arduino Uno i dość bezpiecznych progach jeżeli chodzi o wykorzystanie pamięci. Wstawiam aktualnie wgrany wsad który chodzi w 100% jak potrzeba na ARDUINO MEGA 2560: