Afficheur Lextronic Comfile SGN-M4

Bonjour,

j'ai acheté le module d'affichage sériel Comfile SGN-M4 chez Lextronic dont la documentation est disponible à cette adresse: http://www.lextronic.fr/~lextronic_doc/SGN-S4.pdf

3 fils seulement, TX, 5v et GND.

Je rencontre des difficultés pour lire les commandes fournies dans la doc page 7: SEROUT 8,30,0,0&HE0,&HA4 SEROUT 8,30,0,0&HE0,1, "P"

Comment dois-je formater les commandes avec Arduino? Quand dois-je faire des retour chariots?

En vous remerciant par avance pour votre aide.

Je m'auto-réponds après avoir essayé de multiples solutions:

void setup() {
  
  Serial.begin(9600);

}
void loop() {

   // initialise le module
  Serial.print(0xE0, BYTE); // E0
  Serial.println(0xA4, BYTE); // A4
  // affiche le point du premier chiffre
  Serial.print(0xE0, BYTE); // 0E
  Serial.println(0xD1,BYTE); // D1
  
}

Ca fonctionne, mais je cherche toujours comment afficher un chiffre...

Bonjour,

Pour afficher 1337 puis leet:

void setup() {
  Serial.begin(9600);
  
  Serial.print(0xE0, BYTE); // slave address
  Serial.print(0xA4, BYTE); // Init com
  
}
void loop() {

  /* Display 16 bit Hexa */
  Serial.print(0xE0, BYTE); // slave address
  Serial.print(0xFA, BYTE); // Hexa display
  Serial.print(0x37,BYTE); // LSB
  Serial.print(0x13,BYTE); // MSB
  
  delay(5000);
  
  /* Display 4char String */
  Serial.print(0xE0, BYTE); // slave address
  Serial.print(0x01, BYTE); // Digit 1
  Serial.print('L'); // char
  Serial.print(0xE0, BYTE); // slave address
  Serial.print(0x02, BYTE); // Digit 2
  Serial.print('E'); // char
  Serial.print(0xE0, BYTE); // slave address
  Serial.print(0x03, BYTE); // Digit 3
  Serial.print('E'); // char
  Serial.print(0xE0, BYTE); // slave address
  Serial.print(0x04, BYTE); // Digit 4
  Serial.print('t'); // char
  
}

Je garanti pas que ça marche j'ai pas eu le temps de tester sur mon afficheur.

Je confirme, ça fonctionne!

Merci!

Je garanti toujours rien mais cela devrait t'aider.

/* Init slave */
void 7seg_begin(byte address = 0xE0){
  Serial.print(address, BYTE); // slave address
  Serial.print(0xA4, BYTE); // Init com
}

/* Display 16 bit Hexa */
void 7seg_hexa(byte b1, byte b2, byte address = 0xE0){
  Serial.print(address, BYTE); // slave address
  Serial.print(0xFA, BYTE); // Hexa display
  Serial.print(b1,BYTE); // LSB
  Serial.print(b2,BYTE); // MSB
}

/* Display char */
void 7seg_char(char dc, byte digit, byte address = 0xE0){
  Serial.print(address, BYTE); // slave address
  Serial.print(digit, BYTE); // Digit 1
  Serial.print(dc); // char
}

/* Display 4 char String */
void 7seg_string(char d1, char d2, char d3, char d4, byte address = 0xE0){
  Serial.print(address, BYTE); // slave address
  Serial.print(0x01, BYTE); // Digit 1
  Serial.print(d1); // char
  Serial.print(address, BYTE); // slave address
  Serial.print(0x02, BYTE); // Digit 2
  Serial.print(d2); // char
  Serial.print(address, BYTE); // slave address
  Serial.print(0x03, BYTE); // Digit 3
  Serial.print(d3); // char
  Serial.print(address, BYTE); // slave address
  Serial.print(0x04, BYTE); // Digit 4
  Serial.print(d4); // char
}

/* Show (and if blink) decimal point on digit */
void 7seg_dpoint(byte digit, boolean blink = false, byte address = 0xE0){
  switch(digit){
  case 1:
    Serial.print(address, BYTE); // slave address
    if(blink)
      Serial.print(0xD6, BYTE);
    else
      Serial.print(0xD1, BYTE);
    break;
  case 2:
    Serial.print(address, BYTE); // slave address
    if(blink)
      Serial.print(0xD7, BYTE);
    else
      Serial.print(0xD2, BYTE);
    break;
  case 3:
    Serial.print(address, BYTE); // slave address
    if(blink)
      Serial.print(0xD8, BYTE);
    else
      Serial.print(0xD3, BYTE);
    break;
  case 4:
    Serial.print(address, BYTE); // slave address
    if(blink)
      Serial.print(0xD9, BYTE);
    else
      Serial.print(0xD4, BYTE);
    break;
  }
}

/* Stop blink of all decimal point */
void 7seg_noblink(byte address = 0xE0){
  Serial.print(address, BYTE); // slave address
  Serial.print(0xDF, BYTE);
}

/* Hide all decimal point */
void 7seg_nopoint(byte address = 0xE0){
  Serial.print(address, BYTE); // slave address
  Serial.print(0xD0, BYTE);
}

Super! Thanks for sharing :)

Si ça fonctionne fait le savoir je le garderai de coté ;)

Je n’ai pas testé ton code mais je ne vois pas de raison que ça ne fonctionne pas! :slight_smile:

Ci-dessous quelques fonctions que j’utilise dans mon projet de réveil pour afficher et/ou faire défiler du texte.

// LCD

// ------------------------------------------------------------------------------------

// lcd set chars
void set_lcd(String digit, boolean point) {
  
    // display time
    if (digit.length() < 5) {          
      for (int i = 0; i < digit.length(); i++){
          Serial1.print(0xE0, BYTE);
          Serial1.print(byte((i+1)), BYTE);
          Serial1.print(digit.charAt(i) );
       }
    }  
    
    
    // display point
    if (point) {
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xD2, BYTE); // display point
    }
    
    
}

// ------------------------------------------------------------------------------------

// lcd blink digits
void blink_lcd(int digit) {
 
   switch(digit) {
      case 1: // blink digits 1 and 2
        Serial1.print(0xE0, BYTE);
        Serial1.print(0xF1, BYTE);
        Serial1.print(0xE0, BYTE);
        Serial1.print(0xF2, BYTE);
        break;
      case 2: // blink digits 3 and 4
        Serial1.print(0xE0, BYTE);
        Serial1.print(0xF3, BYTE);
        Serial1.print(0xE0, BYTE);
        Serial1.print(0xF4, BYTE);
        break;
      case 3: // blink all
        Serial1.print(0xE0, BYTE);
        Serial1.print(0xF0, BYTE);    
        break;
      case 0: // stop blinking
        Serial1.print(0xE0, BYTE);
        Serial1.print(0xFF, BYTE);   
        break;        
   }
     
}

// ------------------------------------------------------------------------------------

// reset blinking and points
void points_lcd(int mode, boolean blinking=false) {
  
  switch (mode) {
    case 0: // hide all points
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xD0, BYTE);
      break;
    case 1:
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xD1, BYTE);
      if (blinking) { Serial1.print(0xE0, BYTE); Serial1.print(0xD6, BYTE);}
      break; 
    case 2:
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xD2, BYTE);
      if (blinking) { Serial1.print(0xE0, BYTE); Serial1.print(0xD7, BYTE);}
      break;   
    case 3:
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xD3, BYTE);
      if (blinking) { Serial1.print(0xE0, BYTE); Serial1.print(0xD8, BYTE);}
      break;     
    case 4:
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xD4, BYTE);
      if (blinking) { Serial1.print(0xE0, BYTE); Serial1.print(0xD9, BYTE);}
      break;
    case 5: // stop blinking
      Serial1.print(0xE0, BYTE);
      Serial1.print(0xDF, BYTE);
      break;  
  }
}

// ------------------------------------------------------------------------------------
// scroll text

/*
- declare boolean scrolling and int counter_scroll
- put this in your loop:

    if (scrolling) {
      scroll_lcd(text_scroll, counter_scroll);
    }

*/

void scroll_lcd(String text, int text_position) {
  
  // hide stuff
  if (text_position==0) {
    points_lcd(0);

  }

  // start scrolling  
  if (text_position < (text.length()+1)) {
   
      refresh_time=false;

        if ((millis()-timer_scroll) > scroll_speed) { // metronome
      
         for (int i = 0; i < 5; i++){
            Serial1.print(0xE0, BYTE);
            Serial1.print(byte((i+1)), BYTE);
            
            // continue to scroll even if text is over
            if ((i+text_position) < text.length()) {
             Serial1.print(text.charAt(i+text_position));
            }
            else {
             Serial1.print(" "); 
            }
         }
         
      counter_scroll+=1;
      timer_scroll=millis(); 
    }
  }
  else {
     counter_scroll=0;
     scrolling=false; 
  }  
  

}