Menu

Présentation Nomenclature carte display Carte CPU câblage Montage Mise sous tension Software Guide de programmation Menu précédent Accueil

FCALLBOX3 Display Box 

    Guide de programmation    

Description :

La page ci dessous détaille les fonctions de commandes pour la FCallbox display, elles sont données pour Linux, mais sont facilement adaptables à Windows.



   Setup    
   

La FCallbox display est pilotée par port série en TTL (pas en RS232), mais vous pouvez utiliser l'adapteur décrit dans le menu : Mise sous tension.

La configuration du port est de : 115200bps, 8 bits, pas de parité, 1 bit de stop.

Les includes à mettre en début de votre programme (à noter que tous ne sont pas utiles) :

#include ‹stdio.h›
#include ‹string.h›
#include ‹stdlib.h›
#include ‹fcntl.h›
#include ‹unistd.h›
#include ‹sys/ioctl.h›
#include ‹sys/poll.h›
#include ‹unistd.h›
#include ‹sys/types.h›
#include ‹sys/stat.h›
#include ‹sys/un.h›
#include ‹getopt.h›
#include ‹errno.h›
#include ‹termios.h›
#include ‹sys/socket.h›
#include ‹netdb.h›
#include ‹time.h›
// DISPLAY GRAPHICS Defines
#define SIZE_DISPLAY_GRAPHICS 8
#define GRAPHICS_MODE 2
#define TEXT_MODE 0

Fonction pour ouverture du port :

/****************/
/* Open serial port */
/****************/
void OpenPort (char * device)
{
fd_serial = open(device, O_RDWR | O_NOCTTY | FNDELAY);
if (fd_serial < 0)
{
printf ("Error openning device : %s\n",device);
exit(0);
}
bzero(&newtio,sizeof(newtio));
newtio.c_cflag = B115200 | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR | ICRNL;
newtio.c_oflag = 0;
newtio.c_lflag = 0;;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcflush(fd_serial, TCIFLUSH);
tcsetattr(fd_serial,TCSANOW,&newtio);
}


   COMMANDES DISPONIBLES    
   

Les commandes sont sur deux octets , le premier la commande le second la data, les commandes disponibles sont les suivantes :

// COMMANDS DEFINES
#define SET_CHAR_0 0x01
#define SET_CHAR_1 0x02
#define SET_CHAR_2 0x03
#define SET_CHAR_3 0x04
#define SET_CHAR_4 0x05
#define SET_CHAR_5 0x06
#define SET_CHAR_6 0x07
#define SET_CHAR_7 0x08
#define SET_HEURE_DIZAINE 0x09
#define SET_HEURE_UNIT 0x0A
#define SET_MINUTE_DIZAINE 0x0B
#define SET_MINUTE_UNIT 0x0C
#define SET_SECONDE_DIZAINE 0x0D
#define SET_SECONDE_UNIT 0x0E
#define START_STOP_TIME_COMPUTE 0x0F
#define START_STOP_GRAPHICS 0x10
#define START_WRITE_GRAPHICS 0x11
#define DATA_WRITE_GRAPHICS 0x12
#define DISPLAY_ON_OFF 0x13
#define CHECK_SYNC 0x14
#define RESET 0x15
#define GET_VERSION 0x16

A envoyer avec le code suivant :

int DisplaySendCommandData (int Cmd,int data)

{ char c [10];
c[0] = (char) Cmd;
c[1] = 0;
write(fd_serial,&c,1); //write 1 byte to the serial port
RS232_delay_bit();
c[0] = (char) data;
c[1] = 0;
write(fd_serial,&c,1); //write 1 byte to the serial port
RS232_delay_bit();
return 1;
}


   COMMANDES DE SELECTION DE MODE   
   

- Mode Texte ou graphic :


/*************************/
/* set DISPLAY IN TEXT MODE */
/*************************/
void Set_Display_TEXT_MODE(void)
{ DisplaySendCommandData (START_STOP_GRAPHICS,TEXT_MODE); // text mode

}

/*****************************/
/* set DISPLAY IN GRAPHICS MODE */
/*****************************/
void Set_Display_GRAPHICS_MODE(void)
{
DisplaySendCommandData (START_STOP_GRAPHICS,GRAPHICS_MODE); // graphic mode

}

- Mode Start ou stop time:

/********************/
/* DISPLAY START TIME */
/********************/
void Display_START_TIME(void)
{
DisplaySendCommandData (START_STOP_TIME_COMPUTE,0x00);
}

/*******************/
/* DISPLAY STOP TIME */
/*******************/ void Display_STOP_TIME(void)
{
DisplaySendCommandData (START_STOP_TIME_COMPUTE,0x01);
}

- Mode Clear display :

/***************/
/* Clear DISPLAY */
/***************/
void Display_CLEAR(void)
{
DisplaySendCommandData(DISPLAY_ON_OFF,0x00); // clear display Graphics
}


   COMMANDES TEXTE    
   

- Commande pour afficher un chaine de caractères :

/*******************************/
/* Send Text datas to Display matrix */
/*******************************/
void SendTextDisplayMatrix(char * sText)
{
int i;
char Text[8];
// fill end of text with space if lenght < 8
for (i=0;i<8;i++)
{
   if (i>=strlen(sText))
    Text[i]=' ';
   else
    Text[i]=sText[i];
}
DisplaySendCommandData (SET_CHAR_0,Text[0]);
DisplaySendCommandData (SET_CHAR_1,Text[1]);
DisplaySendCommandData (SET_CHAR_2,Text[2]);
DisplaySendCommandData (SET_CHAR_3,Text[3]);
DisplaySendCommandData (SET_CHAR_4,Text[4]);
DisplaySendCommandData (SET_CHAR_5,Text[5]);
DisplaySendCommandData (SET_CHAR_6,Text[6]);
DisplaySendCommandData (SET_CHAR_7,Text[7]);
}



   COMMANDES GRAPHIQUES   
   

- L'organisation de la matrice 5x7 de leds est la suivantes :

- Le premier byte correspond à la rangée de gauche (byte 0)

- Ses bits correspondent aux leds de haut (b7) en bas (b1), b0 n'est pas utilisé :

- Commande pour reseter l'index (de 1 à 39 bytes)

/*********************/
/* reset GRAPHICS index */
/*********************/
void Display_RESET_GRAPHICS_INDEX(void)
{
DisplaySendCommandData(START_WRITE_GRAPHICS,0x00); // reset indx
}

- Commande pour envoyer un byte

/*********************/
/* write data graphics */
/*********************/
void Display_WRITE_GRAPHICS(int data)
{
DisplaySendCommandData(DATA_WRITE_GRAPHICS,data);
}

- Pour l'intégration d'un nouveau graphique généré avec l'outil décrit en fin de page du menu Softwares,

Le fichier généré à la forme suivante :


0xFE,0xC2,0xA2,0x92,0x8A,0x92,0xA2,0xC2,0xFE,0x20,0x7E,0xA0,0xB8,0xA0

- il faut le mettre sous forme de tableau :


char My_graphic[] = { 0xFE,0xC2,0xA2,0x92,0x8A,0x92,0xA2,0xC2,0xFE,0x20,0x7E,0xA0,0xB8,0xA0 };

- Et utiliser le code suivant pour l'envoyer au Display :

// clear Display buffer
for (i=0;i<40;i++)
Graphics[i] = 0;

// Display graphics counter
indx=1;

// PARENT ICON
for (i=0;i<strlen( My_graphic);i++)
   Graphics[indx++]= My_graphic[i];

Graphics[indx++]=0;
// Send data Display graphics
Display_RESET_GRAPHICS_INDEX(); // reset indx

for (i=0;i<5;i++)
{
for (j=7;j>=0;j--)
   Display_WRITE_GRAPHICS(Graphics[j*5+i]); // colonn 5*0+1
}

Set_Display_GRAPHICS_MODE();

NOTE : dans le cas de la Fcallbox display, les icons pour les températures envoyées par la Fcallbox Server, sont définis dans fcallbox.py :

EXTERNAL_ICON_FR = bytearray ([0x20,0x7E,0xE2,0xEE,0xE2,0xEA,0xE2,0x7E,0x20,0x01,0x7C,0x54,0x54,0x01,0x6C,0x10,0x6C,0x00])
KITCHEN_ICON_FR = bytearray ([0x20,0x7E,0xA0,0xB8,0xA0,0xBE,0xA0,0xF8,0x80,0x00,0x7C,0x44,0x44,0x00,0x7C,0x04,0x7C,0x00])
LIVING_ICON_FR = bytearray ([0x20,0x7E,0xA0,0xB8,0xA0,0xBE,0xA0,0xF8,0x80,0x00,0x74,0x54,0x5C,0x00,0x7C,0x54,0x54,0x00])
BEDROOM_ICON_FR = bytearray ([0x60,0x90,0x88,0x44,0x22,0x44,0x88,0x90,0x60,0x00,0x7C,0x44,0x44,0x00,0x7C,0x10,0x7C,0x00])
BATHROOM_ICON_FR = bytearray ([0x20,0x7E,0xBC,0xBC,0xBC,0xBE,0xB8,0xFC,0x80,0x01,0x74,0x54,0x5C,0x01,0x7C,0x54,0x28,0x00])
WC_ICON_FR = bytearray ([0xF0,0x1E,0x1E,0x1E,0x18,0x00,0x00,0x00,0x78,0x04,0x78,0x04,0x78,0x00,0x7C,0x44,0x44,0x00])

EXTERNAL_ICON_EN = bytearray ([0x20,0x7E,0xE2,0xEE,0xE2,0xEA,0xE2,0x7E,0x20,0x01,0x7C,0x54,0x54,0x01,0x6C,0x10,0x6C,0x00])
KITCHEN_ICON_EN = bytearray ([0x20,0x7E,0xA0,0xB8,0xA0,0xBE,0xA0,0xF8,0x80,0x00,0x7C,0x10,0x6C,0x00,0x44,0x7C,0x44,0x00])
LIVING_ICON_EN = bytearray ([0x20,0x7E,0xA0,0xB8,0xA0,0xBE,0xA0,0xF8,0x80,0x00,0x7C,0x04,0x04,0x00,0x44,0x7C,0x44,0x00])
BEDROOM_ICON_EN = bytearray ([0x60,0x90,0x88,0x44,0x22,0x44,0x88,0x90,0x60,0x00,0x7C,0x54,0x38,0x00,0x7C,0x54,0x54,0x00])
BATHROOM_ICON_EN = bytearray ([0x20,0x7E,0xBC,0xBC,0xBC,0xBE,0xB8,0xFC,0x80,0x00,0x7C,0x54,0x38,0x00,0x3C,0x50,0x3C,0x00])
WC_ICON_EN = bytearray ([0xF0,0x1E,0x1E,0x1E,0x18,0x00,0x40,0x7C,0x40,0x00,0x7C,0x44,0x7C,0x00,0x00,0x7C,0x00,0x00])

Télécharger ici le source et l'exécutable au format zip

Copyright François Callanquin, Novembre 2013

Contact : fcallbox@free.fr