Raspberry Pi och Tellstick, ett program i C.

Relevanta dokument
Tellstick-15.c. Kompilering av programmet: gcc -o tellstick-15 -Wall -ltelldus-core -W -O2 -s -pipe -lm tellstick-15.c

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Omtentamen i Programmering C, Fri, Kväll,

En kort text om programmering i C.

Övning från förra gången: readword

printenv sort pager printenv grep args sort pager

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl Tentamen i Programmering C, Fri, Kväll,

(2) Skriv ett program som skapar ett antal processer vars relationer beskrivs av nedanstående tidsdiagram a

Tentamen Datorteknik och realtidssystem, TSEA81 Datum Lokal

2... uppvisa förmåga att skapa och/eller hantera flerprocessiga program där de ingående processerna ges

Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl 13. Omtentamen i Programmering C, 5p, A1, D1, PA1, Fri,

Lämna in en ifylld kursvärdering tillsammans med tentan! Lösningar till uppgifterna sätts ut på kurssidan på nätet i dag kl

Möte 9: Relationer mellan körande processer - (PI)

Och!efter!ca!20!omgångar!hamnade!den!på!en!stabil!konfiguration!enligt!nedan! där!den!stannar!kvar.!

Pekare och arrayer. Indexering och avreferering

... Funktionsanrop. Vad händer när man kör ett program?

Recap Mera om nya typer Kort Fält. Programmering. Sommarkurs Verónica Gaspes. IDE-sektionen.

lex källkod lex.l lexkompilator lex.yy.c C- kompilator lex.yy.c a.out sekvens av tokens a.out input specifikation av tokens mha reguljära uttryck

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

TDP005: Introduktion till Make

Funktionspekare, inledning: funktionsanropsmekanismen. Anrop via pekare

BINÄRA TRÄD. (X = pekarvärdet NULL): struct int_bt_node *pivot, *ny; X X X 12 X X 12 X X -3 X X

Avancerad SSL-programmering II

BMI = (vikt i kg) / (längd i m) 2. Lösningsförslag

Övning 3 i 2D1324. Strukturering h filer deklaration vs definition Debuggning gdb Preprocessorn #define assert(s) FILE LINE Länkning

Poster ( structar ) Postdeklarationer

Föreläsning 13. In- och utmatning

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl

KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: 8-13, den 18 februari 2012

Fö 8 TSEA81. Real-time Linux

Övningar till UNIX/Linux Grundkurs och förslag till LÖSNING

Generell säkerhet. Loggning - Hur mycket ska man logga? Inloggningsrutinerna i Unix. Loggning fortsättning

Operativsystem ID1200/06 Tentamen :00-18:00

Tentamen *:58/ID100V Programmering i C Exempel 3

2 Pekare och dynamiska variabler.

C++ Slumptalsfunktioner + switch-satsen

Programmeringsteknik med C och Matlab

#include <stdio.h> #include <string.h>

Systemnära programmering Tentamen. Systemnära programmering, 7.5hp 5 november 2012

Skriv i mån av plats dina lösningar direkt i tentamen. Skriv ditt kodnummer längst upp på varje blad.

IDA kursmaterial Informationsblad make. make

C++ Lektion Tecken och teckenfält

Programsystemkonstruktion med C++: Övning 1. Karl Palmskog september 2010

Enkla datatyper minne

Pekare ( )

TDIU01 - Programmering i C++, grundkurs

Deklarera en struct som kan användas för att representera en rät linje

Föreläsning 5. Träd Binära träd Binärt sökträd som ADT Implementering av binärt sökträd Travestera binärt sökträd Sökning Insättning/borttagning

Möte 7: Uppföljning av föreläsningen med Peer Instruction - (PI)

Föreläsning 9: Förprocessorn och stora program

TDIU01 - Datortenta (DAT2)

7 Programmeringsteknik

Operativsystem ID1200/06 och ID2200/06 Tentamen TENA 6 hp :00-18:00

Programmering av grafisk display

Programsystemkonstruktion med C++

Programmering av grafisk display

Första exemplet. Kompilator & länkare. Projekt. Övning 1, Ögrupp 4, Programsystemkonstruktion med C++, Ronnie Johansson,

En klass behöver både deklaration och definition. Daniel Aarno Globala funktioner och variabler är OK.

Dagens föreläsning. Specialtecken. Mer om printf. Formateringssträngar. Mer om scanf. Programmeringsteknik för Ingenjörer VT05

Tentamen i Programmering grundkurs och Programmering C

Det finns många flaggor till g++,

Fö 2 TSEA81 Datorteknik och realtidssystem

Abstrakta datastrukturer

Programmering Grundkurs (6H2950) Grundläggande Programmering (6A2001)

HI1024, Programmering, grundkurs, 8hp KTH STH TENTAMEN. HI1024:TEN2 - Praktisk tentamen Tid: Fredagen den 21 oktober 2011,

Programmering i C, 7,5 hp

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

Programmering av inbyggda system. Pekare och Arrayer. Viktor Kämpe

Användning av stack: evaluera uttryck i RPN

3 Listor. 3.1 Envägslistor

4 Sammansatta datatyper

Strategier för att utnytja parallella system. Peter Kjellström NSC Upplysning

Tillämpad programmering

Tentamen i. för D1 m fl, även distanskursen. lördag 19 januari 2013

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Dynamiskt minne. Vad är dynamiskt minne Motivering Hur gör man i C Övningar

Introduktion C-programmering

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

6 Lågnivåprogrammering

Hantering av textsträngar och talsträngar. William Sandqvist

Repetition C-programmering

Grundprogrammen. combine

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Ulf Assarsson. Grundläggande C-programmering del 2 Pekare och Arrayer. Läromoment:

Föreläsning 11. Strängar

Administrivia Programmering Grunderna i C Kortspel. Programmering. Sommarkurs Verónica Gaspes.

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Föreläsning 12. struct

Lösningar till uppgifterna sätts ut på kurssidan och på WebCT (Gamla Tentor) i dag kl 19. Tentamen i Programmering C, 5p, Distans, övriga,

Vad händer när man kör ett program? Program och processer. Funktionsanrop. Avsluta programmet

Gömda kanaler hemlig dataöverföring i en simulerad MLS-miljö i operativsystemet FreeBSD 6.2

Grundläggande C-programmering del 2 Pekare och Arrayer. Ulf Assarsson

Lösningar till tentauppgifterna sätts ut på kurssidan på nätet idag kl 19. Omtentamen i Programmering C, 5p, fristående, kväll,

Föreläsning 9. struct

read Systemanrop i UNIX Exempel med read & write write int antal_tkn, fd, count; char buffer[size]; antal_tkn = read(fd, buffer, count);

Föreläsning 3. Programmering, C och programmeringsmiljö

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

TDIU01 - Programmering i C++, grundkurs

.c och.h filer. Programmeringsteknik 113

översiktskurs (5DV031)

Problemlösning. Veckodagsproblemet Gissa talet Siffersumman

Transkript:

Raspberry Pi och Tellstick, ett program i C. Ett program skrivet i C för att med Tellstick tända och släcka en eller flera lampor. Programmet startas med kommandot: /home/pi/development/cprog/tellstick/tellstick-13 -f </dev/null &>/dev/null & Programmet kommer att skifta loggfil kl 00:01, så kallad loggroll. För att avbryta programmet måste man använda shellkommandot: kill -9 PID där PID, process ID, är det id som sätts på programmet. PID kan hittas med hjälp av shellkommandot ps -ef Programmet tellstick-13. / tellstick 13.c 2014 11 07 Jan Pihlgren 2014 11 16 Loggroll körs varje natt klockan 00:01. Programmet utnyttjar en indatafil där tänd och släcktider anges. PATH/tellstick 13 f Indatafilens organisation: löpnr tändtid släcktid brytarnr/enhetsnr ex: 1 15:00 17:00 2 ordningsnr, tändtid, släcktid, brytarenr Programmet stoppas med kommando: kill 9 PID eller sudo kill 9 PID där PID hittas med kommando ps ef och leta efter startkommandot ovan. / #include <telldus-core.h> #include <time.h> #include <stdio.h>

#include <unistd.h> #include <string.h> #include <stdlib.h> struct strombr { char nr[2]; char ontid[10]; char offtid[10]; char switchnr[2]; ; struct strombr brytare[25]; // Ordningsnummer // Brytarens/enhetens nr // Plats för 25 brytare/enheter char indatafile[] = "/home/pi/script/tidschema_ny.data"; char logfile[] = "/home/pi/temp/tellstick.log"; int antpost =0; int postnr; void loggroll(); void readdata_ny(); int main(int argc, char argv[]) { time_t tid; struct tm info; char buffer[80]; char sec[80]; char klockan[10]; int i; int go = 1; // fortsätt programmet char version[] = "Version: tellstick-13"; char rolltid[] = "00:01"; strcpy(brytare[0].ontid,"18:00"); strcpy(brytare[0].offtid,"06:00"); loggroll(); / Rulla loggfilerna / readdata_ny(); / läs in data för tändtider och släcktider i arra[]

/ FILE fp; if (argc > 1) { if (strcmp(argv[1], "-f") == 0) { / Läsa från datafil om tänd- och släcktider? / / Hämtas data från fil / postnr = 0; / Första tändtiden, post nr 1 / // strcpy(starttid,brytare[postnr].ontid); // strcpy(stopptid,brytare[postnr].offtid); // else{ // strcmp? // fp=fopen(logfile, "a"); fprintf(fp,"%s\n",version); fprintf(fp,"brytare %s\n ",brytare[postnr].switchnr); fprintf(fp,"tändning sker klockan %s\n",brytare[postnr].ontid); fprintf(fp, "Släckning sker klockan %s\n",brytare[postnr].offtid); fclose(fp); while(go!= 0){ time(&tid); info = localtime(&tid); strftime(buffer,80,"%h:%m",info); strcpy(klockan,buffer); strftime(sec,80,"%h:%m:%s",info); fp=fopen(logfile, "a"); for(i = 0; i < antpost; i++){ if(strcmp(klockan,brytare[i].ontid) == 0){ tdturnon(atoi(brytare[i].switchnr)); fprintf(fp,"tänder %s Kl %s\n",brytare[i].switchnr,klockan); if(strcmp(klockan,brytare[i].offtid) == 0){ tdturnoff(atoi(brytare[i].switchnr));

fclose(fp); fprintf(fp,"släcker %s Kl %s\n",brytare[i].switchnr,klockan); loggfilerna data igen / if(strcmp(rolltid,klockan) == 0){ loggroll(); readdata_ny(); // Rulla / läs in fp=fopen(logfile, "a"); fprintf(fp,"%s\n",version); if(strcmp(argv[1],"-f") == 0){ fprintf(fp,"ant poster = %d\n",antpost); fprintf(fp,"tändning kl %s. Släckning kl %s\n",brytare[0].ontid,brytare[0].offtid); fclose(fp); tdclose(); sleep(60); return 0; void loggroll(){ char oldfile1[] = "/home/pi/temp/tellstick.old1"; char oldfile2[] = "/home/pi/temp/tellstick.old2"; char oldfile3[] = "/home/pi/temp/tellstick.old3"; / Radera oldfile3 / remove(oldfile3); / Flytta filer /

rename(oldfile2, oldfile3); // flytta oldfile2 till oldfile3 rename(oldfile1, oldfile2); // flytta oldfile1 till oldfile2 rename(logfile, oldfile1); // flytta logfile till oldfile1 return; void readdata_ny(){ FILE data; data = fopen(indatafile,"r"); antpost=0; while(1){ fscanf(data,"%s",brytare[antpost].nr); fscanf(data,"%s",brytare[antpost].ontid); fscanf(data,"%s",brytare[antpost].offtid); fscanf(data,"%s",brytare[antpost].switchnr); antpost++; if(feof(data)){ antpost--; break; fclose(data); return; Datafilen tidschema_ny.data 1 04:30 07:50 1 2 05:00 06:00 2 3 16:10 19:15 1 4 16:15 17:05 2 Makefile CC=gcc CFLAGS=-Wall -ltelldus-core OBJS = tellstick-13.o

all: ${OBJS ${CC -o tellstick-13 ${CFLAGS ${OBJS tellstick-13.c: ${CC ${CFLAGS -c tellstick-13.c clean: rm -f tellstick-13.o