#include "Adafruit_NeoPixel.h"
Adafruit_NeoPixel strip0 = Adafruit_NeoPixel(77,13,NEO_GRB + NEO_KHZ800);
int H[]= {1,0,0,0,0,0,0,0,0,0};
int He[]= {0,1,0,0,0,0,0,0,0,0};
int Li[]= {0,1,1,0,0,0,0,0,0,0};
int Be[]= {0,1,0,1,0,0,0,0,0,0};
int B[]= {0,1,0,1,1,0,0,0,0,0};
int C[]= {0,1,0,1,1,0,1,0,0,0};
int N[]= {0,1,0,1,1,0,1,0,1,0};
int O[]= {0,1,0,1,0,1,1,0,1,0};
int F[]= {0,1,0,1,0,1,0,1,1,0};
int Ne[]= {0,1,0,1,0,1,0,1,0,1};
char Elements[10]={'H','He','Li','Be','B','C','N','O','F','Ne'};
int keys[]={};
#define switch1 4
#define switch2 2
#define switch3 5
#define switch4 15
#define ANSWR 18
int As1=0; //0
int As2=0; //1
int Bs1=0; //2
int Bs2=0; //3
int Bpx1=0; //4
int Bpx2=0; //5
int Bpy1=0; //6
int Bpy2=0; //7
int Bpz1=0; //8
int Bpz2=0; //9
//if(H[0]=As1 && H[1]=As2 && H[2]=Bs1 && H[3]=Bs2 && H[4]=Bpx1 && H[5]=Bpx2 && H[6]=Bpy1 && H[7]=Bpy2 && H[8]=Bpz1 && H[9]=Bpz2)
int sw1=0;
int sw2=0;
int sw3=0;
int sw4=0;
int Gamecode = 0 ;
int LEDN=77;
int speed = 500;
void setup() {
pinMode(switch1,INPUT_PULLDOWN);
pinMode(switch2,INPUT_PULLDOWN);
pinMode(switch3,INPUT_PULLDOWN);
pinMode(switch4,INPUT_PULLDOWN);
pinMode(ANSWR,INPUT_PULLDOWN);
pinMode(12,INPUT_PULLDOWN);
pinMode(14,INPUT_PULLDOWN);
pinMode(27,INPUT_PULLDOWN);
pinMode(26,INPUT_PULLDOWN);
pinMode(32,INPUT_PULLDOWN);
pinMode(25,INPUT_PULLDOWN);
pinMode(19,INPUT_PULLDOWN);
pinMode(33,INPUT_PULLDOWN);
pinMode(21,INPUT_PULLDOWN);
pinMode(23,INPUT_PULLDOWN);
Serial.begin(115200);
strip0.begin();
strip0.show();
colorWipe(&strip0, 255,255,255, 50);
colorWipe(&strip0, 0,0,0, 5);
As1=digitalRead(12);
As2=digitalRead(14);
Bs1=digitalRead(27);
Bs2=digitalRead(26);
Bpx1=digitalRead(33);
Bpx2=digitalRead(25);
Bpy1=digitalRead(19);
Bpy2=digitalRead(32);
Bpz1=digitalRead(21);
Bpz2=digitalRead(23);
}
void loop() {
for (;;)
{
//Serial.println(digitalRead(switch1));
if((digitalRead(switch1)==1) || (digitalRead(switch2)==1) || (digitalRead(switch3)==1)|| (digitalRead(switch4)==1))
{
Serial.println("game is active");
delay(3000);
break;
}
}
sw1 = digitalRead(switch1); if(sw1>=1){sw1=1;};
sw2 = digitalRead(switch2); if(sw2>=1){sw2=1;};
sw3 = digitalRead(switch3); if(sw3>=1){sw3=1;};
sw4 = digitalRead(switch4); if(sw4>=1){sw4=1;};
Gamecode= ((sw1*1) + (sw2*2) + (sw3*4) + (sw4*8)) ; //GAME CODE NUMBER
Serial.print("game number=");
Serial.println(Gamecode);
Serial.print("Element=");
Serial.println(Elements[Gamecode-1]);
Serial.println("=================");
for (int x=0;x<=LEDN;x++)
{
strip0.setPixelColor(x,strip0.Color(25,25,255));
strip0.show();
delay(speed/2);
if(digitalRead(ANSWR)==1){
colorWipe(&strip0, 230,230,25, 1);
As1=digitalRead(12);
As2=digitalRead(14);
Bs1=digitalRead(27);
Bs2=digitalRead(26);
Bpx1=digitalRead(33);
Bpx2=digitalRead(25);
Bpy1=digitalRead(19);
Bpy2=digitalRead(32);
Bpz1=digitalRead(21);
Bpz2=digitalRead(23);
break;
}
delay(speed/2);
//if(x == LEDN){ goto restartGame; }
}
int keys[]={As1,As2,Bs1,Bs2,Bpx1,Bpx2,Bpy1,Bpy2,Bpz1,Bpz2};
for (int i=0; i<=9; i++){
Serial.print(keys[i]);
Serial.print(",");
}
Serial.println("");
//=========================================================================
switch (Gamecode) {
case 1:
for (int i=0; i<=9; i++){
Serial.print(H[i]);
Serial.print(",");
}
Serial.println("");
Serial.println("H");
if(H[0]==As1 && H[1]==As2 && H[2]==Bs1 && H[3]==Bs2 && H[4]==Bpx1 && H[5]==Bpx2 && H[6]==Bpy1 && H[7]==Bpy2 && H[8]==Bpz1 && H[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 2:
for (int i=0; i<=9; i++){
Serial.print(He[i]);
Serial.print(",");
}
Serial.println(""); Serial.println("He");
if(He[0]==As1 && He[1]==As2 && He[2]==Bs1 && He[3]==Bs2 && He[4]==Bpx1 && He[5]==Bpx2 && He[6]==Bpy1 && He[7]==Bpy2 && He[8]==Bpz1 && He[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 3:
for (int i=0; i<=9; i++){
Serial.print(Li[i]);
Serial.print(",");
}
Serial.println("");Serial.println("Li");
if(Li[0]==As1 && Li[1]==As2 && Li[2]==Bs1 && Li[3]==Bs2 && Li[4]==Bpx1 && Li[5]==Bpx2 && Li[6]==Bpy1 && Li[7]==Bpy2 && Li[8]==Bpz1 && Li[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 4:
for (int i=0; i<=9; i++){
Serial.print(Be[i]);
Serial.print(",");
}
Serial.println("");Serial.println("Be");
if(Be[0]==As1 && Be[1]==As2 && Be[2]==Bs1 && Be[3]==Bs2 && Be[4]==Bpx1 && Be[5]==Bpx2 && Be[6]==Bpy1 && Be[7]==Bpy2 && Be[8]==Bpz1 && Be[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 5:
for (int i=0; i<=9; i++){
Serial.print(B[i]);
Serial.print(",");
}
Serial.println("");Serial.println("B");
if(B[0]==As1 && B[1]==As2 && B[2]==Bs1 && B[3]==Bs2 && B[4]==Bpx1 && B[5]==Bpx2 && B[6]==Bpy1 && B[7]==Bpy2 && B[8]==Bpz1 && B[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 6:
for (int i=0; i<=9; i++){
Serial.print(C[i]);
Serial.print(",");
}
Serial.println("");Serial.println("C");
if(C[0]==As1 && C[1]==As2 && C[2]==Bs1 && C[3]==Bs2 && C[4]==Bpx1 && C[5]==Bpx2 && C[6]==Bpy1 && C[7]==Bpy2 && C[8]==Bpz1 && C[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 7:
for (int i=0; i<=9; i++){
Serial.print(N[i]);
Serial.print(",");
}
Serial.println(""); Serial.println("N");
if(N[0]==As1 && N[1]==As2 && N[2]==Bs1 && N[3]==Bs2 && N[4]==Bpx1 && N[5]==Bpx2 && N[6]==Bpy1 && N[7]==Bpy2 && N[8]==Bpz1 && N[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 8:
for (int i=0; i<=9; i++){
Serial.print(O[i]);
Serial.print(",");
}
Serial.println("");Serial.println("O");
if(O[0]==As1 && O[1]==As2 && O[2]==Bs1 && O[3]==Bs2 && O[4]==Bpx1 && O[5]==Bpx2 && O[6]==Bpy1 && O[7]==Bpy2 && O[8]==Bpz1 && O[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 9:
for (int i=0; i<=9; i++){
Serial.print(F[i]);
Serial.print(",");
}
Serial.println("");
Serial.println("F");
if(F[0]==As1 && F[1]==As2 && F[2]==Bs1 && F[3]==Bs2 && F[4]==Bpx1 && F[5]==Bpx2 && F[6]==Bpy1 && F[7]==Bpy2 && F[8]==Bpz1 && F[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
case 10:
for (int i=0; i<=9; i++){
Serial.print(Ne[i]);
Serial.print(",");
}
Serial.println("");
Serial.println("Ne");
if(Ne[0]==As1 && Ne[1]==As2 && Ne[2]==Bs1 && Ne[3]==Bs2 && Ne[4]==Bpx1 && Ne[5]==Bpx2 && Ne[6]==Bpy1 && Ne[7]==Bpy2 && Ne[8]==Bpz1 && Ne[9]==Bpz2){
colorWipe(&strip0, 25,255,25, 1);
delay(5000);
}
else{
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
}
break;
default:
colorWipe(&strip0, 255,25,25, 1);
delay(5000);
break;
}
restartGame:
//==========================================================================
for(;;) /// restarting the game
{
if((digitalRead(switch1)==0) && (digitalRead(switch2)==0) && (digitalRead(switch3)==0) && (digitalRead(switch4)==0))
{
colorWipe(&strip0, 0,0,0, 1);
Serial.println("restarting the game");
delay(1000);
break;
}
}
}
void colorWipe(Adafruit_NeoPixel *strip, uint8_t r, uint8_t g, uint8_t b, uint8_t wait) {
for (uint16_t i = 0; i < strip->numPixels(); i++) {
strip->setPixelColor(i, strip->Color(r / 2.5, g / 2.5, b / 2.5)); // reduce brightness to avoid heating
strip->show();
delay(wait);
}
};