Arduino Mastermind Box (prototyp) (14 / 14 steg)
Steg 14: Koden
int led1 = 2; Det här alternativet anger antalet namn. Detta används senare för ledde [i]
int led2 = 3;
int led3 = 4;
int led4 = 5;
int jag = -1; Ställer jag till -1, används att bara slumpmässigt koden när setup(); kallas.
int j = 0; Återställer j till 0 för en ny runda, j används till som ett index när rätt kod anropas.
#include / / includes servo biblioteket
Servo servo1; Namn servo
dubbla koden [4] = {1, 1, 1, 1}; Skapar en array kallas kod, det är består av 4 siffror.
dubbla rätta [5] = {0, 0, 0, 0, 0}; Skapar en matris kallas korrekt, är det består av 5 siffror och används för att se om alla nummer har varit gissat rätt.
dubbel ledde [4] = {2, 3, 4, 5}; Skapar en array kallas led, det är består av 4 siffror och används för att aktivera lysdioderna när indexet kallas.
void setup() {
Inställningarna används också att återställa programmet när du har angett rätt kod.
initiera seriell kommunikation på 9600 bps:
Serial.BEGIN(9600);
dubbla rätta [5] = {0, 0, 0, 0, 0}; Återställer korrekt matrisen
Ställer in knapparna (9-12) för att erkännas som indata och lysdioder (2-5) som utgång.
pinMode (9, ingång);
pinMode (10, ingång);
pinMode (11, ingång);
pinMode (12, ingång);
pinMode (2, utgång);
pinMode (3, OUTPUT);
pinMode (4, OUTPUT);
pinMode (5, OUTPUT);
servo1.attach(1); fäster servo på stift 1
servo1.write(90); Inställd denna ståndpunkt Servo
Delay(2000); Håll denna position för 2000ms att återställa locket
servo1.write(170); låset på locket
Jag = -1; slumpmässig koden om jag = -1
digitalWrite (led1, låg); Återställer alla lysdioder
digitalWrite (led2, låg);
digitalWrite (led3, låg);
digitalWrite (led4, låg);
analogWrite (8, random(0,255)); Ange RGB till en slumpmässig färg
analogWrite (7, random(0,255));
analogWrite (6, random(0,255));
}
void generateCode()
{
randomize koden om jag = -1
randomSeed(random());
för (int jag = 0; jag < 4; i ++)
{
korrigera [0] = 0;
korrigera [1] = 0;
korrigera [2] = 0;
korrigera [3] = 0;
korrigera [4] = 0;
koden [i] = random(1,5);
}
felsöka kod så du behöver inte räkna ut koden.
Serial.println("Code");
Serial.println(Code[0]);
Serial.println(Code[1]);
Serial.println(Code[2]);
Serial.println(Code[3]);
}
void retry() {
om koden är felaktig kallas denna funktion
Serial.BEGIN(9600);
dubbla rätta [5] = {0, 0, 0, 0, 0};
Jag = 0; Jag satt till 0 så kod inte återställs.
digitalWrite (led1, låg);
digitalWrite (led2, låg);
digitalWrite (led3, låg);
digitalWrite (led4, låg);
}
void loop() {
om (jag == -1) {
generateCode(); Generera en ny kod om jag = -1
i ++;
}
// code 1 ////////////////////////
Följande kod kommer att läsa upp om indata är lika med antalet i den aktuella positionen.
om antal och placering är korrekt led tänds och matrisen "korrekt" sätts till 1 för den positionen
om numret är korrekt men ståndpunkten är fel led kommer att blinka långsamt och fortsätter till nästa position, är korrekt inte inställd på 1
om numret inte är korrekt i alla kommer att led blinka snabbt och fortsätter till nästa position, korrekt inte är satt till 1
om alla rätt är = 1. Lysdioder kommer att blinka och servo kommer att ändra ställning så att rutan öppnar. inställningar för funktion kallas för spelet att börja på nytt.
om något av talen i matrisen "korrekt" är 0 den röda led blinkar en gång och funktion igen kallas.
om (digitalRead(9) == hög) / / om knappen trycks >
{
om (kod [i] == 1) {/ / om koden är korrekt till knappen intryckt
digitalWrite((led[i]), hög); Aktivera ledon
i ++; Advance index
korrigera [i] = 1; Ange korrekt index till 1
Delay(250);
}
annars om (koden [1] == 1 eller koden [2] == 1 eller koden [3] == 1 eller koden [4] == 1) {
Serial.println ("rätt, men fel plats");
digitalWrite((led[i]), hög);
Delay(500); fördröja så knappen inte kommer matas till ofta under 1 Tryck på.
digitalWrite((led[i]), låg); Ledde långsam blinkkod.
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
annars om (kod [i]! = 1) {
Serial.println("Wrong");
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
}
om (digitalRead(10) == hög)
{
om (kod [i] == 2) {
digitalWrite((led[i]), hög);
i ++;
korrigera [i] = 1;
Delay(250);
}
annars om (koden [1] == 2 eller koden [2] == 2 eller koden [3] == 2 eller koden [4] == 2) {
Serial.println ("rätt, men fel plats");
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
annars om (kod [i]! = 2) {
Serial.println("Wrong");
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
digitalWrite((led[i]), hög);
Delay(200);
i ++;
Delay(250);
}
}
om (digitalRead(11) == hög)
{
om (kod [i] == 3) {
digitalWrite((led[i]), hög);
i ++;
korrigera [i] = 1;
Delay(250);
}
annars om (koden [1] == 3 eller kod [2] == 3 eller kod [3] == 3 eller kod [4] == 3) {
Serial.println ("rätt, men fel plats");
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
annars om (kod [i]! = 3) {
Serial.println("Wrong");
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
}
om (digitalRead(12) == hög)
{
om (kod [i] == 4) {
digitalWrite((led[i]), hög);
i ++;
korrigera [i] = 1;
Delay(250);
}
annars om (koden [1] == 4 eller koden [2] == 4 eller koden [3] == 4 eller koden [4] == 4) {
Serial.println ("rätt, men fel plats");
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
Delay(500);
digitalWrite((led[i]), låg);
Delay(500);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
annars om (kod [i]! = 4) {
Serial.println("Wrong");
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
Delay(200);
digitalWrite((led[i]), låg);
Delay(200);
digitalWrite((led[i]), hög);
i ++;
Delay(250);
}
}
kontrollerar om hela koden registreras korrekt.
om (digitalRead(led4) == hög och korrigera [1] == 1 och korrigera [2] == 1 och korrigera [3] == 1 och korrigera [4] == 1) {
om (j < = 20) {
digitalWrite (led2, låg);
digitalWrite (led1, låg);
digitalWrite (led3, låg);
digitalWrite (led4, låg);
Delay(100);
digitalWrite (led2, hög);
digitalWrite (led1, hög);
digitalWrite (led3, hög);
digitalWrite (led4, hög);
Delay(100);
j ++;
Jag = 0;
int jag = 0;
servo1.write(90);
}
annars om (j > 20)
{
j = 0;
Setup();
}}
om de inte fungerar, försök igen
annars om (digitalRead(led4) == hög och korrigera [1] == 0 eller digitalRead(led4) == hög och korrigera [2] == 0 eller digitalRead(led4) == hög och korrigera [3] == 0 eller digitalRead(led4) == hög och korrigera [4] == 0) {
Delay(2000);
digitalWrite (led4, låg);
digitalWrite (led2, låg);
digitalWrite (led1, låg);
digitalWrite (led3, låg);
Delay(600);
digitalWrite (led4, hög);
Delay(600);
Jag = 0;
int jag = 0;
retry() ;}}