Intro till mikrokontroller felsökning (och en Pomodoro Timer) (9 / 9 steg)

Steg 9: Super rörmokare Pomodoro Timer kod!



main.c


#include "msp430g2211.h"
#include "notes.h"

unsigned int klick = 0;
unsigned int sekunder = 0;
unsigned int minuter = 0;
unsigned int new_minute = 0;
CONST unsigned int pomodoro_length = 25;
CONST unsigned int pomodoro_break = 5;

#define LED4 BIT1


#define LED3 BIT2
#define LED2 BIT3
#define LED1 BIT4
#define LED0 BIT5
#define SUMMERN BIT6
#define POWER BIT7

void setLEDs (char-värde) {
IF(Value & 0x10)
P1OUT | = (LED4); ställa in LED4 på
annat
P1OUT & = ~ (LED4); iväg för LED4

IF(Value & 0x08)
P1OUT | = (LED3); ställa in LED3 på
annat
P1OUT & = ~ (LED3); iväg för LED3

IF(Value & 0x04)
P1OUT | = (LED2); ställa in LED2 på
annat
P1OUT & = ~ (LED2); kvitta LED2

IF(Value & 0x02)
P1OUT | = (LED1); ställa in LED1 på
annat
P1OUT & = ~ (LED1); kvitta LED1

IF(Value & 0x01)
P1OUT | = (LED0); ställa in LED0 på
annat
P1OUT & = ~ (LED0); iväg för LED0
}

void main (void) {

unsigned int pomodoro_remain = pomodoro_length + pomodoro_break;

WDTCTL = WDTPW + WDTHOLD; Stoppa watchdog timer för att undvika timeout återställa

BCSCTL1 = CALBC1_1MHZ; DCO inställd på 1MHz fabriken kalibreringsvärde
DCOCTL = CALDCO_1MHZ;

P1DIR | = (LED0 + LED1 + LED2 + LED3 + LED4 + SUMMERN + POWER); alla LED stift och Summer som utgång
P1DIR | = MAKT; MAKT är på tills vi vill döda vår egen makt
P1OUT & = ~ (LED0 LED1 LED2 + LED3 + LED4 + + Summer); alla lysdioder och summern off

CCTL0 = CCIE; CCR0 avbrott aktiverad
CCR0 = 50000; klockan divisor
TACTL = TASSEL_2 + MC_1; SMCLK, upmode
_BIS_SR(GIE); Aktivera avbrott

setLEDs(pomodoro_remain);
playTheme();

While(pomodoro_remain) {
IF(Minutes > new_minute) {
new_minute = minuter;
pomodoro_remain--;
setLEDs(pomodoro_remain);
IF(pomodoro_remain == pomodoro_break) {
playFlagTune();
} annat {
pip (G2, 124); .25 pip, utom när vi når rasten
}
}
}

play1up(); slutliga chime
P1OUT & = ~ (POWER); kvitta POWER
Sova för evigt... inte ska nå detta, men vem vet? :)
_BIS_SR (LPM1_bits + GIE);

}

Timer A0 avbrottstjänstens rutin
#pragma vektor = TIMERA0_VECTOR
__interrupt void Timer_A (void)
{
Vi kommer att bli synad på 1Mhz / 50k = 20 gånger en sekunder
klick ++;
om (klickar på > = 20) {
klick = 0;
sekunder ++; Advance klocka för varje sekund
om (sekunder > = 60) {
sekunder = 0;
minuter ++;
}
}
}

Notes.h


Detta bör inte vara här, men jag hade bråttom att lämna in
innan tävlingen körde tidsfristen ut :)
#define SUMMERN BIT6

Definition av de anteckningar frequecies i Hertz.
#define C8 4186
#define B7 3951
#define As7 3729
#define A7 3520
#define Gs7 3322
#define G7 3136
#define Fs7 2960
#define F7 2794
#define E7 2637
#define Ds7 2489
#define D7 2349
#define Cs7 2217
#define C7 2093
#define B6 1976
#define As6 1865
#define A6 1760
#define Gs6 1661
#define G6 1568
#define Fs6 1480
#define F6 1397
#define E6 1319
#define Ds6 1245
#define D6 1175
#define Cs6 1109
#define C6 1047
#define B5 988
#define As5 932
#define A5 880
#define Gs5 831
#define G5 784
#define Fs5 740
#define F5 698
#define E5 659
#define Ds5 622
#define D5 587
#define Cs5 554
#define C5 523
#define B4 494
#define Som4 466
#define A4 440
#define Gs4 415
#define G4 392
#define Fs4 370
#define F4 349
#define E4 330
#define Ds4 311
#define D4 294
#define Cs4 277
#define C4 262
#define B3 247
#define As3 233
#define A3 220
#define Gs3 208
#define G3 196
#define Fs3 185
#define F3 175
#define E3 165
#define Ds3 156
#define D3 147
#define Cs3 139
#define C3 131
#define B2 123
#define As2 117
#define A2 110
#define Gs2 104
#define G2 98
#define Fs2 92
#define F2 87
#define E2 82
#define Ds2 78
#define D2 73
#define Cs2 69
#define C2 65
#define B1 62
#define As1 58
#define A1 55
#define Gs1 52
#define G1 49
#define Fs1 46
#define F1 44
#define E1 41
#define Ds1 39
#define D1 37
#define Cs1 35
#define C1 33
#define B0 31
#define As0 29
#define A0 28

void delay_ms (unsigned int ms) {
unsigned int i;
för (jag = 0; jag < = ms; i ++)
__delay_cycles(1000);
}

void delay_us (unsigned int oss) {
unsigned int i;
för (jag = 0; jag < = oss; i ++)
__delay_cycles(1);
}

Den här funktionen genererar den fyrkantsvåg som gör piezo speaker låter en determinated frekvens.
{Ogiltig beep (unsigned int note, lång varaktighet)

lång fördröjning = (long)(62500/note); Detta är semiperiod för varje not.
lång tid = (long)((duration*100)/delay); Detta är hur mycket tid vi måste spendera på anteckningen.

för (länge jag = 0; jag < tid; i ++) {


P1OUT | = SUMMER; Ställ in Summer på...
delay_us(delay); .. .för en semiperiod...
P1OUT & = ~ Summer; .. .så återställa det...
delay_us(delay); .. .för den andra semiperiod.
}
}

void playTheme(void) {
Tema
4|ee-e-ce-g---|| c---e-ga-FG-e-CD---||
//3|-------------g----|| ---g--e--a-b-AA-g---b---||
//2|-------------g----|| ---------------------------------||
pip (E4, 124); pip (E4, 124); delay_ms(124);
pip (E4, 124); delay_ms(124);
pip (C4, 124); pip (E4, 124); delay_ms(124);
pip (G4, 124); delay_ms(496);
pip (G3, 124); delay_ms(496);
pip (C4, 124); delay_ms(248);
pip (G3, 124); delay_ms(248);
pip (E3, 124); delay_ms(248);
pip (A3, 124); delay_ms(124);
pip (B3, 124); delay_ms(124);
pip (As3 124); pip (A3, 124); delay_ms(124);
pip (G3, 124); pip (E4, 124); delay_ms(124);
pip (G4, 124); pip (A4, 124); delay_ms(124);
pip (F4, 124); pip (G4, 124); delay_ms(124);
pip (E4, 124); delay_ms(124);
pip (C4, 124); pip (D4, 124); pip (B4, 124);
låter bättre utan den sista raden om inte loopas
}

void play1up(void) {
1UP ljud
pip (E5, 62); delay_ms(62);
pip (G5, 62); delay_ms(62);
pip (E6, 62); delay_ms(62);
pip (C6, 62); delay_ms(62);
pip (D6, 62); delay_ms(62);
pip (G6, 312);
}

void playFlagTune (void) {
flagga *
pip (G2, 124);
pip (C3, 124);
pip (E3, 124);
pip (G3, 124);
pip (C4, 124);
pip (E4, 124);
pip (G4, 372);
pip (E4, 372);

pip (Gs2, 124);
pip (C3, 124);
pip (Ds3, 124);
pip (Gs3, 124);
pip (C4, 124);
pip (Ds4, 124);
pip (Gs4, 372);
pip (Ds4, 372);

pip (As2, 124);
pip (D3, 124);
pip (F3, 124);
pip (As3 124);
pip (D4, 124);
pip (F4, 124);
pip (Som4, 372);
pip (Som4, 124);
pip (Som4, 124);
pip (Som4, 124);
pip (E4, 372);
}

Se Steg
Relaterade Ämnen

Dimmer pack felsökning och reparation Clipsal C-bus

När jag renoverade mitt hus beslutat jag att installera Clipsal C-Bus dimmer förpackningar som en del av mitt hem automationssystem. Allt var bra men med tiden började jag uppleva ett oroande fel. Efter en lampa blåser den kanal som den var ansluten...

Fläkt RPM med inre hall effekt sensor och Arduino (Intro till hårdvara avbryta och LCD display)

För mitt andra projekt för arbete, jag var tvungen att mäta rotationshastigheten av rotoren i varv Per minut (RPM) av en modifierad dator fläkt. Den hade tre kablarna kommer ut och som kryssat mig som kanske har något sätt att kontrollera sin hastigh...

Intro till utskrift Silkscreen - Tips och Essentials

när närmar sig ett projekt som kräver silkscreen tryck har du 2 huvudsakliga uppsättningar av val1) att använda vinyl eller använda foto emulsionvinyl är snabbare och billigare, men kräver en vinyl fräs för de flesta projektFoto emulsion - kan göras...

INTRO till ARDUINO UNO-R3

Hej killar, du vet vad en arduino ombord är. Men som nybörjare (eller) en nybörjare kan du möta en svårighet i att välja rätt styrelsen från det breda utbudet av styrelser i Arduino familj.För dig föreslå jag starkt Arduino UNO – R3 att komma igång m...

Med hjälp av Cerberus för att aktivera ADB Android felsökning på telefon med sprucken skärm

Jag tappade min Nexus 4 på nyårsafton och skärmen knäckt. Jag fortfarande kunde se bilderna men digitizer slutade fungera, så det enda jag kunde göra var att ansluta den till datorn och säkerhetskopian mappar jag hade tillgång till. Jag var intresser...

Nybörjarguide till felsökning i MPLABX med ChipKIT PRO MX7 av DIGILENT

Detta Instructable är en Nybörjarguide till felsökning kod programmerat i MPLAB X IDE v2.0. De åtgärder som omfattas är gemensam tillämpning av debugger programvara och problem jag stött på som en nybörjare användare och en oerfaren programmerare. In...

Felsökning, test och förbi SPDT Power Trim Tilt reläer för båtar

felsökning, test och förbi SPDT Power Trim Tilt reläerElektrisk trim och tilt pumpmotorn rör sig inte alls? Elektriskt trim och tilt pumpmotorn endast köras i en riktning, bara upp eller bara ner?Praktiska verktyg: voltmeter, 2 tråd byglar, kontakta...

3D-skrivare grunderna och felsökning: FDM skrivare

Detta Instructable är att hjälpa med att förstå grunderna i 3D-utskrifter och felsökning av de vanligaste problemen med FDM 3D-skrivare. Dessa bilder är tagna från ett bildspel som jag skapat för att hjälpa människor med 3D-utskrifter.Vad är en 3D-sk...

Konfiguration av MKS Sbase v1.2 32-bitars Controller grunderna och intro till Smoothieware.

ProlougeJag är verkligen glad att se hur denna grundläggande intro till Smoothieware och MKS Sbase 1.2 controller har fått så mycket uppmärksamhet, och hoppas verkligen att det kommer att hjälpa människor att komma igång eller besluta att inte.Jag ha...

Början Microcontrollers del 8: Lägga till en knapp till mikrokontroller och göra det göra något

En mycket enkel och lätt sätt att tillhandahålla för mänsklig interaktion med mikrokontroller är att infoga en knapp i kretsen. Att kommunicera med datorer som använder två viktigaste inmatningsenheter: musen och tangentbordet. Ett tangentbord är ing...

Arduino felsökning - brytpunkter, Tracepoints och uttryck

denna handledning visar hur du kommer igång med Arduino debug verktyg från Visuella Micro. Debug verktyget är integrerat i utvecklingssystemet Microsoft Visual Studio Professional som också ger 100% kompatibel Arduino programmering, kompilera och lad...

Intro till partikeln fotonen och IoT

1. Vänligen njuta av min första Instructable2. jag är bara en ödmjuk nybörjare, strävar efter att vara en bra programmerare, så snälla, inga hatiska kommentarer (jag inte tror faktiskt jag måste nämna att gemenskapen är ganska trevligt här)3. Vänlige...

Intro till perspektiv och konstruktion ritning

Här är grunderna för att lärande perspektiv och konstruktion ritning, från enkelt rita linje till en och två punkt perspektiv. Med dessa 8 steg kan du lära dig grundläggande färdigheter att gälla konstruktion ritning, design och andra typer av formel...

Intro till Robotics

Robotar går snabbt från tecken och koncepten som endast återfinns i science fiction till del av vår vardag. Även om de kan ibland verkar vara elektromekaniska mysterier, blir personliga robotics mer tillgängliga varje dag! Billigare, högre kvalitet,...

Intro till LED Strips

LED strips är ett mycket roligt och effektivt sätt att ge massor av glöd och färg till ett projekt. I detta Instructable lär du dig de grundläggande typer av band och hur man kan koppla in dem till Intel Edison med Arduino breakout ombord. Dessa kret...

Intro till Arduino

An Arduino är en öppen källkod microcontroller utveckling styrelsen. På ren svenska, kan du använda Arduino att läsa sensorer och styra saker som motorer och lampor. Här kan du ladda upp program till denna styrelse som sedan kan interagera med saker...

Intro till EL (Electroluminescent) binder

På det centrala är EL wire en tunn, flexibel tråd överdrag i fosfor, när växelström (AC) är tillämpas det glöder ljust. Vill använda nätström, används växelriktare för att omvandla batteri (DC) att de nödvändiga kraven. EL tejp, paneler och EL färg (...

Avancerad CMD felsökning för det Pro

Om du inte har genomfört kriminalteknisk analys på Wi-Fi sedan denna fantastiska verktyg från Microsoft {Gloriously begravd i CMD} sparar du tid och också ge dig fantastiska detaljerad vy i nätverket. Vill du se alla de hemliga SSID: er i ditt område...

Början Microcontrollers del 2: Att skapa ett SPI gränssnitt från programmeraren till mikrokontroller

Hej, hoppas vi du gillade del 1 av början Microcontrollers. Vi ska flytta i del 2 och börja prata om gränssnitt och hur du får din microcontroller att kommunicera med en dator.Så, vid denna punkt, du bör känna till begreppet mikrokontroller (MCU). Du...