Go Down

Topic: Afficheur Lextronic Comfile SGN-M4 (Read 2430 times) previous topic - next topic

katapulp

Jul 12, 2011, 03:15 pm Last Edit: Jul 18, 2011, 05:35 pm by katapulp Reason: 1
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] (initialisation de l'afficheur, adresse &HE0)
SEROUT 8,30,0,0[&HE0,1, "P"] (affichage du caractère "P" à la première place)

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

En vous remerciant par avance pour votre aide.

katapulp

#1
Jul 12, 2011, 04:09 pm Last Edit: Jul 12, 2011, 04:18 pm by katapulp Reason: 1
Je m'auto-réponds après avoir essayé de multiples solutions:

Code: [Select]



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...

skywodd

Bonjour,

Pour afficher 1337 puis leet:

Code: [Select]
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.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !


skywodd

Je garanti toujours rien mais cela devrait t'aider.

Code: [Select]
/* 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);
}

Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !


skywodd

Si ça fonctionne fait le savoir je le garderai de coté ;)
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

katapulp

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

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

Code: [Select]

// 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;
  } 
 

}

Go Up