Paso 5: código
El siguiente es código de C++ para el IDE Eclipse * para Intel® Edison, para instalar y cómo empezar: https://software.intel.com/en-us/installing-the-e...
/*
* Autor: Dirk Roziers
* Copyright (c) 2015 Intel Corporation.
*
* Permiso se concede por la presente, de forma gratuita, a cualquier persona obtener
* una copia de este software y archivos de documentación asociados (el
* "Software"), en el Software sin restricción, incluyendo
sin la limitación los derechos para utilizar, copiar, modificar, fusionar, publicar,
* distribuir, sublicenciar, y/o vender copias del Software y a
* permitir que las personas a quienes el Software se suministra para ello, sujeto a
* las siguientes condiciones:
*
* El aviso de copyright y este aviso de permiso deberán ser
* incluido en todas las copias o partes importantes del Software.
*
* EL SOFTWARE SE PROPORCIONA "TAL CUAL", SIN GARANTÍA DE NINGÚN TIPO,
* EXPRESA O IMPLÍCITA, INCLUYENDO PERO SIN LIMITARSE A, LAS GARANTÍAS DE
* COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO EN PARTICULAR Y
* FALTA DE INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O LOS TITULARES DEL COPYRIGHT SERÁN
* RESPONSABLE DE CUALQUIER RECLAMACIÓN, DAÑO U OTRA RESPONSABILIDAD, YA SEA EN UNA ACCIÓN
DE LA RESPONSABILIDAD CONTRACTUAL, EXTRACONTRACTUAL O DE OTRO TIPO, QUE SE PRESENTA, FUERA DE O EN CONEXIÓN
* CON EL SOFTWARE O EL USO U OTRAS OPERACIONES EN EL SOFTWARE.
*/
#include "mraa.h"
#include
#include
#include
int main (int argc, char ** argv)
{
time_t current_time;
struct tm * time_info;
timeString Char [9]; espacio para "HH:MM:SS\0"
int horas, minutos, segundos;
unsigned int temp_value, light_value, sound_value;
int contador = 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;
resistencia de flotador;
Float temp_celcius;
int temp_celcius_int;
int temp_celcius_decimal_1;
int brillo;
temp_pin de mraa_aio_context;
light_pin de mraa_aio_context;
sound_pin de mraa_aio_context;
/ * valor de cada segmento según la representación binaria en hoja de datos
64
------
| |
2 | | 32
| 1 |
------
| |
4 | | 16
| |
------
8
Índice de matriz = valor del dígito,
es decir digit_value [5] = muestra 5 LED,
digit_value [7] = 7 pantallas en LED,
digit_value [10] = LED en blanco
*/
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
};
/*
* valor binario enviará sobre SPI para visualización valor vvvv vvvv en LED número nnnn es: 0000 nnnn vvvv vvvv
* por ejemplo, si 5 º LED de la izquierda (= 4 LED de la derecha) en valor 5 (= 91, véase arriba = 10011011)--> pass 0000 0100 1001 1011
* decimal = 1024 (0000 0100 0000 0000) + 91 (0000 0000 1001 1011) = 1115
*/
int digit_position [] = {}
256, / * digit_position [0] = 8 dígitos = dígito de la derecha, 256 = 0100 hexagonal = 0000 0001 0000 0000 binario * /
512, / * digit_position [1] = 7 dígitos = 2 º de derecho, 512 = 0200 hex = 0000 0010 0000 0000 binario * /
768, / * digit_position [2] = 6 dígitos * /
1024, / * digit_position [3] = 5 dígitos * /
1280, / * digit_position [4] = 4 dígitos * /
1536, / * digit_position [5] = 3 dígitos * /
1792, / * digit_position [6] = 2 dígitos * /
2048 / * digit_position [7] = 1er dígito = dígito más a la izquierda * /
/ * Índice de matriz = 8 - posición de dígito en pantalla; dígito a la izquierda = posición 1 * /
};
sensor de temperatura en analógico Pin0 (Aio0), sensor de luz analógico Pin1 (Aio1) y sensor de sonido analógica Pin2 (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 ("inicialización de spi no, verificación Registro del sistema para más detalles, salida... \n");
Exit(1);
}
Conjunto, haga clic en frecuencia a 400 kHz)
mraa_spi_frequency (spi, 400000);
mraa_spi_lsbmode (spi, 0);
El Chip MAX7219/21 necesita los datos de tamaño de palabra
Si (mraa_spi_bit_per_word (spi, 16)! = MRAA_SUCCESS)
{
printf ("puede no configurar dispositivo SPI para modo de 16 bits, salida... \n");
Exit(1);
};
mraa_spi_write_word (spi, 0x0900); No decodifican bits
mraa_spi_write_word (spi, 0x0a0f); Brillo de LEDs - 0xa00 menor, 0xa0f más alto - establecer más alto para comenzar con
mraa_spi_write_word (spi, 0x0b07); Mostrar todas las líneas de exploración
mraa_spi_write_word (spi, 0x0c00); Mostrar apagado--empezar con pantalla.
mraa_spi_write_word (spi, 0x0f00); Testmode apagado
mientras {}
mientras que (display_on == 0) {}
detectar el sonido para activar la pantalla
sound_value = mraa_aio_read(sound_pin);
Si (sound_value > sound_threshold) {}
display_on = 1;
mraa_spi_write_word (spi, 0x0c01); Mostrar en
}
usleep(1000);
}
mientras que (display_on == 1)
{
temp_value = mraa_aio_read(temp_pin);
light_value = mraa_aio_read(light_pin);
Convertir la lectura en grados Celsius utilizando datashaeet - Bvalue del sensor de temp_value = 3975
resistencia = (1023 - temp_value) * 10000 / temp_value; Obtener la resistencia del sensor de
temp_celcius = (1 / (log(resistance / 10000) / 3975 + 1 / 298.15) - 273.15); Convertir a la temperatura a través de la hoja de datos
separar más fácil entero y decimal para mostrar efectos
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);
horas = time_info -> tm_hour;
minutos = time_info -> tm_min;
segundos = time_info -> tm_sec;
/ * XxTT.txxx de disposición de la pantalla TEMP * /
uint16_t TEMPdata [] = {}
/ * 8 dígitos * / digit_position [0] + digit_value [10],
/ * 7 dígitos * / digit_position [1] + 78, / / 78 = valor del carácter C (Clecius)
/ * 6 dígitos * / digit_position [2] + digit_value [10],
/ * 5 dígitos * / digit_position [3] + digit_value [temp_celcius_decimal_1],
/ * 4 dígitos * / digit_position [4] + digit_value [temp_celcius_int % 10] +128,
/ * 3 dígitos * / digit_position [5] + digit_value [(temp_celcius_int-temp_celcius_int%10)/10],
/ * 2 dígitos * / digit_position [6] + digit_value [10],
/ * 1er dígito * / digit_position [7] + digit_value [10]};
/ * TIEMPO DECOATIVE diseño 1 xxHH.MMxx * /
uint16_t TIMEdata [] = {}
/ * 8 dígitos * / digit_position [0] + digit_value [10],
/ * 7 dígitos * / digit_position [1] + digit_value [10],
/ * 6 dígitos * / digit_position [2] + digit_value [minutos % 10] + (%2 segundos) * 128,
/ * 5 dígitos * / digit_position [3] + digit_value [(minutos - minutes%10)/10],
/ * 4 º dígito * / digit_position [4] + digit_value [horas % 10] +128,
/ * 3 º dígito * / digit_position [5] + digit_value [(hours-hours%10)/10],
/ * 2 dígitos * / digit_position [6] + digit_value [10],
/ * 1er dígito * / digit_position [7] + digit_value [10]};
/ * TIEMPO DECOATIVE DISEÑO 2 HH. MM. SS *
/ uint16_t TIMEdata [] = {}
/ * 8 dígitos * / digit_position [0] + digit_value [10],
/ * 7 dígitos * / digit_position [1] + digit_value [segundos % 10],
/ * 6 dígitos * / digit_position [2] + digit_value [(segundos - seconds%10)/10],
/ * 5 dígitos * / digit_position [3] + digit_value [minutos % 10] +128,
/ * 4 dígitos * / digit_position [4] + digit_value [(minutos - minutes%10)/10],
/ * 3 dígitos * / digit_position [5] + digit_value [horas % 10] +128,
/ * 2 dígitos * / digit_position [6] + digit_value [(hours-hours%10)/10],
/ * 1er dígito * / digit_position [7] + digit_value [10]};
/ * TIEMPO DECOATIVE DISEÑO 3 HH MM SS *
/ uint16_t TIMEdata [] = {}
/ * 8 dígitos * / digit_position [0] + digit_value [segundos % 10],
/ * 7 dígitos * / digit_position [1] + digit_value [(segundos - seconds%10)/10],
/ * 6 dígitos * / digit_position [2] + digit_value [10],
/ * 5 dígitos * / digit_position [3] + digit_value [minutos % 10],
/ * 4 dígitos * / digit_position [4] + digit_value [(minutos - minutes%10)/10],
/ * 3 dígitos * / digit_position [5] + digit_value [10],
/ * 2 dígitos * / digit_position [6] + digit_value [horas % 10],
/ * 1er dígito * / digit_position [7] + digit_value [(hours-hours%10)/10]};
brillo = 2560 + (light_value/max_light_value) * 15; comando de 0 a 15, nivel brillo 0x0a00--> 0x0a0f / / 2560--> 2575
mraa_spi_write_word (spi, brillo); Brillo de LED
Si (contador == 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); / * Mostrar la temp number_of_sec_to_display_temp segundos * /
contador = 1;
display_on = 0;
mraa_spi_write_word (spi, 0x0c00); La exhibición de
}
otra cosa
{
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);
contador ++;
}
}
}
}