/* * dancing3.c * * Created: :53:20 * Author: digpi10 */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.

Relevanta dokument
The Phenomenal Doorbell Bilaga 2. Källkod

Blinkande discogolv. Lunds Tekniska Högskola, LTH Elektro- och informationsteknik. EITF11 Digitala Projekt VT 2014

Källkod. #include <avr/io.h> #include <util/delay.h> #include <avr/interrupt.h> #define green_diode PD5. #define RS PD4

Thunder s Truck projektrapport

TEMPERATURMÄTARE MED GRAFRITARE

Växtviskaren EITF11 Digitala projekt VT15, I12

#include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> unsigned char num;

Digitala Projekt(EITF40) - Larm

Projektrapport Målgång

LARMANLÄGGNING. Digitala Projekt, EITF11. Oskar von Knorring Emin Karimov Henrik Akej Handledare: Bertil Lindvall

Rapport. Fyra i rad-spel. Rapport Digitala Projekt EITF11 Grupp 9 Emma Rasmusson & Louise Ragnarsson Handledare: Bertil Lindvall

Lunds Tekniska Högskola Elektro- och informationsteknik Digitala projekt (EITF11)

Larmcentral. Digitala Projekt. Cecilia Olsson & Erika Björck Handledare: Bertil Lindvall LUNDS TEKNISKA HÖGSKOLA

Laboration 5 C-programmering på AVR TSEA57 Datorteknik I

Projektrapport - Roterande digital LED-klocka

Projektrapport - Feststation

Effektpedal för elgitarr

RAPPORT: DIGITALA PROJEKT

EITF11 - Digitala projekt. Hastighetsmätare. Hugo Backmyr Mattias Karlsson

Digitala Projekt(EITF40) - Larm

Rafiki Wa Kupanda. EITF11, Digitala projekt VT18. Linnea Håkansson, Anton Gunneberg, Ruben Schultz

DIGITALA PROJEKT (EITF40) Fartmätare

JOFEN-Prototypes. Målsökande pansarvagn. Projektarbete i Kursen EITA15. Jonatan Claesson, Olle Jonasson, Felix Rödén, Edvin Rossi & Nils Olén

ETSA01 Digitala Projekt (I) VT- 13. Projektarbete AC Handledare Bertil Lindvall

Rapport i Digitala Projekt (EDI021)

Laboration 4: Knappstuds Drivrutiner för att eliminera störningar.

Digitala Projekt: Digitala Projekt, EITF11 - VT17 Oscar Ahlgren, Patrik Lorentsson och Sten Hellberg Handledare: Bertil Lindvall

Väderstation. Digitala Projekt EITF11 Institutionen för Elektro- och Informationsteknik Lunds Tekniska Högskola

1 Bakgrund 4. 2 Kravspecifikation Definitioner Grundläggande krav Användarfall 5

Digitala Projekt (EITF11) Larmanläggning

Feeding Daisy. EITF11 Lunds Tekniska Högskola. Grupp 12: Pontus Akervall Louise Landare Anton Schölin. En automatisk blomvattnare

AVR 3 - datorteknik. Avbrott. Digitala system 15 hp. Förberedelser

WALL E. WALL EVADER EDI021 DIGITALA PROJEKT

LOOKY LUKE. Caroline Hellström och Ville Orlander Arvola Industriell ekonomi I10. - Att välja en lyckosam väg EITF11 Digitala projekt

EITF11: Bandkanon Grp 05

LTH. EITF11- Digitalaprojekt. Projektrapport WEB

Pulsmätare Digitala Projekt EITF11

Bilen som inte kan krocka

Linjeföljare. Digitala projekt

Digitala Projekt EITF11 Grupp 9 Projektarbete Hanna Bondesson Marcus Skog. Reaktionsspel EITF11

Liftmaestro. Lunds Tekniska Högskola Elektro- och informationsteknik. Olle Gemfors, I13 Dayanand Sagar, I13 Mattias Wendler, I13

High Core Remote Car X8000 Cool

Lunds Tekniska Högskola. I-10 Grupp 11: David Sundström Max Schulz Albert Lundberg Handledare: Bertil Lindvall

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

Rapportsammanfattning. Optima Sous Vide

EITF11 Digitala Projekt TIC TAC TOE. Lukas Ljungblom & Johan Lyckenvik I-13 Handledare: Bertil Lindvall

Pulsmätare. EITF11 Digitala Projekt VT15. Grupp 9: Emma Albertz, Mathilde Hagander & Alexandra Mansner Handledare: Andreas Johansson & Bertil Lindvall

Självgående fordon Rapport i kursen digitala projekt, EDI021

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

Digitala Projekt (EITF11) Hemlarm

Microprocessor / Microcontroller

Ett program som frågar regelbundet om något skall utföras. Exempelvis om spänningen på ett batteri sjunkit under en viss nivå.

Rapport Digitala Projekt EITF Grupp 12 Elin Blomstergren, Victor Sundgren Handledare: Bertil Lindvall. Fyra i rad

Rörelse- och temperaturkänsligt larmsystem

General Purpose registers ALU I T H S V N Z C SREG. Antag att vi behöver skriva in talet 25 till register R18

AVR 5. Styrning av trafikljus. Digitala system 15 p

Väderstation. Datum: Projektarbete vid elektro och informationstekniks institution

Från idé till skapelse av en äkta RoomBot

DANCING ROBOT. EITF11, Grupp 10. Kajsa Salomonsson, Hugo Hedin och Petter Mårtensson

EIT. Digitala projekt EITF11. Larmanläggning. Handledare Bertil Lindvall Anna Lindberg I-11 Caroline Vitasp I-11 Eric Eliason I-10

EITF11. WormFight. Axel Eriksson, Felix Geuken Handledare: Bertil Lindvall EITF11

DIGITALA PROJEKT - EITF11

Musen. Författare: Joel Guedj e02jg Erik Dahlbäck e02ed. Handledare: Bertil Lindvall. Digitala Projekt SK 2005

Microprocessor / Microcontroller. Industrial Electrical Engineering and Automation

Digitala Projekt, EITF40

Kontrollskrivning Mikrodatorteknik CDT S2-704

EITF11 - Digitala Projekt

Datorteknik 2 (AVR 2)

Source code. #undef F_CPU. #define F_CPU UL. #include <avr/io.h> #include <avr/delay.h> #include <string.h> #include <avr/eeprom.

Guitar tuner Digitala Projekt (EITF40)

Digitala projekt, EITF11 - Rapport Handledare: Bertil Lindvall. Fredrik Nylund (ine12fny) Johan Ekman (ine11jek) Olof Wikman (ine11owi)

Kla ggvisarskylt. -med en underton av rassel. av Jonathan So nnerup & Gabriel Jo nsson

#include <pic.h> #include <sys.h> char LEFT,RIGHT,MOTORHASTIGHET;

Institutionen för informationsteknologi

Datorprojekt, del 1. Digitala system 15 p

Linjeföljare Digitala projekt Johan Engström e02je Henrik Persson e02hp

SIMON SAYS Projekt i EITF11 Digitala Projekt

Legorobot. Lär dig programmera en legorobot. Teknikåttan Ola Ringdahl Lena Kallin Westin

THE VISUAL EGGTIMER. Skola: Lunds Tekniska Högskola Institution: Elektro- och informationsteknik Kurs: Digitala projekt (EITF11)

Department of Information Technology Digitala Projekt Frysboxregulator. 10 december 2007

Digitala Projekt. Ljuskänslig riktningsautomatik. Rasmus Persson dt08rp9@student.lth.se Max Åkesson dt07ma4@student.lth.

Digitala projekt VT Myran

Digitala projekt Linjeföljande bil

Projektrapport - RoboWalter

Aml Abbas, Ali Darwish, Ehsanolah Hafezi, Fatima Zahra Doussi Grupp 15

Mekanisk solros, Digitala projekt(edi021) Kristoer Nordvall, Stefan Windfeldt, Inlämmnad: 4 december 2006

Tidsstyrd persiennöppnare

Att bygga och programmera en motordriven robot som kan undvika hinder.

Övning 6. Parallellport, timer

Kör framåt i <TID> sekunder. Kör bakåt i <TID> sekunder. Sväng vänster i <TID> sekunder. Sväng höger i <TID> sekunder

KRYPTERING. 23 maj. Vilken jävla duart?

Lathund Radio M312 Iris Hjälpmedel Januari 2010

FlyBot. Copyright Sagitta Pedagog AB

Systemkonstruktion LABORATION REALTIDSPROGRAMMERING

Guitar Tuner EITF11 Digitala Projekt, Projektrapport Elektro- och informationsteknik

EITF40 - RFID-terminal. Joakim Marculescu (dt08jm6), Eric Johansson (dt08ej6)

Väderstation. EITF11, Digitala projekt RAPPORT. Isabella Bergvik, Emma Sandén & Hanna Åberg

Programmera i teknik - kreativa projekt med Arduino

Lathund. C för inbyggda system

Föreläsningsanteckningar till Konstruktionsmetoder

Transkript:

/* * dancing3.c * * Created: 2016-05-19 10:53:20 * Author: digpi10 */ #include <avr/io.h> #include <avr/interrupt.h> #include <util/delay.h> int value; //värde från AD-omvandlaren int limit = 0b0101000000; //Gräns för ingående värde från mikrofonen. int countbeats; //Räknar hur länge roboten ska lyssna. double counttime; //Gör så roboten reagerar på insignaler mer sällan. int flag = 0; //Varierar med slagen när roboten lyssnar. int tid = 0; //Används för att räkna ut takten. int drivecounter=0; //Håller koll på hur länge roboten har rört sig. int beat = 0; //Håller koll på vilket slag vi är på. double slag; //Antal tidsavbrott per taktslag. /*Sätter de initiala inställningarna*/ void setup(){ DDRA = 0b00000000; //Port A - Alla pins som input DDRB = 0b00001111; //Port B - Pin 0-2 som output (Lysdioderna) DDRD = 0b00111111; //Port D - Pin 0-5 som output (Motor) TCCR0 = 0b00000010; //intern klocka med frekvens 2 mhz/8 TCNT0 = 150; //initieringsvärdet, där timern börjar räkna ifrån TIMSK = 0b00000001; //starta klockan countbeats = 0; counttime = 0; /*Metoder för att styra lampor och motorer*/ void forward(){ PORTD = 0b00011011; void backward(){ PORTD = 0b00101101; void turnrightfor(){ PORTD = 0b00000011; void turnleftfor(){ PORTD = 0b00011000; -1-

void turnrightback(){ PORTD = 0b00000101; void turnleftback(){ PORTD = 0b00101000; void spinright(){ PORTD = 0b00101011; void spinleft(){ PORTD = 0b00011101; void stop(){ PORTD = 0b00000000; void redlight(){ PORTB = 0b00000001; void yellowlight(){ PORTB = 0b00000010; void greenlight(){ PORTB = 0b00000100; void orangelight(){ PORTB = 0b00001000; void alllights(){ PORTB = 0b00001111; void outerlights(){ PORTB = 0b00001001; void innerlights(){ PORTB = 0b00000110; void lightsoff(){ PORTB = 0b00000000; /*Tidsavbrott*/ ISR (TIMER0_OVF_vect){ TCNT0 = 150;//Sätter timerns startvärde till samma som i setup. -2-

TIFR = 0b00000001; //Möjliggör nytt avbrott ADMUX = 0b01000000; //AVCC med extern kondensator på AREF pin, ingen vänsterjustering, Port ADC0 med 1x förstärkning. SFIOR = 0b00000000; //Inga specialfunktioner aktiverade ADCSRA = 0b11011100; //Startar A/D-omvandling counttime++; tid++; drivecounter++; /*A/D-avbrott */ ISR (ADC_vect){ value = ADC; //sparar värdet från mikrofonen ADMUX = 0b01000000; //AVCC med extern kondensator på AREF pin, ingen vänsterjustering, Port ADC0 med 1x förstärkning. ADCSRA = 0b10011100; //nollställer flaggan och möjliggör ny A/D-omvandling /* Körmönster för mellantakt (60 bpm - 120 bpm), åtta taktslag. */ void drivearound(double slag){ drivecounter=0; beat = 0; //De första två slagen outerlights(); //yttre lamporna blinkar innerlights(); //inre lamporna blinkar turnleftfor(); //roboten svänger vänster framåt beat += 2; //De andra två slagen outerlights(); //yttre lamporna blinkar -3-

innerlights(); //inre lamporna blinkar turnrightback(); //roboten svänger höger bakåt beat += 2; //De tredje två slagen outerlights(); //yttre lamporna blinkar innerlights(); //inre lamporna blinkar turnrightfor(); //svänger höger framåt beat += 2; //De fjärde två slagen outerlights(); //yttre lamporna blinkar innerlights(); //inre lamporna blinkar turnleftback(); //svänger vänster bakåt -4-

/* Körmönster för långsam takt (<60 bpm), åtta taktslag. */ void drivearoundslow(double slag){ drivecounter=0; beat = 0; //De första två slagen orangelight(); //orange lampa blinkar, roboten kör fram och tillbaka redlight(); //röd lampa blinkar, roboten kör fram och tillbaka _delay_ms(10); beat += 2; //De andra två slagen orangelight(); //orange lampa blinkar, roboten kör fram och tillbaka redlight(); //röd lampa blinkar, roboten kör fram och tillbaka _delay_ms(10); beat += 2; //De tredje två slagen orangelight(); //orange lampa blinkar, roboten kör fram och tillbaka -5-

redlight(); //röd lampa blinkar, roboten kör fram och tillbaka _delay_ms(10); beat += 2; //De fjärde två slagen orangelight(); //orange lampa blinkar, roboten kör fram och tillbaka redlight(); //röd lampa blinkar, roboten kör fram och tillbaka _delay_ms(10); /* Körmönster för snabb takt (> 120 bpm), åtta taktslag. */ void drivearoundfast(double slag){ drivecounter = 0; beat = 0; //De första två slagen -6-

spinleft(); //roboten snurrar åt vänster beat += 2; //De andra två slagen spinleft(); //roboten snurrar år vänster beat += 2; //De tredje två slagen spinright(); //roboten snurrar åt höger -7-

beat += 2; //De fjärde två slagen spinright(); //roboten snurrar åt höger int main(void) { setup(); sei(); //möjliggör avbrott while(1) { PORTD = 0b00000000; if(value <= limit && counttime >= 50){//då värdet lägre än limit och det gått minst 50 tidsenheter countbeats++; if (countbeats <= 8){ //takten räknas under åtta slag, lamporna lyser efter varande för varje slag if(flag == 0){ redlight(); else if(flag == 1){ yellowlight(); else if(flag == 2){ greenlight(); else if(flag == 3){ orangelight(); if(flag == 0){ -8-

flag = 1; else if(flag == 1){ flag = 2; else if(flag == 2){ flag = 3; else if(flag == 3){ flag = 0; counttime = 0; //efter åtta takslag räknas takten ut if(countbeats == 8){ slag = ((double)tid)/countbeats; //genomsnittligt antal tidsavbrott per slag //beroende på vilken takt som spelas anropas olika körmönster if(countbeats == 9){ int limitlow=2604*0.9; //justerad frekvens int limithigh=1302*0.8+50; //justerad frekvens if(slag > limitlow){ drivearoundslow(slag); else if(limithigh < slag && slag<= limitlow){ drivearound(slag); else{ drivearoundfast(slag); counttime = 0; countbeats=0; tid=0; -9-