Quiz Game Show Summer (4 / 8 steg)
Steg 4: Koden
So... Jag är även min kod, men jag förklara inte det... och ja jag vet det finns inga kommentarer... om du har frågor, inte tveka att fråga mig, men jag gjorde inte detta för att en programmering handledning.
Först måste du "pitches.h"... men för att kunna ta med den, du behov till få den här... Arduino tonen Tutorial
#include "pitches.h"
Så låt oss definiera några matriser för att hjälpa oss för senare när vi behöver använda de 8 siffror 7 segment visar
matrisen till aktivera särskild siffra på den 8x7segment modulen < br > / / är det gemensamma anoden av 7 segment
byte siffror [8] = {
0b10000000, //digit 1 från höger
0b01000000, //digit 2 från höger
0b00100000, //digit 3 från höger
0b00010000, //digit 4 från höger
0b00001000, //digit 5 från höger
0b00000100, //digit 6 från höger
0b00000010, //digit 7 från höger
0b00000001 //digit 8 från höger
};
matris för decimaltal, det är katoden, se databladet.
Därför kommer en logik låg activete visst segment
PGFEDCBA, segmentet 7-segment, P är pricken
byte nummer [12] = {
0b11000000, / / 0
0b11111001, / / 1
0b10100100, / / 2
0b10110000, / / 3
0b10011001, / / 4
0b10010010, / / 5
0b10000010, / / 6
0b11111000, / / 7
0b10000000, / / 8
0b10010000, / / 9
0b01111111, //dot
0b11111111 //blank
};
Vi bör också definiera vissa konstanter som hjälper oss att identifiera indata- och stift senare i koden
CONST int blueLEDPin = 12;
CONST int greenLEDPin = 11;
CONST int redLEDPin = 10;
CONST int yellowLEDPin = 9;
CONST int teamPinDiff = 5; att hjälpa till med beräkningar senare <
CONST int blueButton = 17;
CONST int greenButton = 16.
CONST int knappen = 15.
CONST int yellowButton = 14.
CONST int acceptButton = 18;
CONST int refuseButton = 19.
CONST int speakerPin = 8;
CONST int latchPin = 7. ansluta till RCK 8x7segment modul
CONST int clockPin = 6; ansluta till SCK av 8x7segment modul
CONST int dataPin = 5; ansluta till DIO 8x7segment modul
CONST int multiplexDelay = 1;
CONST int dotNumber = 10;
CONST int blankNumber = 11;
Vi måste också hålla vissa variabler för att veta vad som pågår i programmet
int currentTeam = 0;
int blueScore = 0;
int greenScore = 0;
int redScore = 0;
int yellowScore = 0; byte blueDigit1 = nummer [blankNumber];
byte blueDigit2 = antal [0];
byte greenDigit1 = nummer [blankNumber];
byte greenDigit2 = antal [0];
byte redDigit1 = nummer [blankNumber];
byte redDigit2 = antal [0];
byte yellowDigit1 = nummer [blankNumber];
byte yellowDigit2 = antal [0];
Sedan setup vi pin lägen och displayen
void setup()
{
pinMode (blueLEDPin, produktionen);
pinMode (greenLEDPin, produktionen);
pinMode (redLEDPin, produktionen);
pinMode (yellowLEDPin, produktionen);
pinMode (blueButton, ingång);
pinMode (greenButton, ingång);
pinMode (röda, ingång);
pinMode (yellowButton, ingång);
pinMode (acceptButton, ingång);
pinMode (refuseButton, ingång);
pinMode (speakerPin, produktionen);
digitalWrite (blueLEDPin, låg);
digitalWrite (greenLEDPin, låg);
digitalWrite (redLEDPin, låg);
digitalWrite (yellowLEDPin, låg);
pinMode (latchPin, produktionen);
pinMode (clockPin, produktionen);
pinMode (dataPin, produktionen);
digitalWrite (latchPin, hög);
}
Och vi skapar loop funktion som ska köras efter installationen
void loop()
{
ProgramLoop();
WriteScore();
}
Som ni ser, jag har skapat funktioner för att separera min kod lite bättre... så låt oss skapa dessa funktioner
void ProgramLoop()
{
om (currentTeam == 0) {
om (digitalRead(blueButton) == hög) {
currentTeam = blueLEDPin;
PlayAnswerBlue();
}
annat if (digitalRead(greenButton) == hög) {
currentTeam = greenLEDPin;
PlayAnswerGreen();
}
annat if (digitalRead(redButton) == hög) {
currentTeam = redLEDPin;
PlayAnswerRed();
}
annat if (digitalRead(yellowButton) == hög) {
currentTeam = yellowLEDPin;
PlayAnswerYellow();
}
}
annat
{
digitalWrite (currentTeam, hög);
om (digitalRead (currentTeam + teamPinDiff) == låg) {
om (digitalRead(acceptButton) == hög) {
PlayAccept();
IncrementScore();
}
annat if (digitalRead(refuseButton) == hög) {
PlayDeny();
ResetState();
}
}
}
}
void ResetState()
{
currentTeam = 0;
digitalWrite (blueLEDPin, låg);
digitalWrite (greenLEDPin, låg);
digitalWrite (redLEDPin, låg);
digitalWrite (yellowLEDPin, låg);
}
void IncrementScore()
{
växel (currentTeam) {
fall blueLEDPin:
blueScore ++;
om (blueScore > 9) {
om (blueScore > 99) {
blueScore = 0;
}
blueDigit1 = antal [blueScore / 10];
}
blueDigit2 = antal [blueScore % 10];
bryta;
fall greenLEDPin:
greenScore ++;
om (greenScore > 9) {
om (greenScore > 99) {
greenScore = 0;
}
greenDigit1 = antal [greenScore / 10];
}
greenDigit2 = antal [greenScore % 10];
bryta;
fall redLEDPin:
redScore ++;
om (redScore > 9) {
om (redScore > 99) {
redScore = 0;
}
redDigit1 = antal [redScore / 10];
}
redDigit2 = antal [redScore % 10];
bryta;
fall yellowLEDPin:
yellowScore ++;
om (yellowScore > 9) {
om (yellowScore > 99) {
yellowScore = 0;
}
yellowDigit1 = antal [yellowScore / 10];
}
yellowDigit2 = antal [yellowScore % 10];
bryta;
}
ResetState();
}
void WriteScore()
{
display8x7segment (siffran [0], number[dotNumber]);
display8x7segment (siffran [0], blueDigit2);
display8x7segment (siffran [1], blueDigit1);
display8x7segment (siffran [2], number[dotNumber]);
display8x7segment (siffran [2], greenDigit2);
display8x7segment (siffran [3], greenDigit1);
display8x7segment (siffran [4], number[dotNumber]);
display8x7segment (siffran [4], redDigit2);
display8x7segment (siffran [5], redDigit1);
display8x7segment (siffran [6], number[dotNumber]);
display8x7segment (siffran [6], yellowDigit2);
display8x7segment (siffran [7], yellowDigit1);
}
void display8x7segment (byte siffra, byte nummer)
{
digitalWrite (latchPin, låg);
shiftOut (dataPin, clockPin, MSBFIRST, siffran); rensar rätt display
shiftOut (dataPin, clockPin, MSBFIRST, antal); rensar den vänstra displayen
digitalWrite (latchPin, hög);
Delay(1);
}
void PlayAnswerBlue()
{
display8x7segment (siffran [7], number[blankNumber]);
pip (speakerPin, NOTE_C5, 100);
Delay(25);
pip (speakerPin, NOTE_C5, 100);
Delay(25);
pip (speakerPin, NOTE_C5, 100);
}
void PlayAnswerGreen() {
display8x7segment (siffran [7], number[blankNumber]);
pip (speakerPin, NOTE_D5, 100);
Delay(25);
pip (speakerPin, NOTE_D5, 100);
Delay(25);
pip (speakerPin, NOTE_D5, 100);
}
void PlayAnswerRed() {
display8x7segment (siffran [7], number[blankNumber]);
pip (speakerPin, NOTE_E5, 100);
Delay(25);
pip (speakerPin, NOTE_E5, 100);
Delay(25);
pip (speakerPin, NOTE_E5, 100);
}
void PlayAnswerYellow() {
display8x7segment (siffran [7], number[blankNumber]);
pip (speakerPin, NOTE_F5, 100);
Delay(25);
pip (speakerPin, NOTE_F5, 100);
Delay(25);
pip (speakerPin, NOTE_F5, 100);
}
void PlayAccept() {
display8x7segment (siffran [7], number[blankNumber]);
pip (speakerPin, NOTE_C5, 75);
Delay(10);
pip (speakerPin, NOTE_D5, 75);
Delay(10);
pip (speakerPin, NOTE_E5, 75);
Delay(10);
pip (speakerPin, NOTE_G5, 75);
Delay(10);
pip (speakerPin, NOTE_E5, 75);
Delay(10);
pip (speakerPin, NOTE_G5, 75);
Delay(10);
pip (speakerPin, NOTE_C6, 75);
}
void PlayDeny() {
display8x7segment (siffran [7], number[blankNumber]);
pip (speakerPin, NOTE_A4, 1000);
}
void beep (unsigned char speakerPin, int frequencyInHertz, lång timeInMilliseconds)
{
int x;
lång delayAmount = (long)(1000000/frequencyInHertz);
lång loopTime = (long)((timeInMilliseconds*1000)/(delayAmount*2));
för (x = 0; x < loopTime; x ++)
{
digitalWrite (speakerPin, hög);
delayMicroseconds(delayAmount);
digitalWrite (speakerPin, låg);
delayMicroseconds(delayAmount);
}
}