Rebonjour à tous, j'ai beau me remettre sur ce projet, le redémarrage est difficile. A peine ai-je rallumer le projet et tout branché sur la Uno uniquement, que déjà, l'écran 6 est allumé avec comme valeur : -257 qui reste fixe.
J'ai beau changé la rotation de mon encodeur, vraiment je ne maitrise absolument pas ce qui se passe dans mon code. J'ai juste l'impression de recopier vos codes sans les comprendre. J'aimerai savoir comment améliorer ma compréhension.
Je vous en remercie.
Voici le code compilé sur la Uno :
#include <Adafruit_GFX.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
/*#include <SSD1306Ascii.h>
#include <SSD1306AsciiAvrI2c.h>
#include <SSD1306AsciiSoftSpi.h>
#include <SSD1306AsciiSpi.h>
#include <SSD1306AsciiWire.h>
#include <SSD1306init.h>
*/
#define OLED_RESET 4
Adafruit_SSD1306 ecran(OLED_RESET);
volatile long temp, compteur = 0; //Cette variable augmentera ou diminuera en fonction de la rotation de l'encodeur
volatile long voila = 335;
void TCA9548A(uint8_t bus) {
Wire.beginTransmission(0x70);
Wire.write(1 << bus );
Wire.endTransmission();
}
void displayd() {
ecran.clearDisplay();
ecran.setTextColor(WHITE);
ecran.setTextSize(2);
ecran.setCursor(20, 0);
}
void setup() {
//Serial.begin (115200);
Wire.begin();
Serial.begin(115200);
pinMode(2, INPUT_PULLUP); // entrée pullup interne 2
pinMode(3, INPUT_PULLUP); // entrée pullup interne 3
//Une impulsion montante d'encoder active interrupt0(). AttachInterrupt 0 est sur DigitalPin 2.
attachInterrupt(0, interrupt0, RISING);
//Une impulsion montante d'encoder active interrupt1(). AttachInterrupt 1 est sur DigitalPin 3.
attachInterrupt(1, interrupt1, RISING);
TCA9548A(1);
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
TCA9548A(2);
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
TCA9548A(3);
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
TCA9548A(4);
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
TCA9548A(5);
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
TCA9548A(6);
ecran.begin(SSD1306_SWITCHCAPVCC, 0x3C);
}
void sendLong(long resultat) {
Serial.write(resultat & 0xFF); // Envoi l'octet de poids faible
Serial.write((resultat >> 8) & 0xFF);
Serial.write((resultat >> 16) & 0xFF);
Serial.write((resultat >> 24) & 0xFF); // puis l'octet de poids fort
}
void loop() {
if (Serial.available()) // si il y a des caractères à lire
{
char buf[10];
int n = Serial.readBytesUntil('\n', buf, sizeof buf - 1);
buf[n] = 0; // fin de la chaine
voila = atof(buf);
}
// Envoyer la valeur du compteur
if ( compteur != temp ) {
temp = compteur;
long resultat = temp / 10;
sendLong(resultat);
delay(50);
/*Serial.println (resultat);
Serial.write(resultat);*/
}
voila = Serial.read() + (Serial.read() << 8) + (Serial.read() << 16) + (Serial.read() << 24);
TCA9548A(1);
displayd();
ecran.print("ecran 6");
ecran.setCursor(10, 18);
ecran.print(voila);
ecran.display();
TCA9548A(2);
displayd();
ecran.print("ecran 5");
ecran.setCursor(10, 18);
ecran.print("voila");
ecran.display();
TCA9548A(3);
displayd();
ecran.print("ecran 4");
ecran.setCursor(10, 18);
ecran.print("voila");
ecran.display();
TCA9548A(4);
displayd();
ecran.print("ecran 3");
ecran.setCursor(10, 18);
ecran.print("voila");
ecran.display();
TCA9548A(5);
displayd();
ecran.print("ecran 2");
ecran.setCursor(10, 18);
ecran.print("voila");
ecran.display();
TCA9548A(6);
displayd();
ecran.print("ecran 1");
ecran.setCursor(10, 18);
ecran.print("voila");
ecran.display();
}
void interrupt0() {
if (digitalRead(3) == LOW) {
compteur++;
} else {
compteur--;
}
}
void interrupt1() {
if (digitalRead(2) == LOW) {
compteur--;
} else {
compteur++;
}
}