[Conseil] Arduino nano V3 avec ecran oled 0.96" 128/64 et une sonde DS18B20

Bonjours,

Quelqu’un pourrais il m'aider a modifier ce code qui pour l'instant affiche : sur l’écran un logo suivie d'un texte en boucle et la possibilité de consulter la sonde a partir du moniteur série.

Et je souhaiterais a la place une boucle avec le logo suivi de la température suivie du texte.
Voir la possibilité de passer de l'un a l'autre a l'aide d'un bouton poussoir.

J’espère avoir étais assez clair, merci d'avance a ceux qui essayerons de m'aider :slight_smile:

pour info j'utilise les librairies :
#include <avr/pgmspace.h>
#include <Wire.h>
#include "data.h"
#include <DallasTemperature.h>
#include <OneWire.h>

combo.ino (7.62 KB)

data.h (18 KB)

DallasTemperature.h (6.64 KB)

OneWire.h (7.04 KB)

je m'y connais mal, mais là on peut bidouiller sans risque, alors essaye ça :

à la place de :

while(1)
{
clear_display();
sendStrXY("hello world",3,0);
delay(3000);
reset_display();
}

mets cela :

while(1)
{
float tempC = sensors.getTempC(deviceAddress);
clear_display();
sendStrXY(tempC,3,0);
delay(3000);
reset_display();
}

Merci mais cela ne compile pas..... Arduino: 1.0.6 (Windows 7), Board: "Arduino Nano w/ ATmega328"
C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega328p -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=106 -IC:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\variants\eightanaloginputs -IC:\Program Files (x86)\Arduino\libraries\Wire -IC:\Users\no\Documents\Arduino\libraries\Oled_version_1 -IC:\Users\no\Documents\Arduino\libraries\DallasTemperature -IC:\Users\no\Documents\Arduino\libraries\OneWire C:\Users\no\AppData\Local\Temp\build8218462773451873010.tmp\combo.cpp -o C:\Users\no\AppData\Local\Temp\build8218462773451873010.tmp\combo.cpp.o

In file included from combo.ino:3:
/data.h:3: warning: only initialized variables can be placed into program memory area
/data.h:72: warning: only initialized variables can be placed into program memory area
/data.h:152: warning: only initialized variables can be placed into program memory area
/data.h:162: warning: only initialized variables can be placed into program memory area
/data.h:174: warning: only initialized variables can be placed into program memory area
/data.h:180: warning: only initialized variables can be placed into program memory area
combo.ino: In function 'void loop()':
combo:46: error: 'deviceAddress' was not declared in this scope
combo:48: error: cannot convert 'float' to 'char*' for argument '1' to 'void sendStrXY(char*, int, int)'
combo.ino: At global scope:
combo.ino:111: warning: 'void printBigTime(char*)' defined but not used
combo.ino:178: warning: 'void sendCharXY(unsigned char, int, int)' defined but not used
combo.ino:213: warning: 'void sendStr(unsigned char*)' defined but not used

Nan il lui faut une string.

while(1)
   {
    float tempC = sensors.getTempC(deviceAddress);
    clear_display();
    char buffer[10];
    memset(buffer,NULL,sizeof(buffer));
    dtostrf(tempC,3,1,buffer);
    sendStrXY(buffer,3,0);
    delay(3000);
    reset_display();
   }

Un while(1) dans loop() est une mauvaise pratique.
Loop() est déjà appelée dans une boucle infinie (voir le code du main() ci-dessous). Seulement la boucle infinie en question assure aussi la gestion des événements série. Donc mettre un while(1) dans loop() peut empêcher la gestion correcte du port série en réception.

#include <Arduino.h>

int main(void)
{
	init();

#if defined(USBCON)
	USBDevice.attach();
#endif
	
	setup();
    
	for (;;) {
		loop();
		if (serialEventRun) serialEventRun();
	}
        
	return 0;
}

Le reset_display() va faire clignoter l'écran ce qui n'est pas très agréable à regarder. Le clear_display() juste avant le sendStrXY() devrait normalement être suffisant.