Étape 5: Code
Ce qui suit est du code C++ pour l’IDE Eclipse * pour Intel® Edison, installer et comment commencer : https://software.intel.com/en-us/installing-the-e...
/*
* Auteur : Dirk Roziers
* Copyright (c) 2015 Intel Corporation.
*
* L’autorisation est accordée par les présentes, gratuitement, à toute personne qui obtient
* une copie de ce logiciel et les fichiers de documentation associée (le
* "Logiciel"), pour faire face dans le logiciel sans restriction, y compris
* sans s’y limiter les droits d’utiliser, copier, modifier, fusionner, publier,
* distribuer, concéder en sous-licence, ou vendre des copies du logiciel et à
permis de personnes à qui le logiciel est fourni pour ce faire, sous réserve de
* les conditions suivantes :
*
* La mention de copyright ci-dessus et cette notification de permission doivent être
* inclus dans toutes les copies ou les parties importantes du logiciel.
*
* LE LOGICIEL EST FOURNI « TEL QUEL », SANS GARANTIE D’AUCUNE SORTE,
* EXPRESSE OU IMPLICITE, Y COMPRIS MAIS SANS S’Y LIMITER LES GARANTIES DE
* QUALITÉ MARCHANDE, D’ADEQUATION A UN USAGE PARTICULIER ET
* ABSENCE DE CONTREFAÇON. EN AUCUN CAS LES AUTEURS OU TITULAIRES DE DROIT D’AUTEUR SERA
* RESPONSABLE DE TOUTE RÉCLAMATION, DOMMAGE OU AUTRE RESPONSABILITÉ, QUE CE SOIT DANS UNE ACTION
* DE LA RESPONSABILITÉ CONTRACTUELLE, DÉLICTUELLE OU AUTRE, RÉSULTANT D’OU EN RELATION
* AVEC L’UTILISATION DU LOGICIEL OU AUTRES TRANSACTIONS DANS LE LOGICIEL.
*/
#include « mraa.h »
#include
#include
#include
int main (int argc, char ** argv)
{
time_t current_time ;
struct tm * time_info ;
timeString Char [9] ; espace pour "HH:MM:SS\0"
int heures, minutes, secondes ;
unsigned int temp_value, light_value, sound_value ;
int compteur = 1 ;
int display_on = 0 ;
unsigned int sound_threshold = 400 ;
float max_light_value = 800,0 ;
int number_of_sec_to_display_time = 10 ;
int number_of_sec_to_display_temp = 3 ;
résistance du flotteur ;
float temp_celcius ;
int temp_celcius_int ;
int temp_celcius_decimal_1 ;
int luminosité ;
mraa_aio_context temp_pin ;
mraa_aio_context light_pin ;
mraa_aio_context sound_pin ;
/ * valeur de chaque segment selon une représentation binaire dans Fiche technique
64
------
| |
2 | | 32
| 1 |
------
| |
4 | | 16
| |
------
8
index dans array = valeur du chiffre,
C’est à dire digit_value [5] = affiche 5 LED,
digit_value [7] = affiche 7 LED,
digit_value [10] = LED blanc
*/
int digit_value [] = {}
126, / * 2 + 4 + 8 + 16 + 32 + 64 * /
48, / * 16 + 32 * /
109, / * 1 + 4 + 8 + 32 + 64 * /
121, / * 1 + 8 + 16 + 32 + 64 * /
51, / * 1 + 2 + 16 + 32 * /
91, / * 1 + 2 + 8 + 16 + 64 * /
95, / * 1 + 2 + 4 + 8 + 16 + 64 * /
112, / * 16 + 32 + 64 * /
127, / * 1 + 2 + 4 + 8 + 16 + 32 + 64 * /
115, / * 1 + 2 + 16 + 32 + 64 * /
0
};
/*
* valeur binaire à envoyer plus de SPI à vvvv vvvv valeur d’affichage d’affichage à LED nnnn numéro est : 0000 nnnn vvvv vvvv
* par exemple affectant 5 LED de gauche (= 4 LED de droite) valeur 5 (= 91, voir ci-dessus = 10011011)--> pass 0000 0100 1011 1001
* décimale = 1024 (0000 0100 0000 0000) + 91 (0000 0000 1001 1011) = 1115
*/
int digit_position [] = {}
256, / * digit_position [0] = 8 chiffres = chiffres plus à droite, 256 = 0100 hex = 0000 0001 0000 0000 binaire * /
512, / * digit_position [1] = 7 chiffres = 2ème de droite, 512 = 0200 hex = 0000 0010 0000 0000 binaire * /
768, / * digit_position [2] = 6 chiffres * /
1024, / * digit_position [3] = 5 ème * /
1280, / * digit_position [4] = 4 chiffres * /
1536, / * digit_position [5] = 3ème chiffre * /
1792, / * digit_position [6] = 2e chiffre * /
2048 / * digit_position [7] = 1er chiffre = chiffre plus à gauche * /
/ * index dans array = 8 - position des chiffres sur l’afficheur ; la plupart des chiffres à gauche = position 1 * /
};
capteur de température sur analogique Pin0 (Aio0), capteur de lumière sur la Pin1 analogiques (Aio1) et son capteur sur Pin2 analogiques (Aio2)
temp_pin = mraa_aio_init(0) ;
light_pin = mraa_aio_init(1) ;
sound_pin = mraa_aio_init(2) ;
mraa_spi_context spi ;
SPI = mraa_spi_init(1) ;
Si (spi == NULL)
{
printf ("initialisation de spi a échoué, vérifiez syslog pour plus de détails, exit... \n") ;
sortie (1) ;
}
Cliquez sur Set fréquence à 400 kHz)
mraa_spi_frequency (spi, 400000) ;
mraa_spi_lsbmode (spi, 0) ;
La puce MAX7219/21 requiert les données en format word
Si (mraa_spi_bit_per_word (spi, 16)! = MRAA_SUCCESS)
{
printf ("ne pourrait pas définir SPI périphérique en mode 16 bits, sortie... \n") ;
sortie (1) ;
};
mraa_spi_write_word (spi, 0x0900) ; Pas décoder les bits
mraa_spi_write_word (spi, 0x0a0f) ; Luminosité des LED--le plus bas 0xa00, 0xa0f plus haut--la valeur plus élevée à commencer par
mraa_spi_write_word (spi, 0x0b07) ; Afficher toutes les lignes de balayage
mraa_spi_write_word (spi, 0x0c00) ; Afficher hors--commencer avec affichage.
mraa_spi_write_word (spi, 0x0f00) ; Testmode hors
while (true) {}
même si (display_on == 0) {}
détecter les sons pour allumer l’écran
sound_value = mraa_aio_read(sound_pin) ;
Si (sound_value > sound_threshold) {}
display_on = 1 ;
mraa_spi_write_word (spi, 0x0c01) ; Affichez sur
}
usleep(1000) ;
}
même si (display_on == 1)
{
temp_value = mraa_aio_read(temp_pin) ;
light_value = mraa_aio_read(light_pin) ;
Convertir temp_value lecture en Celcius en utilisant datashaeet - Bvalue du capteur = 3975
résistance = (1023 - temp_value) * 10000 / temp_value ; Obtenir la résistance du capteur
temp_celcius = (1 / (log(resistance / 10000) / 3975 + 1 / 298,15) - 273,15) ; Convertir température via datasheet
séparer plus facilement les entière et décimale pour affichage fins
temp_celcius_int = temp_celcius ;
temp_celcius_decimal_1 = temp_celcius * 10 - temp_celcius_int * 10 ;
Time(¤t_time) ;
time_info = localtime(¤t_time) ;
strftime (timeString, sizeof(timeString), « % H: % m: %S », time_info) ;
heures = time_info -> tm_hour ;
minutes = time_info -> tm_min ;
secondes = time_info -> tm_sec ;
/ * DISPOSITION affichage TEMP xxTT.txxx * /
uint16_t TEMPdata [] = {}
/ * chiffre 8 * / digit_position [0] + digit_value [10],
/ * chiffre 7 * / digit_position + 78 [1], / / 78 = valeur du caractère C (Clecius)
/ * 6 chiffres * / digit_position [2] + digit_value [10],
/ * 5 ème * / digit_position [3] + digit_value [temp_celcius_decimal_1],
/ * 4 chiffres * / digit_position [4] + digit_value [temp_celcius_int % 10] +128,
/ * 3ème chiffre * / digit_position [5] + digit_value [(temp_celcius_int-temp_celcius_int%10)/10],
/ * 2ème chiffre * / digit_position [6] + digit_value [10],
/ * 1er chiffre * / digit_position [7] + digit_value [10]} ;
/ * XxHH.MMxx DECOATIVE mise en page 1 heure * /
uint16_t TIMEdata [] = {}
/ * chiffre 8 * / digit_position [0] + digit_value [10],
/ * chiffre 7 * / digit_position [1] + digit_value [10],
/ * 6 chiffres * / digit_position [2] + digit_value [minutes % 10] + (2 % de secondes) * 128,
/ * 5 ème * / digit_position [3] + digit_value [(minutes - minutes%10)/10],
/ * à 4 chiffres * / digit_position [4] + digit_value [h % 10] +128,
/ * 3ème chiffre * / digit_position [5] + digit_value [(hours-hours%10)/10],
/ * 2ème chiffre * / digit_position [6] + digit_value [10],
/ * 1er chiffre * / digit_position [7] + digit_value [10]} ;
/ * TEMPS DECOATIVE DISPOSITION 2 HH. MM. SS *
/ uint16_t TIMEdata [] = {}
/ * chiffre 8 * / digit_position [0] + digit_value [10],
/ * chiffre 7 * / digit_position [1] + digit_value [% 10 secondes]
/ * 6 chiffres * / digit_position [2] + digit_value [(secondes - seconds%10)/10],
/ * 5 ème * / digit_position [3] + digit_value [minutes % 10] +128,
/ * 4 chiffres * / digit_position [4] + digit_value [(minutes - minutes%10)/10],
/ * 3ème chiffre * / digit_position [5] + digit_value [h % 10] +128,
/ * 2ème chiffre * / digit_position [6] + digit_value [(hours-hours%10)/10],
/ * 1er chiffre * / digit_position [7] + digit_value [10]} ;
/ * TEMPS DECOATIVE DISPOSITION 3 HH MM SS *
/ uint16_t TIMEdata [] = {}
/ * chiffre 8 * / digit_position [0] + digit_value [% 10 secondes]
/ * chiffre 7 * / digit_position [1] + digit_value [(secondes - seconds%10)/10],
/ * 6 chiffres * / digit_position [2] + digit_value [10],
/ * 5 ème * / digit_position [3] + digit_value [minutes % 10],
/ * 4 chiffres * / digit_position [4] + digit_value [(minutes - minutes%10)/10],
/ * 3ème chiffre * / digit_position [5] + digit_value [10],
/ * 2ème chiffre * / digit_position [6] + digit_value [h % 10],
/ * 1er chiffre * / digit_position [7] + digit_value [(hours-hours%10)/10]} ;
luminosité = 2560 + (light_value/max_light_value) * 15 ; commande de 0 à 15, niveau de luminosité 0x0a00--> 0x0a0f / / 2560--> 2575
mraa_spi_write_word (spi, luminosité) ; Luminosité des LED
Si (compteur == number_of_sec_to_display_time + 1)
{
mraa_spi_write_buf_word (spi, TEMPdata, 2) ;
mraa_spi_write_buf_word (spi, TEMPdata, 4) ;
mraa_spi_write_buf_word (spi, TEMPdata, 6) ;
mraa_spi_write_buf_word (spi, TEMPdata, 8) ;
mraa_spi_write_buf_word (spi, TEMPdata, 10) ;
mraa_spi_write_buf_word (spi, TEMPdata, 12) ;
mraa_spi_write_buf_word (spi, TEMPdata, 14) ;
mraa_spi_write_buf_word (spi, TEMPdata, 16) ;
usleep(number_of_sec_to_display_temp*1000000) ; / * affichage temp pour number_of_sec_to_display_temp secondes * /
compteur = 1 ;
display_on = 0 ;
mraa_spi_write_word (spi, 0x0c00) ; Afficher hors
}
d’autre
{
mraa_spi_write_buf_word (spi, TIMEdata, 2) ;
mraa_spi_write_buf_word (spi, TIMEdata, 4) ;
mraa_spi_write_buf_word (spi, TIMEdata, 6) ;
mraa_spi_write_buf_word (spi, TIMEdata, 8) ;
mraa_spi_write_buf_word (spi, TIMEdata, 10) ;
mraa_spi_write_buf_word (spi, TIMEdata, 12) ;
mraa_spi_write_buf_word (spi, TIMEdata, 14) ;
mraa_spi_write_buf_word (spi, TIMEdata, 16) ;
usleep(1000000) ;
compteur ++ ;
}
}
}
}