LTH Ingenjörhögskolan vid Campus Helsingborg. Mastermindspel

Relevanta dokument
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

Projektrapport - RoboWalter

TETRIS. LTH, Campus Helsingborg EITA15 Digitala System

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

Projekt EITA15. Väckarklocka. LTH Ingenjörshögskolan vid Campus Helsingborg Datateknik

Digitala Projekt(EITF40) - Larm

Digitala projekt Linjeföljande bil

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

The Intelligent Timer

EITF11 - Digitala Projekt

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

Snake. Digitala Projekt (EITF11) Fredrik Jansson, I-12 Lunds Tekniska Högskola,

Temperaturmätare med lagringsfunktion DIGITALA PROJEKT EITF11 GRUPP 14, ERIK ENFORS, LUDWIG ROSENDAL, CARL MIKAEL WIDMAN

Växtviskaren EITF11 Digitala projekt VT15, I12

Bilen som inte kan krocka

Projektlaboration 4, synkronisering av klockan

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

Digitala Projekt (EITF11) Hemlarm

Lunds Tekniska Högskola EITF11 Digitala projekt. Bandspelaren

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

Digitala System Projekt - EITA15 VT *SUPER DUPER KLOCKAN*

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

Datorteknik 1 (AVR 1)

TEMPERATURMÄTARE MED GRAFRITARE

Thunder s Truck projektrapport

Rapport Digitala Projekt EITF11 Grupp 4 Axel Sundberg, Jakob Wennerström Gille Handledare: Bertil Lindvall

Projektrapport i Digitala System

Effektpedal för elgitarr

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

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

Helena Harrysson och Linnéa Wickberg

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

Projektrapport Målgång

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

The Secure Light. Digitala Projekt EITF11. Hanna Tinglöf, I-12 Anna Horvath, I-12 Filippa Österlin, I-12. Handledare: Bertil Lindvall

Digitala Projekt VT13. PING-Pong

PlantPuppy Räddaren för den som inte kan hålla växterna vid liv

Digitala Projekt(EITF40) - Larm

Projektrapport - Roterande digital LED-klocka

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

Pulsmätare med varningsindikatorer

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

Projektrapport Digitala System

Pulsmätare Digitala Projekt EITF11

PROJEKTTYP: Rapportsammanfattning STUDENTER: Larsson, J. ( ) och Oredsson, J. ( ) DATUM: 26 april, 2015

Digitala Projekt (EITF11) Larmanläggning

Rapportsammanfattning. Optima Sous Vide

DIGITALA PROJEKT Väderstation

Digitala projekt, EDI021 Rapport Handledare: Bertil Lindvall

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

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

Gustaf Backman, Anton Nystedt, Nicholas Peebo Battleships. Lunds tekniska högskola. EITF11 Digitala projekt

Whac A mole. Ett rektionstest i kursen Digitala Projekt EITF11 utfört av: Axel Spångberg I10 Marcus Witting I10. Handlett av: Bertil Lindvall

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

Digitala Projekt (EITF11)

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

Digitala Projekt. Chip Quiz. Projektmedlemmar: Olov Nordenstam och Linus Hägerbrand. Grupp 9

The Phenomenal Doorbell Bilaga 2. Källkod

DIGITALA PROJEKT (EITF40) Fartmätare

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

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

Digitalt Projekt: Radiostyrd Bil

Projektrapport - Feststation

Department of Information Technology Digitala projekt. SuperKull. Daniel Öhman Alexander Persson

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

Avståndsmätare. Digitala System EITA Grupp 7. Abdelsalem Yabrag, Abdulhadi kikar, Fredrik Peterson, Jesper Annefors

High Core Remote Car X8000 Cool

Innehållsförteckning. Figur- och tabellförteckning. Figure 1 Blockschema över hårdvaran...4 Figure 2 Blockschema över programet...

PROJEKTRAPPORT EDA095 NÄTVERKSPROGRAMMERI

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

Datorteknik 2 (AVR 2)

TEMPERATUR OCH VINDMÄTARE MED HÖGTALARFUNKTION

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

Innehåll. 1 Inledning 3

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

Digitala projekt VT Myran

EDI021 Digitala projekt. Rapport LARMSYSTEM. Utförd av: Niklas Eklund E03 David Olsson E04. Inlämnad:

EITF11: Bandkanon Grp 05

AVR Studio 4 Och AVRFLASH

Projekt Digitala system. Rörelsekänsligt Larmsystem

Laboration 5. Temperaturmätning med analog givare. Tekniska gränssnitt 7,5 p. Förutsättningar: Uppgift: Temperatur:+22 C

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

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

Studera databladen för LCD på sid 4, 5, 7, 8, 14, 18, 19, 20 och 23. Datablad finns på kurshemsidan.

C++ Slumptalsfunktioner + switch-satsen

DIGITALA PROJEKT - EITF11

Konstruktion av en radiostyrd legobil. Digitala projekt av Arbon Vata Leonardo Vukmanovic Amid Bhatia

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

Modbus Seriell Kommunikation

Övning 7. Timer, serieport

Support Manual HoistLocatel Electronic Locks

LUNDS TEKNISKA HÖGSKOLA. Väderstation. Digitala Projekt, EITF11. Martin Olofsson, I08 & Fredrik Oher, I08 Vt 2012

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

Enkla datatyper minne

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

SIMON SAYS Projekt i EITF11 Digitala Projekt

GPIO - General Purpose Input Output

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

Transkript:

LTH Ingenjörhögskolan vid Campus Helsingborg Mastermindspel Handledare: Bertil Lindvall, Lars-Göran Larsson 2019 Projektarbete för kursen Digitala System, EITA15 Utförd av: Henrik Brange, Linus Piggott, Christoffer Larsson 1

Sammanfattning Detta är en rapport för ett projekt utfört under vårterminen 2019 som del av kursen Digitala System (EITA15) given på Lunds Tekniska Högskola vid Campus Helsingborg. Syftet med projektet var att för studenterna att öva på att samarbeta med att utveckla en produkt utifrån en kravspecifikation. Produkten i fråga är ett spel som kallas Mastermind som går ut på att en spelare ska gissa en kombination av färger i en sekvens. För varje gissning får spelaren reda på hur många av gissningarna var av rätt färg och hur många som var av rätt färg och på rätt plats i sekvensen. Spelet byggdes på ett mönsterkort och består utav en skärm av typ uoled-128g2, en ATmega1284-mikrokontroller och ett antal knappar. Abstract This paper is a report on a project done during the spring term of 2019 as part of the course Digitala System (EITA15) at Lunds Tekniska Högskola in Helsingborg. The purpose of the project was for the students to practice cooperating on developing a product from a required specification. The product in question is a game called Mastermind. The game is played by the player guessing a sequence of colors. The game then responds by letting the player know the number of correct colors in the guessed sequence, as well as the number of correct colors in the correct places in the sequence. The game was built on a circuit board and consists of a uoled-128g2-screen, an ATmega1284 microcontroller and a set of buttons. 2

Innehållsförteckning 1. Inledning 4 2. Kravspecifikation 5 3. Hårdvara 6 5. Metod 7 6. Resultat 8 7 Diskussion 9 8 Källförteckning 10 9 Appendix 11 3

1. Inledning Kursen Digitala system, EITA15, vid Lunds Tekniska Högskola, innehåller ett projektmoment där studenterna fördelas i grupper för att skapa en konstruktion relevant till kursen. Studenterna fick själva välja vad för konstruktion de ville skapa och de skrev själva sin kravspecifikation. Utrustning som behövdes tillhandahölls utifrån denna specifikationen. Denna rapport avhandlar ett sådant projekt, specifikt skapandet av ett Mastermind-spel. Mastermind är ett spel där en spelare gissar en kombination av färger i en viss ordning [2]. För varje gissning får spelaren reda på hur många av gissningarna var av rätt färg och hur många som var av rätt färg och på rätt plats i sekvensen. Därefter görs nya gissningar med hjälp av informationen man fått tillbaka. Om spelaren inte har nått fram till rätt färgsekvens inom ett visst antal gissningar förlorar spelaren. Spelet konstruerades med hjälp av ett mönsterkort, en uoled-128g2, en ATmega1284 och ett antal knappar och resistorer. Mikrokontrollern programmerades i C med hjälp av Atmel studio. Syftet bakom detta projektet var att ge studenterna erfarenhet av projektarbete, något som är vanligt förekommande för ingenjörer. Eleverna skulle även göra sig förstådda på relationen mellan hårdvara och mjukvara, informationssökning i diverse tekniska dokument och programspråket C. Som mål är att projektarbetet ska vara färdigt, tillsammans med en tillhörande rapport och hemsida, samt en presentation av projektet. Ett par anledningar till varför ett Mastermind-spel valdes som projekt är för att det är ett bra sätt att utnyttja en flerfärgad skärm samt att ett spel var av alla gruppmedlemmars intresse. 4

2. Kravspecifikation 2.1 Hårdvara: - Det ska finnas en display. - På displayen ska vi ha ett Mastermind-spel. - Det ska finnas fyra knappar för att kontrollera vad som händer på skärmen. 2.2 Mjukvara: - Tre av knapparna ska användas till att skifta mellan färger för de tre. - Den fjärde knappen ska användas för att låsa in kombinationen av färger man gissar. - Kombinationen man ska gissa skall slumpgenereras. - När man låser in sin nuvarande gissning, så ska programmet ta reda på om gissningen är rätt eller fel. - Om gissningen är fel så ska: - Skärmen visa hur många färger som finns på rätt plats i en gissning. - Skärmen visa hur många färger som finns i den korrekta kombinationen, men på fel plats. - Om gissningen är korrekt så ska: - Den korrekta kombinationen visas. 5

3. Hårdvara 3.2.1 ATmega1284 [1]: Denna mikrokontroller av märket Atmel användes för att programmera själva Mastermindspelet. Det är en 8-bitars AVR mikrokontroller med RISC-baserad arkitektur. Mikrokontrollern har en mängd olika funktioner däribland två USART-portar som användes för att kommunicera med skärmen. 3.2.2 uoled-128g2 [3]: Denna 1.5, 128x128, flerfärgade OLED-display (Organic Light-Emitting Diod) av 4D Systems användes för att se resultaten av programmeringen som gjordes. Innehåller en egen processor kallad Goldelox som tolkar den information som skärmen mottar via sin UART-ingång. 3.2.3 Atmel Ice AVR: En JTAG (Joint Test Action Group) av Atmel. Användes för att ladda över mjukvara till processorer. Nyttig när man testar ens mjukvara och debuggar. 3.2.4 Knappar: Används för att styra spelet. Fem aktivt höga och en aktivt låg till reseten. 3.2.5 Resistorer: Kopplades till knapparna. Detta för att kunna skapa antingen aktivt höga eller aktivt låga knappar. 4. Mjukvara Programmet skrevs i programspråket C i Atmel Studio. Atmel Studio kan kompilera koden och föra över det till mikrokontrollerns minne via JTAGen. Har även bra debugging-verktyg. Se bilaga 3 för källkoden. 6

5. Metod Till en början så planerades arbetet. Med en bra dialog mellan varann kunde det brainstormas effektivt, för att få fram ett förslag på en prototyp som skulle skapas. Med det gjort kunde det börja skrivas på en kravspecifikation. Lite av kraven till kravspecifikationen kunde man hitta i spelets menade regler. För att hitta vilka komponenter man skulle använda så kunde man utgå ifrån kravspecifikation. Alla komponenter förseddes av handledarna. När dessa komponenter hade bestämts var det dags att titta i dess tekniska dokumentation [1][3]. Dessa dokument var till bra hjälp när man man behövde få reda på hur komponenterna fungerar och skulle kopplas. Därför var det inga problem att rita ett kopplingsschema efteråt. Utifrån kopplingsschemat var det dags att koppla ihop komponenterna till konstruktionen. Hårdvaran monterades och kopplades på relevanta platser på ett mönsterkort. Komponenterna sattes fast och kopplades antingen genom lödning eller så virades sladdarna runt komponenternas pinnar med hjälp av en virpistol. När allting var ihopkopplat var det dags att testa hårdvaran. Detta gjordes genom diverse testprogram i Atmel studio, samt en logikpenna. Till en början hade gruppen problem med kommunikationen mellan mikrokontrollern och skärmen. Det var inte så att konstruktionen var felkopplad, utan mikrokontrollern var inställd på fel klockfrekvens. När det hade ordnats visade det sig att konstruktionen var korrekt kopplad. Eftersom konstruktionen var korrekt kopplad, var det dags att programmera spelet. Detta tog upp väldigt mycket av gruppens tid. Teknisk dokumentation för hur skärmen kunde programmeras var till mycket bra hjälp [4]. Det första som gruppen bestämde sig att programmera var en funktion som kunde generera en slumpmässig rad med siffror. Det är dessa siffror det är menat att man ska gissa fram, men de är representerade som färger. Därpå programmerade vi så att skärmen kunde rita ut en cirkel. Dessa skulle det behövas många av positionerade på olika ställen för vårt spel. Därefter ville vi se till att vi skulle lyckas byta färger på våra cirklar genom att trycka på knappar. Sedan såg vi till att programmet skrev korrekt siffror beroendes på vad man gissat för färgsekvens. Efter det var spelet i sig färdigt, men gruppen bestämde att programmera en enkel display både för när man förlorade och när man vann. 7

6. Resultat Resultatet av projektet är ett fungerande Mastermind-spel som uppfyller kraven av den angivna kravspecifikationen. En slumpmässig sekvens skapas av programmet. Knapparna kan skifta färg för de olika sekvenspositionerna, och låsa in en spelares gissning och kontrollera om det är korrekt eller inte. Se nedanstående figurer för visuell demonstration av vissa aspekter av konstruktionen. Figur 1: En spelomgång där två gissningar har gjort och resultaten för dem har presenterats. Figur 2: Närbild av spelet Figur 3: Demonstration av hur det ser ut när spelaren antingen vinner eller förlorar. 8

7. Diskussion Arbetets utveckling har knappast varit stadig, utan den har varierat väldigt mycket fram och tillbaka. Vissa dagar flöt arbetet på, medans vissa dagar satt man fast och kunde inte komma någon vart. Som när det skulle läras C när medlemmarna är främst vana vid det objektorienterade programspråket Java. Ett annat exempel var när kommunikationen till skärmen inte fungerade pga. att klockfrekvensen på mikrokontrollern var felaktigt inställd. Men när gruppen väl lyckats med att kunna programmera sin skärm så flöt arbetet på väldigt bra tack vare databladen som hittats. Medlemmarna känner sig självsäkra att de hade kunnat lägga till fler funktioner även om det inte krävdes. Till exempel en slags introduktionsdisplay, mer komplex win/lose-display eller fler svårighetsgrader till spelet. Sammanfattningsvis instämmer gruppen om att arbetet blivit lyckat och att det varit till god nytta. Alla medlemmar var relativt oerfarna med att programmera hårdvara som den i detta projekt, och rent allmänt programspråket C. Men efter många om och men har gruppen en färdig prototyp att visa upp. 9

8 Källförteckning [1] Atmel, 8-bit AVR Microcontrollers, ATmega1284 data sheet, 2016. Länk: https://www.eit.lth.se/fileadmin/eit/courses/eita15/laborationer/datorteknik/lab2/atmega128 4.pdf [2] Hasbro, Mastermind Manual, 2010. Länk: https://www.hasbro.com/common/documents/dad261421c4311ddbd0b0800200c9a66/819d F9B85056900B10B25C68C95E39E5.pdf [3] 4D systems, 1.5 microoled GOLDELOX Display, uoled-128g2 data sheet, 2015. Länk: https://www.components-mart.com/datasheets/4f/uoled-128-g2.pdf [4] 4D Labs technical staff, Goldelox processor serial commands reference manual, 4D systems, 2017. Länk: https://www.4dsystems.com.au/productpages/goldelox/downloads/goldelox_serialcm dmanual_r_2_0.pdf 10

9 Appendix Bilaga A, Kopplingsschema: Bilaga B, Knappmanual: Knapp Funktion 1 Bytar färg på sekvensposition 1. 2 Bytar färg på sekvensposition 2. 3 Bytar färg på sekvensposition 3. 4 Låser in din gissningssekvens, kontrollerar om du har rätt eller fel och låter spelaren påbörja en ny gissning. 5 Reset till skärmen. Används inte under spelandet. 6 Reset till programmet. Används för att kunna starta om spelet. 11

Bilaga C, Källkod: /* * GccApplication3.c * * Created: 2019-05-15 15:13:59 * Author : nat15hbr */ #define F_CPU 8000000UL #include <avr/io.h> #include <avr/interrupt.h> #include <avr/delay.h> #include <time.h> int gamesequence[3]={1,1,1; int guesssequence[3]={1,1,1; int result[2]; int guessnbr; int correctcolors; int correctcolorandplace; int win = 0; void sequencegenerator(){ for(int i=0;i<3;i++){ gamesequence[i] = rand() % 6; void checksequence(){ correctcolors=0; //RESET correctcolorandplace=0; for(int i=0; i<3; i++){ if(guesssequence[0]==gamesequence[i] guesssequence[1]==gamesequence[i] guesssequence[2]==gamesequence[i]){ correctcolors++; for(int k=0; k<3; k++){ if(guesssequence[k] == gamesequence[k]){ correctcolorandplace++; 12

correctcolors = correctcolors-correctcolorandplace; result[0] = correctcolors; result[1] = correctcolorandplace; if(correctcolorandplace==3){windisplay(); if(guessnbr==5){losedisplay(); void initmcu(){ DDRA = 0; PCICR = (1<<PCIE0); PCMSK0 = (1<<PCINT0); PCMSK0 = (1<<PCINT1); PCMSK0 = (1<<PCINT2); PCMSK0 = (1<<PCINT3); //PCIFR = 1; //behövs denna?? void USART_Init() { UCSR0B = 0x00; UCSR0C = 0x00; UBRR0=51; //9600 UCSR0B = (1<<RXEN0) (1<<TXEN0); UCSR0C = (1<<UCSZ00) (1<<UCSZ01); //UCSR0C &= ~(1<<UCSZ02); //UCSR0B &= ~(1<<USBS0); void USART_Transmit( unsigned char data ) { /* Wait for empty transmit buffer */ while (!( UCSR0A & (1<<UDRE0)) ) ; /* Put data into buffer, sends the data */ UDR0 = data; unsigned char USART_Receive( void ) { /* Wait for data to be received */ 13

while (!(UCSR0A & (1<<7)) ) ; /* Get and return received data from buffer */ return UDR0; inline void send_string(unsigned char *msg, int len) { for (int i = 0; i < len; i++) { USART_Transmit(msg[i]); void drawsequence(){ #define GHOSTWHITE #define GREEN #define RED #define BLUE #define MAGENTA #define YELLOW 0xFFDF 0x0400 0xF800 0x001F 0xF81F 0xFFE0 int colormsb = 0; int colorlsb = 0; for(int i=0; i<3; i++){ int xpos = i*20+10; if(guesssequence[i]==1){colormsb = 0xFF; colorlsb = 0xDF; if(guesssequence[i]==2){colormsb = 0x04; colorlsb = 0x00; if(guesssequence[i]==3){colormsb = 0xF8; colorlsb = 0x00; if(guesssequence[i]==4){colormsb = 0x00; colorlsb = 0x1F; if(guesssequence[i]==5){colormsb = 0xF8; colorlsb = 0x1F; if(guesssequence[i]==0){colormsb = 0xFF; colorlsb = 0xE0; //cmd x y rad color unsigned char data[] = {0xFF, 0xCC, 0x00, xpos, 0x00, 120, 0x00, 0x05, colormsb, colorlsb; //Draw circle void drawresponsesequence(){ int colormsb = 0; 14

int colorlsb = 0; unsigned char bajs[] = {0xff, 0x7f, 0x00, 0x10; unsigned char text_width[] = {0xff, 0x7c, 0x00, 0x01; unsigned char text_height[] = {0xff, 0x7b, 0x00, 0x01; send_string(bajs, sizeof(bajs)); send_string(text_width, sizeof(text_width)); send_string(text_height, sizeof(text_height)); for(int i=0; i<6; i++){ if(guessnbr==i){ int help = 0; if(guessnbr==1){help = 0; if(guessnbr==2){help = i+1; if(guessnbr==3){help = i+3; if(guessnbr==4){help = i+5; if(guessnbr==5){help = i+7; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, 0x0F; 0x11; if(result[0]==0 && result[1]==0){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '0', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '0', 0x00; send_string(text2, sizeof(text2)); 15

//result[1] can never equal 3 because that means the player won which is handled by the checksequence function! if(result[0]==0 && result[1]==1){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '0', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, 0x11; unsigned char text2[] = {0x00, 0x06, '1', 0x00; send_string(text2, sizeof(text2)); if(result[0]==0 && result[1]==2){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '0', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, 0x11; unsigned char text2[] = {0x00, 0x06, '2', 0x00; send_string(text2, sizeof(text2)); if(result[0]==1 && result[1]==0){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; 16

0x11; 0x11; unsigned char text[] = {0x00, 0x06, '1', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '0', 0x00; send_string(text2, sizeof(text2)); if(result[0]==1 && result[1]==1){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '1', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '1', 0x00; send_string(text2, sizeof(text2)); if(result[0]==1 && result[1]==2){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '1', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; 17

0x11; 0x11; 0x11; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '2', 0x00; send_string(text2, sizeof(text2)); if(result[0]==2 && result[1]==0){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '2', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '0', 0x00; send_string(text2, sizeof(text2)); if(result[0]==2 && result[1]==1){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '2', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, 18

0x11; 0x11; unsigned char text2[] = {0x00, 0x06, '1', 0x00; send_string(text2, sizeof(text2)); if(result[0]==2 && result[1]==2){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '2', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '2', 0x00; send_string(text2, sizeof(text2)); if(result[0]==3 && result[1]==0){ unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '3', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '0', 0x00; send_string(text2, sizeof(text2)); if(result[0]==3 && result[1]==1){ 19

0x11; if result[1] equals 2. unsigned char data[] = {0xFF, 0x7F, 0xFF, 0xFF; unsigned char text[] = {0x00, 0x06, '1', 0x00; send_string(text, sizeof(text)); unsigned char data2[] = {0xFF, 0x7F, 0xF8, 0x00; unsigned char move[] = {0xff, 0xe4, 0x00, help, 0x00, unsigned char text2[] = {0x00, 0x06, '2', 0x00; send_string(text2, sizeof(text2)); //if(result[0]==3 && result[1]==2){ //result[0] can never equal 3 ////////////////////////////////////////////////////////// unsigned char data2[] = {0xFF, 0xE4, 0x00, 0x00, 0x00, 0x00; //Move Cursor unsigned char data3[] = {0x00, 0x06, 1, 0x00; //Put character send_string(data3, sizeof(data3)); for(int i=0; i<3; i++){ int xpos = i*20+10; if(guesssequence[i]==1){colormsb = 0xFF; colorlsb = 0xDF; if(guesssequence[i]==2){colormsb = 0x04; colorlsb = 0x00; if(guesssequence[i]==3){colormsb = 0xF8; colorlsb = 0x00; if(guesssequence[i]==4){colormsb = 0x00; colorlsb = 0x1F; if(guesssequence[i]==5){colormsb = 0xF8; colorlsb = 0x1F; if(guesssequence[i]==0){colormsb = 0xFF; colorlsb = 0xE0; if(guessnbr==1){ //cmd x y rad color 20

unsigned char data[] = {0xFF, 0xCC, 0x00, xpos, 0x00, 0x05, 0x00, 0x05, colormsb, colorlsb; //Draw circle if(guessnbr==2){ //cmd x y rad color unsigned char data[] = {0xFF, 0xCC, 0x00, xpos, 0x00, 0x20, 0x00, 0x05, colormsb, colorlsb; //Draw circle if(guessnbr==3){ //cmd x y rad color unsigned char data[] = {0xFF, 0xCC, 0x00, xpos, 0x00, 0x35, 0x00, 0x05, colormsb, colorlsb; //Draw circle if(guessnbr==4){ //cmd x y rad color unsigned char data[] = {0xFF, 0xCC, 0x00, xpos, 0x00, 0x50, 0x00, 0x05, colormsb, colorlsb; //Draw circle if(guessnbr==5){ //cmd x y rad color unsigned char data[] = {0xFF, 0xCC, 0x00, xpos, 0x00, 0x65, 0x00, 0x05, colormsb, colorlsb; //Draw circle void resetresult(){ result[0]=0; result[1]=0; void windisplay(){ USART_Transmit(0xFF); //Clear 21

USART_Transmit(0xD7); unsigned char text_width[] = {0xff, 0x7c, 0x00, 0x03; unsigned char text_height[] = {0xff, 0x7b, 0x00, 0x03; send_string(text_width, sizeof(text_width)); send_string(text_height, sizeof(text_height)); unsigned char move[] = {0xff, 0xe4, 0x00, 0x00, 0x00, 0x00; unsigned char data[] = {0x00, 0x06, 'W', 'I', 'N', 0x00; win = 1; void losedisplay(){ USART_Transmit(0xFF); //Clear USART_Transmit(0xD7); unsigned char text_width[] = {0xff, 0x7c, 0x00, 0x03; unsigned char text_height[] = {0xff, 0x7b, 0x00, 0x03; send_string(text_width, sizeof(text_width)); send_string(text_height, sizeof(text_height)); unsigned char move[] = {0xff, 0xe4, 0x00, 0x00, 0x00, 0x00; unsigned char data[] = {0x00, 0x06, 'L', 'O', 'S', 'E', 0x00; int main(void) { srand(time(null)); _delay_ms(4000); initmcu(); sei(); USART_Init(); USART_Transmit(0xFF); //Clear USART_Transmit(0xD7); 22

USART_Transmit(0x00); USART_Transmit(0x0C); USART_Transmit(0x00); USART_Transmit(0x00); resetresult(); sequencegenerator(); /* Replace with your application code */ guessnbr = 0; correctcolors = 0; correctcolorandplace = 0; drawsequence(); while(1){ ISR(PCINT0_vect) { _delay_ms(100); int read = PINA; if(read == 8){ guesssequence[0] = (guesssequence[0] + 1) % 6; else if(read == 4){ guesssequence[1] = (guesssequence[1] + 1) % 6; else if(read == 2){ guesssequence[2] = (guesssequence[2] + 1) % 6; else if(read==1){ guessnbr++; checksequence(); if(guessnbr<5 && win == 0){ drawresponsesequence(); if(guessnbr<5){drawsequence(); 23