Stap 5: Code
Het volgende is C++-code voor de Eclipse IDE voor Intel® Edison, te installeren en hoe aan de slag: https://software.intel.com/en-us/installing-the-e...
/*
* Auteur: Dirk Roziers
* Copyright (c) 2015 Intel Corporation.
*
* Het is hierbij toegestaan, kosteloos aan eenieder verkrijgen
* een kopie van deze software en bijbehorende documentatie bestanden (de
* "Software"), om aan te pakken in de Software zonder beperking, met inbegrip van
* zonder beperking de rechten te gebruiken, kopiëren, aanpassen, samenvoegen, publiceren,
* distribueren, sublicentiëren en/of verkopen van kopieën van de Software, en om te
* het toestaan van personen aan wie de Software wordt geleverd om dit te doen, behoudens
* de volgende voorwaarden:
*
* De bovenstaande auteursrechtkennisgeving en deze machtigingsaanduiding bedraagt
* opgenomen in alle kopieën of aanzienlijke onderdelen van de Software.
*
* DE SOFTWARE WORDT GELEVERD "AS IS", ZONDER GARANTIE VAN WELKE AARD OOK,
* EXPLICIET OF IMPLICIET, INCLUSIEF MAAR NIET BEPERKT TOT DE GARANTIES VAN
* VERKOOPBAARHEID, GESCHIKTHEID VOOR EEN BEPAALD DOEL EN
* NIET-INBREUKMAKENDHEID. IN GEEN GEVAL DE AUTEURS OF COPYRIGHT HOUDERS WORDEN
* AANSPRAKELIJK VOOR ENIGE CLAIM, SCHADELOOSSTELLING OF ANDERE AANSPRAKELIJKHEID, OP BASIS VAN EEN HANDELING
* VAN CONTRACT, ONRECHTMATIGE DAAD OF ANDERSZINS, DIE VOORTVLOEIT UIT, HET GEVOLG IS VAN OF IN VERBAND
* MET DE SOFTWARE OF HET GEBRUIK OF ANDERE BEWERKING MET BETREKKING TOT DE SOFTWARE.
*/
#include "mraa.h"
#include
#include
#include
int main (int argc, char ** argv)
{
time_t current_time;
struct tm * time_info;
char timeString [9]; ruimte voor "HH:MM:SS\0"
int uren, minuten, seconden;
unsigned int temp_value, light_value, sound_value;
int counter = 1;
int display_on = 0;
unsigned int sound_threshold = 400;
zweven max_light_value = 800.0;
int number_of_sec_to_display_time = 10;
int number_of_sec_to_display_temp = 3;
float weerstand;
float temp_celcius;
int temp_celcius_int;
int temp_celcius_decimal_1;
int helderheid;
mraa_aio_context temp_pin;
mraa_aio_context light_pin;
mraa_aio_context sound_pin;
/ * waarde van elk segment volgens binaire vertegenwoordiging in de gegevensbladweergave
64
------
| |
2 | | 32
| 1 |
------
| |
4 | | 16
| |
------
8
index in matrix = waarde van cijfers,
IE digit_value [5] = laat 5 op LED,
digit_value [7] = laat 7 op LED,
digit_value [10] = leeg 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
};
/*
* de binaire waarde worden verzonden over SPI aan vertoning te weergavewaarde vvvv vvvv op LED getal nnnn is: 0000 nnnn vvvv vvvv
* b.v. 5e LED van links (= 4e LED van rechts) het instellen op waarde 5 (= 91, zie hierboven = 10011011)--> pass 0000 0100 1001 1011
* decimaal = 1024 (0000 0100 0000 0000) + 91 (0000 0000 1001 1011) = 1115
*/
int digit_position [] {} =
256 / * digit_position [0] = 8e cijfer = meest rechtse cijfers, 256 = 0100 hex = 0000 0001 0000 0000 binaire * /
512, / * digit_position [1] = 7e cijfer = 2e van rechts, 512 = 0200 hex = 0000 0010 0000 0000 binaire * /
768, / * digit_position [2] = 6e cijfer * /
1024 / * digit_position [3] = 5e cijfer * /
1280 / * digit_position [4] = 4e cijfer * /
1536 / * digit_position [5] = 3e cijfer * /
1792 / * digit_position [6] = 2e cijfer * /
2048 / * digit_position [7] = 1e cijfer = meest linkse cijfer * /
/ * index in matrix = 8 - positie van cijfers op uit te stallen; de meeste cijfers links = positie 1 * /
};
Temp sensor op analoge Pin0 (Aio0), lichtsensor op analoge Pin1 (Aio1) en correcte sensor op analoge Pin2 (Aio2)
temp_pin = mraa_aio_init(0);
light_pin = mraa_aio_init(1);
sound_pin = mraa_aio_init(2);
mraa_spi_context de spi;
SPI = mraa_spi_init(1);
Als (spi == NULL)
{
printf ("initialisatie van spi mislukt, selectievakje syslog voor details, afrit... \n");
Exit(1);
}
Klik op frequentie ingesteld op 400 kHz)
mraa_spi_frequency (spi, 400000);
mraa_spi_lsbmode (spi, 0);
De MAX7219/21 Chip moet de gegevens in word formaat
Als (mraa_spi_bit_per_word (spi, 16)! = MRAA_SUCCESS)
{
printf kon ("niet SPI apparaat ingesteld op de 16-bits modus, afrit... \n");
Exit(1);
};
mraa_spi_write_word (spi, 0x0900); Niet decoderen bits
mraa_spi_write_word (spi, 0x0a0f); Helderheid van LEDs--0xa00 laagste, hoogste 0xa0f--ingesteld op hoogste om mee te beginnen
mraa_spi_write_word (spi, 0x0b07); Toon alle lijnen van het Scan
mraa_spi_write_word (spi, 0x0c00); Weergeven uit--beginnen met display.
mraa_spi_write_word (spi, 0x0f00); Testâ af
while (true) {}
terwijl (display_on == 0) {}
detecteren van geluid als u wilt overschakelen van weergave op
sound_value = mraa_aio_read(sound_pin);
Als (sound_value > sound_threshold) {}
display_on = 1;
mraa_spi_write_word (spi, 0x0c01); Weergeven op
}
usleep(1000);
}
terwijl (display_on == 1)
{
temp_value = mraa_aio_read(temp_pin);
light_value = mraa_aio_read(light_pin);
Converteren van temp_value lezen in Celsius met behulp van datashaeet - Bvalue van sensor = 3975
weerstand = (1023 - temp_value) * 10000 / temp_value; De weerstand van de sensor te krijgen
temp_celcius = (1 / (log(resistance / 10000) / 3975 + 1 / 298.15) - 273.15); Omzetten van de temperatuur via het gegevensblad
aparte integer en decimaal voor gemakkelijker weergeven doeleinden
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);
uren = time_info -> tm_hour;
minuten = time_info -> tm_min;
seconden = time_info -> tm_sec;
/ * TEMP weergave-indeling xxTT.txxx * /
uint16_t TEMPdata [] {} =
/ * 8e cijfer * / digit_position [0] + [10], digit_value
/ * 7e cijfer * / digit_position [1] + 78, / / 78 = waarde van teken C (Clecius)
/ * 6e cijfer * / digit_position [2] + [10], digit_value
/ * 5e cijfer * / digit_position [3] + [temp_celcius_decimal_1], digit_value
/ * 4e cijfer * / digit_position [4] + [temp_celcius_int % 10] digit_value +128,
/ * 3de cijfer * / digit_position [5] + digit_value [(temp_celcius_int-temp_celcius_int%10)/10],
/ * 2e cijfer * / digit_position [6] + [10], digit_value
/ * 1e cijfer * / digit_position [7] + digit_value [10]};
/ * TIJD DISPKAY lay-out 1 xxHH.MMxx * /
uint16_t TIMEdata [] {} =
/ * 8e cijfer * / digit_position [0] + [10], digit_value
/ * 7e cijfer * / digit_position [1] + [10], digit_value
/ * 6e cijfer * / digit_position [2] + [10 minuten %] digit_value + (%2 seconden) * 128,
/ * 5e cijfer * / digit_position [3] + digit_value [(minuten - minutes%10)/10],
/ * 4 cijferige * / digit_position [4] + [uur 10%] digit_value +128,
/ * 3nd cijfer * / digit_position [5] + digit_value [(hours-hours%10)/10],
/ * 2e cijfer * / digit_position [6] + [10], digit_value
/ * 1e cijfer * / digit_position [7] + digit_value [10]};
/ * TIJD DISPKAY LAY-OUT 2 HH. JMI SS *
/ uint16_t TIMEdata [] {} =
/ * 8e cijfer * / digit_position [0] + [10], digit_value
/ * 7e cijfer * / digit_position [1] + [seconden 10%], digit_value
/ * 6e cijfer * / digit_position [2] + digit_value [(seconden - seconds%10)/10],
/ * 5e cijfer * / digit_position [3] + [10 minuten %] digit_value +128,
/ * 4e cijfer * / digit_position [4] + digit_value [(minuten - minutes%10)/10],
/ * 3de cijfer * / digit_position [5] + [uur 10%] digit_value +128,
/ * 2e cijfer * / digit_position [6] + digit_value [(hours-hours%10)/10],
/ * 1e cijfer * / digit_position [7] + digit_value [10]};
/ * TIJD DISPKAY LAY-OUT 3 HH MM SS *
/ uint16_t TIMEdata [] {} =
/ * 8e cijfer * / digit_position [0] + [seconden 10%], digit_value
/ * 7e cijfer * / digit_position [1] + digit_value [(seconden - seconds%10)/10],
/ * 6e cijfer * / digit_position [2] + [10], digit_value
/ * 5e cijfer * / digit_position [3] + [minuten 10%], digit_value
/ * 4e cijfer * / digit_position [4] + digit_value [(minuten - minutes%10)/10],
/ * 3de cijfer * / digit_position [5] + [10], digit_value
/ * 2e cijfer * / digit_position [6] + [uur 10%], digit_value
/ * 1e cijfer * / digit_position [7] + digit_value [(hours-hours%10)/10]};
helderheid = 2560 + (light_value/max_light_value) * 15; helderheid niveau 0 tot en met 15, opdracht 0x0a00--> 0x0a0f / / 2560--> 2575
mraa_spi_write_word (spi, helderheid); Helderheid van de LED 's
Als (teller == 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); / * weergeven temp voor number_of_sec_to_display_temp seconden * /
Counter = 1;
display_on = 0;
mraa_spi_write_word (spi, 0x0c00); Weer af
}
anders
{
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);
teller ++;
}
}
}
}