HACKING 120% {Hacking, programmazione, computer & molto altro}

[arduino] lightmemory

« Older   Newer »
  Share  
Wet Water
view post Posted on 26/7/2014, 14:42 by: Wet Water     +1   +1   -1
Avatar

Water can take unforseen forms.

Group:
Founder
Posts:
5,273
Reputation:
+1,147
Location:
Shabang

Status:


Ho arduino da pressapoco cinque giorni, questo è il mio primo lavoro che si discosta dalla guida.

Lightmemory è basato su tre luci e tre pulsanti, quando si accende/resetta si accendono le tre luci in sequenza di cinque; dopo questo si dovranno premere i tre bottoni nella stessa sequenza delle luci, in caso di errore si dovrà ricominciare a premere.

CODICE
int count = 0;
int lim = 5;
int res[5];
int acc;
int accp = 1;

void light(int num = 0) {
   digitalWrite(3, LOW);
   digitalWrite(4, LOW);
   digitalWrite(5, LOW);
   digitalWrite(num, HIGH);
}

void right() {
   digitalWrite(3, HIGH);
   digitalWrite(4, HIGH);
   digitalWrite(5, HIGH);
   delay(1000);
   light();
}

void error() {
   light(3);
   delay(100);
   light(4);
   delay(100);
   light(5);
   delay(100);
   light();
}

void check(int numButton){
   if (res[count-6] == numButton-5){
       light(numButton-5);
       count++;
   } else {
       error();
       count = lim+1;
   }
}

void setup() {
   //Serial.begin(9600);
   pinMode(3, OUTPUT);
   pinMode(4, OUTPUT);
   pinMode(5, OUTPUT);
   pinMode(8, INPUT);
   pinMode(9, INPUT);
   pinMode(10, INPUT);
   randomSeed(analogRead(0));
}

void loop() {
   if (count < lim) {
       int acc = random(3, 6);
       if (acc != accp) {
           light(acc);
           res[count] = acc;
           accp = acc;
           count++;
           delay(500);
       }
   } else if (count == lim) {
       light();
       delay(500);
       error();
       delay(500);
       light();
       count++;
   } else if (count < 2*lim+1) {
       if (digitalRead(8)) {
           acc = 8;
           if (acc != accp){
                check(8);
           }
       }
       if (digitalRead(9)) {
           acc = 9;
           if (acc != accp){
               check(9);
           }
       }
       if (digitalRead(10)) {
           acc = 10;
           if (acc != accp){
               check(10);
           }
       }
       accp = acc;
   }
   else {
       right();
       delay(500);
       light();
       delay(500);
       right();
       delay(500);
       light();
       delay(50000);
   }
}



Nel tar ho caricato anche il .fzz del circuito, attenzione che le resistenze dei pulsanti non sono da 220, ma sono da 10k.

Download attachment
lightmemory.tar ( Number of downloads: 38 )

 
Web  Top
5 replies since 26/7/2014, 14:42   81 views
  Share