RaspberryPi wekker (5 / 9 stap)

Stap 5: Het programma

Kopieer het programma van de klok naar uw RaspberryPi.

 /****************************************************************** * Filename: clock.c * * RaspberryPi alarm clock With special reminder feature. * * Compile: gcc -o clock -Wall -I/usr/local/include -L/usr/local/lib * clock.c -lwiringPi -lwiringPiDev * * Execute: sudo ./clock * * All pin numbers are wiringPi numbers unless otherwise specified. ******************************************************************/ #include <time.h> #include <stdio.h> #include <wiringPi.h> #include <lcd.h> static int lcdhandle; // LCD screen char hours[24][3] = {"12","01","02","03","04","05","06","07", "08","09","10","11","12","01","02","03", "04","05","06","07","08","09","10","11"}; char dow[7][4] = {"Sun","Mon","Tue","Wed", "Thu","Fri","Sat"}; char months[12][4] = {"Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec"}; struct tm tm2; // Structures for getting time. int timeh, timem, times; // Current time elements. int date, month, year, wday; int apin = 5; // Alarm button int hpin = 6; // Set hours button int mpin = 12; // Set minutes button int spin = 13; // Special button int PWMpin = 1; // Alarm sound pin int aflag = 0; // Alarm flag int sflag = 0; // special flag int alh = 0; // Alarm hours int alm = 0; // Alarm minutes /********************************************************* * gettime() function - Get system time and load it into * global variables. *********************************************************/ void gettime() { time_t now; char *str; now = time(NULL); // Get the time. str = ctime(&now); // Convert it to a string. strptime(str,"%a %b %d %H:%M:%S %Y",&tm2); // Convert from string. timeh = tm2.tm_hour; // Copy times timem = tm2.tm_min; // into global variables. times = tm2.tm_sec; date = tm2.tm_mday; month = tm2.tm_mon; year = tm2.tm_year; wday = tm2.tm_wday; } /********************************************************* * dsptime() function - Displays the time. *********************************************************/ void dsptime() { lcdPosition (lcdhandle, 6, 0); lcdPrintf(lcdhandle,"%s:", *hours+(timeh*3)); // Display hours lcdPrintf(lcdhandle,"%02d", timem); // Display minutes if(timeh<12) lcdPrintf(lcdhandle," AM"); // Display AM/PM else lcdPrintf(lcdhandle," PM"); lcdPosition (lcdhandle, 0, 1); lcdPrintf(lcdhandle," %s %s %d %d ", *dow+(wday*4), *months+(month*4), date ,(1900+year)); if(sflag>0) { lcdPosition(lcdhandle,0, 3); lcdPrintf(lcdhandle,"* "); } else { lcdPosition(lcdhandle,0, 3); lcdPrintf(lcdhandle," "); } if(aflag==0) lcdPrintf(lcdhandle,"Alarm: OFF "); else { lcdPrintf(lcdhandle,"Alarm: %s:%02d ", *hours+(alh*3), alm); if(alh<12) lcdPrintf(lcdhandle,"AM");// Display AM/PM else lcdPrintf(lcdhandle,"PM"); } } /********************************************************* * dspalarm() function - Display the alarm time. *********************************************************/ void dspalarm() { lcdPosition (lcdhandle, 0, 1); lcdPrintf(lcdhandle,"Set Alarm: %s:%02d ", *hours+(alh*3), alm); if(alh<12) lcdPrintf(lcdhandle,"AM");// Display AM/PM else lcdPrintf(lcdhandle,"PM"); } /********************************************************* * setalarm() function - Set the time for the alarm * and turn it on. *********************************************************/ void setalarm() { lcdClear(lcdhandle); dspalarm(); while(aflag==2) { while(digitalRead(hpin)==0) // Is minute button pressed? { alh++; // Increment alarm hour if(alh>23) alh=0; // Hour can't be > 23 dspalarm(); // Redo the display delay(500); // Time to read it } delay(25); // Debounce while(digitalRead(mpin)==0) // Is minute button pressed? { alm+=5; // Add 5 to alarm minutes. if(alm>59) alm=0; // Minute can't be > 59 dspalarm(); // Redo the display delay(500); // Time to read it } delay(25); // Debounce if(digitalRead(apin)==0) { while(digitalRead(apin)==0); delay(25); aflag = 3; } } } /************************************************************** * main() function **************************************************************/ int main() { int ptime = 70; // previous time after gettime() int pday = 32; // Prevoius day wiringPiSetup(); // Setup required by wiringPi lcdhandle = lcdInit (4, 20, 4, 11,10, 0,2,3,4,0,0,0,0) ; pinMode(apin, INPUT); // Set alarm pin to input pullup pullUpDnControl(apin, PUD_UP); pinMode(hpin, INPUT); // Set hours pin to input pullup pullUpDnControl(hpin, PUD_UP); pinMode(mpin, INPUT); // Set minutes pin to input pullup pullUpDnControl(mpin, PUD_UP); pinMode(spin, INPUT); // Set special pin to input pullup pullUpDnControl(spin, PUD_UP); pinMode (PWMpin, PWM_OUTPUT); // Alarm sound pin pwmSetMode(PWM_MODE_MS); // Mark/Space mode pwmSetClock(100); // Default 100 (int) pwmSetRange(1024); // Default 1024 (unsigned int) int duty = 200; // Duty cycle (0 - range) while(1) { // Get and display system time gettime(); if(ptime != times) { ptime = times; // Save time as previous time dsptime(); // Display the time } // Toggle special flag if black button pressed or new day. if(digitalRead(spin)==0) // If button pressed toggle { // special flag while(digitalRead(spin)==0) // debounce { delay(25); } sflag = !sflag; // toggle } if(date != pday) // Is it a new day? { lcdClear(lcdhandle); sflag = !sflag; // If so toggle special flag, pday = date; // and save date as previous. } // Sound alarm. if(timeh==alh) // If alarm hour { if(timem==alm) // and alarm minute { if(aflag==1) // and alarm flag == 1 { pwmWrite(PWMpin, duty); // sound alarm } } } if(aflag==0) pwmWrite(PWMpin, 0); // Alarm off if button pressed if(timem!=alm) pwmWrite(PWMpin, 0); // or 1 minute has passsed // Turn alarm off, set alarm. if(digitalRead(apin)==0) // Is alarm button pressed? { while(digitalRead(apin)==0) delay(25); // debounce if(aflag==1) aflag=0; // If alarm flag set clear it. else aflag = 2; // If alarm flag clear } if(aflag==2) setalarm(); // run alarm set function if(timem != alm) if(aflag == 3) aflag = 1; } return 0; } 

Compileer het met het commando:
gcc -o clock - Wall - ik/usr/local/include - L/usr/local/lib clock.c - lwiringPi - lwiringPiDev

En voer het uit met het commando: sudo. / klok

Als u het compileren krijg je het volgende waarschuwingsbericht weergegeven:

 clock.c: In function ‘gettime’:<br>clock.c:60:3: warning: implicit declaration of function ‘strptime’ [-Wimplicit-function-declaration] strptime(str,"%a %b %d %H:%M:%S %Y",&tm2); // Convert from string. ^ 

Maak je geen zorgen over het.

Gerelateerde Artikelen

IT - RaspberryPI wekker

IT - RaspberryPI wekker

Hallo jongensIn dit instructable ik zal laten zien een wekker-project dat is gebaseerd op de RaspberryPi en GrovePi + Starter Kit.Haar naam is "Het", dat is het verkorten van de "It's Time". Versie instructabled is 1.3, youtube-video t
Smartphone wekker

Smartphone wekker

Hallo!In dit Instructable zal ik u vertellen hoe maak je een goed uitziende smartphone alarmklok. De wekker wordt de tijd weergegeven, kan het opladen van de telefoon en herbergt een mini versterker en luidspreker. Ik had het idee om te bouwen van de
Wekker met behulp van Atmega-328 en RTC

Wekker met behulp van Atmega-328 en RTC

Hi iedereen! Dit is mijn eerste instructable! Na het lezen van honderden instructables, besloten heb ik om mezelf.Klok is een van de meest essentiële dingen van huis houden. Er zijn verschillende soorten klokken zoals goede oude klokken van de slinge
Chronobot: Een slimme wekker

Chronobot: Een slimme wekker

Chronobot is een slimme wekker die eigen geaardheid kunt voelen. Het is een analoge klok met een geweldig uitziende geval. De klok is vrij eenvoudig om te bouwen en instellen. Het gemaakt met behulp van een mini ardunio en een TFT-scherm. Chronobot i
Muzikale computergebaseerde wekker

Muzikale computergebaseerde wekker

als een college student krijg ik niet genoeg slaap, mijn bed warm en comfortabel is, en ik niet houd van krijgend eruit in de ochtenden.Ik meestal - instellen zoals ik weet zeker dat velen van u als goed - doen een alarm (of twee) op mijn telefoon en
8 x 8 LED Matrix voor RaspberryPi en 3 programma's

8 x 8 LED Matrix voor RaspberryPi en 3 programma's

Dit is een 8 x 8 LED matrix voor een RaspberryPi en drie programma's uit te voeren op het:1 - een "Hello World" programma met een volledige Engelse lettertype.2 - een dobbelspel.3 - een kleine versie van de 8 x 8 van Conway's Game of Life..U moe
Milieu Monitoring met BeagleBone of RaspberryPI en Ardunio

Milieu Monitoring met BeagleBone of RaspberryPI en Ardunio

dit is een project dat ik heb gewerkt voor een tijdje, en nog steeds hebben manieren om te gaan, maar ik heb genoeg succes nu dat ik kan ik delen wat ik heb.  Dit heeft betrekking op een Beaglebone en een Arduino via TTL seriële en I2C, met behulp va
Aflevering 16: De Feather-wekker

Aflevering 16: De Feather-wekker

ben je moe van het moeten wakker worden met die vervelende wekker-Zoemer elke ochtend?Wenst u er was een rustiger en meer zachtere manier om wakker te worden?Nou, weet we hier op stomme uitvindingen hoe je je voelt!Daarom hebben we de Feather Alarm C
Natuurlijke taal klok voor RaspberryPi

Natuurlijke taal klok voor RaspberryPi

Alles wat u nodig hebt is een RaspberryPi, ieder model zal doen.Dit programma is geschreven om te helpen me reacquaint met string handling in C. De RaspberryPi got me geïnteresseerd in programmeren weer na het doen van het niet in ongeveer 20 jaar.Al
Puzzel wekker

Puzzel wekker

In dit instructable ga ik te laten zien hoe het bouwen van een wekker die u toelaat om het instellen van de tijd wakker door het organiseren van de cijfers.Krijg ik nauwelijks ooit in een discussie met mijn vriendje, maar als we dat doen is het bijna
Pacman wekker

Pacman wekker

Dit instructable ontstond in fulfillment van dede eis van het project van de Makecourse bij de Universiteit van Zuid-Florida (www.makecourse.com).Het eindresultaat van dit project was een Pacman Themed klok die een ingestelde tijd worden opgeslagen e
Wekker Pac_Man MP3

Wekker Pac_Man MP3

EngelsDit is mijn eerste instructables :-) sorry voor mijn Engels... Ik ben Frans!Ik heb te bouwen voor mijn dochter een wekker MP3 met het grappige gezicht van Pac_Man (nu ze wakker al alleen)FransC'est mon 1er instructables :-)J'ai construit pour m
Childs Neopixel Sunrise wekker

Childs Neopixel Sunrise wekker

Dit is een eenvoudige wekker die tussen een dag en een nacht beeld schakelt zodat kinderen die niet de tijd vertellen weten wanneer het is aanvaardbaar voor het opstaan in de ochtend. Het samen uit noodzaak werd gegooid toen ik besefte ik onze real k
Wekker met Evive

Wekker met Evive

Wij willen een gecombineerde analoge en digitale wekker. Real Time Clock is essentieel voor de klok tijd te houden zelfs als deze is uitgeschakeld. Maar meestal micro-controller borden zoals Arduino of Raspberry Pi hoeft niet een real timerklok. Noch