Intel® Edison styrelse: Klappa aktiverat klockan (5 / 6 steg)
Steg 5: kod
Följande är C++ kod för Eclipse * IDE för Intel® Edison, installera det och hur du kommer igång: https://software.intel.com/en-us/installing-the-e...
/*
* Författare: Dirk Roziers
* Copyright (c) 2015 Intel Corporation.
*
* Tillstånd beviljas härmed, gratis, till någon person
* en kopia av denna programvara och tillhörande dokumentationsfiler (den
* "Programvara"), i programvaran utan begränsning, inklusive
* utan begränsning rättigheter att använda, kopiera, ändra, sammanfoga, publicera,
* fördela, underlicensiera eller sälja kopior av programvaran, och att
* tillåta personer som programvaran är inredda för att göra det, med förbehåll för
* följande villkor:
*
* Ovanstående copyrightmeddelande och detta tillstånd tillkännagivande skall
* ingår i alla kopior eller betydande delar av programvaran.
*
* PROGRAMVARAN TILLHANDAHÅLLS "I BEFINTLIGT SKICK", UTAN GARANTIER AV NÅGOT SLAG,
* UTTRYCKTA ELLER UNDERFÖRSTÅDDA, INKLUSIVE MEN INTE BEGRÄNSAT TILL GARANTIER AVSEENDE
* SÄLJBARHET, LÄMPLIGHET FÖR ETT SÄRSKILT ÄNDAMÅL OCH
* ICKE-INTRÅNG. UNDER INGA OMSTÄNDIGHETER SKALL FÖRFATTARNA ELLER UPPHOVSRÄTTSINNEHAVARE VARA
* ANSVARIG FÖR EVENTUELLA ANSPRÅK, SKADOR ELLER ANNAT ANSVAR, VARE SIG I EN
* AV KONTRAKTET, KRÄNKNING ELLER ANNAT, SOM UPPSTÅR FRÅN, AV ELLER I ANSLUTNING
* MED PROGRAMVARAN ELLER ANVÄNDNING ELLER ANDRA MELLANHAVANDEN I PROGRAMVARAN.
*/
#include "mraa.h"
#include
#include
#include
int main (int argc, char ** argv)
{
tid current_time;
struct tm * time_info;
char timeString [9]. utrymme för "HH:MM:SS\0"
int timmar, minuter, sekunder.
unsigned int temp_value, light_value, sound_value;
int counter = 1;
int display_on = 0;
unsigned int sound_threshold = 400.
flyta max_light_value = 800,0;
int number_of_sec_to_display_time = 10;
int number_of_sec_to_display_temp = 3;
float resistens.
float temp_celcius;
int temp_celcius_int;
int temp_celcius_decimal_1;
int ljusstyrka;
mraa_aio_context temp_pin;
mraa_aio_context light_pin;
mraa_aio_context sound_pin;
/ * värdet av varje segment enligt binär representation i datablad
64
------
| |
2 | | 32
| 1 |
------
| |
4 | | 16
| |
------
8
index i matrisen = värde av siffra,
dvs digit_value [5] = 5 visas på LED,
digit_value [7] = 7 visas på LED,
digit_value [10] = blank LED
*/
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
};
/*
* binärt värde som ska skickas över SPI att displayen till visningsvärde vvvv vvvv på LED nummer nnnn är: 0000 nnnn vvvv vvvv
* t. ex. ställa 5: e LED från vänster (= 4: e LED från höger) till värde 5 (= 91, se ovan = 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: e siffran = längst till höger siffra, 256 = 0100 hex = 0000 0001 0000 0000 binärt * /
512, / * digit_position [1] = 7: e siffran = 2: a från höger, 512 = 0200 hex = 0000 0010 0000 0000 binärt * /
768, / * digit_position [2] = 6 siffriga * /
1024, / * digit_position [3] = 5: e siffran * /
1280, / * digit_position [4] = 4: e siffran * /
1536, / * digit_position [5] = 3: e siffran * /
1792, / * digit_position [6] = 2: a siffran * /
2048 / * digit_position [7] = 1: a siffran = vänstra siffran * /
/ * index i matrisen = 8 - ställning av siffra på displayen. lämnade de flesta siffra = position 1 * /
};
tempsensor på analoga Pin0 (Aio0), ljussensor på analoga Pin1 (Aio1) och ljud sensor på analoga 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);
om (spi == NULL)
{
printf ("initieringen av spi misslyckades, kontrollera syslog för detaljer, exit... \n");
Exit(1);
}
Välj klicka frekvens till 400 kHz)
mraa_spi_frequency (spi, 400000);
mraa_spi_lsbmode (spi, 0);
MAX7219/21 Chip behöver data i word storlek
om (mraa_spi_bit_per_word (spi, 16)! = MRAA_SUCCESS)
{
printf kunde ("inte ange SPI enheten till 16-bitars läge, utgång... \n");
Exit(1);
};
mraa_spi_write_word (spi, 0x0900); Inte avkoda bitar
mraa_spi_write_word (spi, 0x0a0f); Ljusstyrkan på lysdioderna--0xa00 lägsta, högsta 0xa0f--inställd på högsta till att börja med
mraa_spi_write_word (spi, 0x0b07); Visa alla skanna linjer
mraa_spi_write_word (spi, 0x0c00); Visa - börja med display.
mraa_spi_write_word (spi, 0x0f00); Testmode off
While(true) {
medan (display_on == 0) {
upptäcka ljud för att byta display
sound_value = mraa_aio_read(sound_pin);
om (sound_value > sound_threshold) {
display_on = 1;
mraa_spi_write_word (spi, 0x0c01); Visa på
}
usleep(1000);
}
medan (display_on == 1)
{
temp_value = mraa_aio_read(temp_pin);
light_value = mraa_aio_read(light_pin);
Konvertera temp_value läses in Celcius med datashaeet - Bvalue av sensor = 3975
motstånd = (1023 - temp_value) * 10000 / temp_value; Få motståndet av sensorn
temp_celcius = (1 / (log(resistance / 10000) / 3975 + 1 / 298.15) - 273.15); Konvertera till temperatur via datablad
separat heltal och decimaltal för enklare visning ändamål
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);
timmar = time_info -> tm_hour;
minuter = time_info -> tm_min;
sekunder = time_info -> tm_sec;
/ * TEMP uppvisning LAYOUT xxTT.txxx * /
uint16_t TEMPdata [] = {
/ * 8 siffrigt * / digit_position [0] + digit_value [10],
/ * 7 siffriga * / digit_position [1] +78 / / 78 = värdet för tecknet C (Clecius)
/ * 6 siffriga * / digit_position [2] + digit_value [10],
/ * 5: e siffran * / digit_position [3] + digit_value [temp_celcius_decimal_1],
/ * 4: e siffran * / digit_position [4] + digit_value [temp_celcius_int % 10] +128,
/ * 3: e siffran * / digit_position [5] + digit_value [(temp_celcius_int-temp_celcius_int%10)/10],
/ * 2: a siffran * / digit_position [6] + digit_value [10],
/ * 1: a siffran * / digit_position [7] + digit_value [10]};
/ * TID DISPKAY LAYOUT 1 xxHH.MMxx * /
uint16_t TIMEdata [] = {
/ * 8 siffrigt * / digit_position [0] + digit_value [10],
/ * 7 siffriga * / digit_position [1] + digit_value [10],
/ * 6 siffriga * / digit_position [2] + digit_value [minuter % 10] + (sekunder för %2) * 128,
/ * 5: e siffran * / digit_position [3] + digit_value [(minuter - minutes%10)/10],
/ * 4rd digit * / digit_position [4] + digit_value [timmar % 10] +128,
/ * 3nd digit * / digit_position [5] + digit_value [(hours-hours%10)/10],
/ * 2: a siffran * / digit_position [6] + digit_value [10],
/ * 1: a siffran * / digit_position [7] + digit_value [10]};
/ * TID DISPKAY LAYOUT 2 HH. MM. SS *
/ uint16_t TIMEdata [] = {
/ * 8 siffrigt * / digit_position [0] + digit_value [10],
/ * 7 siffriga * / digit_position [1] + digit_value [sekunder % 10],
/ * 6 siffriga * / digit_position [2] + digit_value [(sekunder - seconds%10)/10],
/ * 5: e siffran * / digit_position [3] + digit_value [minuter % 10] +128,
/ * 4: e siffran * / digit_position [4] + digit_value [(minuter - minutes%10)/10],
/ * 3: e siffran * / digit_position [5] + [timmar % 10] digit_value +128,
/ * 2: a siffran * / digit_position [6] + digit_value [(hours-hours%10)/10],
/ * 1: a siffran * / digit_position [7] + digit_value [10]};
/ * TID DISPKAY LAYOUT 3 HH MM SS *
/ uint16_t TIMEdata [] = {
/ * 8 siffrigt * / digit_position [0] + digit_value [sekunder % 10],
/ * 7 siffriga * / digit_position [1] + digit_value [(sekunder - seconds%10)/10],
/ * 6 siffriga * / digit_position [2] + digit_value [10],
/ * 5: e siffran * / digit_position [3] + digit_value [minuter % 10],
/ * 4: e siffran * / digit_position [4] + digit_value [(minuter - minutes%10)/10],
/ * 3: e siffran * / digit_position [5] + digit_value [10],
/ * 2: a siffran * / digit_position [6] + digit_value [timmar % 10],
/ * 1: a siffran * / digit_position [7] + digit_value [(hours-hours%10)/10]};
ljusstyrka = 2560 + (light_value/max_light_value) * 15; ljusstyrka nivå 0 till 15, kommandot 0x0a00 -> 0x0a0f / / 2560 -> 2575
mraa_spi_write_word (spi, ljusstyrka); Ljusstyrka lysdioder
om (counter == 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); / * Visa temp för number_of_sec_to_display_temp sekunder * /
räknare = 1;
display_on = 0;
mraa_spi_write_word (spi, 0x0c00); Visa off
}
annat
{
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);
räknaren ++;
}
}
}
}