Bonjour,
j'ai une NANO qui pilote un bargraph en SPI. L'alimentation de la NANO et du module Bargraph sont gérés par une MEGA via deux relais.
Le téléversement est ok. Je débranche les câbles USB. je mets l'ensemble sous tension. Le bargraph ne fait rien. Je rebranche le cordon USB sur la NANO, je le débranche aussitôt et là ça fonctionne. j'ai fait la manip plusieurs fois et je dois à chaque fois rebrancher/débrancher l'USB de la NANO pour relancer le bon fonctionnement.
le code de la MEGA :
#include <Wire.h>
#include <RTClib.h>
// Variables et broches pour la RTC DS3231 & la gestion du temps
RTC_DS3231 rtc; // Pour DS3231
int hh, mn;
// Variables pour la Nano du contrôle de niveau
const byte relaisAlimNano = 44; // Pilote le relais 2-1 d'alimentation en 9V de la Nano
const byte relaisAlimBargraph = 45; // pilote le relais 2-2 d'alimentation 5v du bargraph
boolean nano = 0;
// Variables pour le programme
int heureProg = 0; int heureProgDebut = 1200; int heureProgFin = 2145;
const byte Minute = 0;
void setup() {
pinMode(relaisAlimNano, OUTPUT); digitalWrite(relaisAlimNano, HIGH);
pinMode(relaisAlimBargraph, OUTPUT); digitalWrite(relaisAlimBargraph, HIGH);
Wire.begin();
Serial.begin(115200);
}
void loop() {
// Calcul heureProg
DateTime now = rtc.now();
hh = now.hour(); mn = now.minute();
heureProg = (hh * 100) + mn;
// allumage-Extinction de l'écran
{
if (heureProg >= heureProgDebut - 500 && heureProg <= heureProgFin + 155) {
if (!nano) {
digitalWrite(relaisAlimNano, LOW); delay(500);
digitalWrite(relaisAlimBargraph, LOW);
nano = 1;
}
}
else {
if (nano) {
digitalWrite(relaisAlimBargraph, HIGH);
digitalWrite(relaisAlimNano, HIGH);
nano = 0;
}
}
}
}
le code la NANO
#include <SPI.h>
#define LOAD 10 // Entrée LOAD du MAX72219
#define DISPLAY_TEST 0x0F // Registre Display-Test
#define SHUTDOWN 0x0C // Registre Shutdown
#define DECODE_MODE 0x09 // Registre Decode-mode
#define SCAN_LIMIT 0x0B // Registre Scan-limit
#define INTENSITY 0x0A // Registre Intensity
#define DIGIT0 0x01 // Registre Digit 0
#define DIGIT1 0x02 // Registre Digit 1
#define DIGIT2 0x03 // Registre Digit 2
void setup() {
pinMode(LOAD, OUTPUT);
digitalWrite(LOAD, HIGH);
SPI.begin();
writeRegister(DISPLAY_TEST, 0x00); /* Normal operation */
writeRegister(DECODE_MODE, 0x00); /* No decode */
writeRegister(SCAN_LIMIT, 0x02); /* Display digits 0, 1, 2 */
writeRegister(INTENSITY, 0x00); /* LED brightness, max=0x0F */
writeRegister(SHUTDOWN, 0x01); /* Normal operation */
Serial.begin(115200);
}
void loop() {
niveau5();
delay(1500);
niveau4();
delay(1500);
niveau3();
delay(1500);
niveau2();
delay(1500);
niveau1();
delay(1500);
}
void writeRegister(byte thisRegister, byte thisValue) { // Écrire dans un registre du MAX7219
SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0));
digitalWrite(LOAD, LOW); // Met l'entrée LOAD à l'état bas
SPI.transfer(thisRegister); // Adresse du registre
SPI.transfer(thisValue); // Contenu du registre
digitalWrite(LOAD, HIGH); // Met à l'état haut pour verrouiller et transférer les données
SPI.endTransaction();
}
void niveau1() {
writeRegister(DIGIT0, 0x11); // 0001 0001
writeRegister(DIGIT1, 0x00); // 0000 0000
writeRegister(DIGIT2, 0x00); // 0000 0000
}
void niveau2() {
writeRegister(DIGIT0, 0x13); // 0001 0011
writeRegister(DIGIT1, 0x00); // 0000 0000
writeRegister(DIGIT2, 0x00); // 0000 0000
}
void niveau3() {
writeRegister(DIGIT0, 0x66); // 0110 0110
writeRegister(DIGIT1, 0x00); // 0000 0000
writeRegister(DIGIT2, 0x00); // 0000 0000
}
void niveau4() {
writeRegister(DIGIT0, 0xC8); // 1100 1000
writeRegister(DIGIT1, 0x01); // 0000 0001
writeRegister(DIGIT2, 0x00); // 0000 0000
}
void niveau5() {
writeRegister(DIGIT0, 0x00); // 0000 0000
writeRegister(DIGIT1, 0x33); // 0011 0011
writeRegister(DIGIT2, 0x00); // 0000 0000
}
Le schéma de l'ensemble
Merci de votre aide