Torej rad bi sestavi uro - ki bi odštevale od 60 minut do nič.
Rad bi uporabil displej MAX 7219 in arduino UNO..
Prosil bi za uporaben program . To pa rabim za igrico ESCAPE HAUSE .
Imam delujoč program za 7 segmenti led displej :
Code:
/*
* Creato da Roberto Tortora.
* Sara' anche scritta male, ma è il primo codice che ho scritto per arduino, e sono fiero del mio lavoro :D
*/
#include <Multiplex7Seg.h> // libreria per gli schermi a 7 segmenti con 4 cifre, riscritta con logica invertita
#include <atdlib.h>
byte digitPins[] = {6,9,10,11}; // LSB to MSB
byte segmentPins[] = {13,3,4,5,12,7,8}; // seg a to g
int perndicarattere();
void setup() {
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A2, INPUT);
pinMode(A3, INPUT);
pinMode(A4, OUTPUT);
pinMode(A5, OUTPUT);
digitalWrite(0, LOW);
int tasto, soluzione=0;
Multiplex7Seg::set(1, 4, digitPins, segmentPins);
int bool1=0,
j=0, k=0, x, //j minuti- k secondi - x tempo
bool2=0, z=1000, // -z velocità decremento
tasto_old=0,
flag=0, reset=0, codice=0, buffer=0, key=16, reset2=0; // reset e codice disinnesco
while (1) { // ciclo che setta il codice per disinnesco all'avvio
key=prendicarattere();
Multiplex7Seg::loadValue(codice);
if (buffer<=key && key<=9) {
buffer=key;
flag=0;
}
if(analogRead(A0)==0 && analogRead(A1)==0 && analogRead(A2)==0 && analogRead(A3)==0 && flag==0) {
codice=(codice *10)+buffer;
if (codice!=0)
reset2++;
buffer=0;
flag=1;
Multiplex7Seg::loadValue(codice);
}
if (key==11 && reset2==4) {
break;
}
if (key==10) {
reset2=0;
flag=1;
codice=0;
}
if (reset2>4) {
reset2=0;
codice=0;
digitalWrite(0, HIGH);
delay(50);
digitalWrite(0, LOW);
}
}
j=0; k=0;
buffer=0;
key=16;
reset2=0;
flag=1;
while (1) { // ciclo che setta i minuti
key=prendicarattere();
Multiplex7Seg::loadValue(j);
if (buffer<=key && key<=9) {
buffer=key;
flag=0;
}
if(analogRead(A0)==0 && analogRead(A1)==0 && analogRead(A2)==0 && analogRead(A3)==0 && flag==0) {
j=(j *10)+buffer;
if (j!=0)
reset2++;
buffer=0;
flag=1;
Multiplex7Seg::loadValue(j);
}
if (key==11 && reset2<=2 && reset2>=1) {
break;
}
if (key==10) {
reset2=0;
flag=1;
j=0;
}
if (reset2>2) {
reset2=0;
j=0;
digitalWrite(0, HIGH);
delay(50);
digitalWrite(0, LOW);
}
}
int pin[4]; // pin inizializzazione e dichiarazione dei pin per disinnescare la bomba
pin[0]=A5;
pin[1]=A4;
pin[2]=2;
pin[3]=1;
buffer=0;
key=16;
reset2=0;
flag=1;
int filo=0, caso;
while (1) { // ciclo che setta il filo che disinnesca la bomba e sceglie casualmente i restanti fili cosa fanno
key=prendicarattere();
Multiplex7Seg::loadValue(filo);
if (buffer<=key && key<=4) {
buffer=key;
flag=0;
}
if(analogRead(A0)==0 && analogRead(A1)==0 && analogRead(A2)==0 && analogRead(A3)==0 && flag==0) {
filo=buffer;
if (filo!=0)
reset2++;
buffer=0;
flag=1;
Multiplex7Seg::loadValue(filo);
}
if (key==11 && reset2==1) {
break;
}
if (key==10) {
reset2=0;
flag=1;
filo=0;
}
if (reset2>1) {
reset2=0;
filo=0;
digitalWrite(0, HIGH);
delay(50);
digitalWrite(0, LOW);
}
}
buffer=0;
srand(millis());
int i;
switch (filo) {
case 1: buffer=pin[0];
pin[0]=pin[2];
pin[2]=buffer;
break;
case 2: buffer=pin[1];
pin[1]=pin[2];
pin[2]=buffer;
break;
case 3: break;
case 4: buffer=pin[3];
pin[3]=pin[2];
pin[2]=buffer;
break;
}
while (1) { //ciclo del timer
x=j*100+k;
digitalWrite(0, LOW);
if (k==0) { // riavvolgimento secondi
j--;
k=60;
}
if (((millis())%z)==0) {
k--;
digitalWrite(0, HIGH); //accensione cicalino
delay(50);
digitalWrite(0, LOW); //spegnimento cicalino
}
if (!digitalRead(pin[3])==true) { // se il filo viene staccato il timer scorre piu' velocemente
z=500;
}
if (!digitalRead(pin[2])==true) { // se il filo viene staccato il timer bloccato e la bomba disinnescata
break;
}
if (!digitalRead(pin[1])==true && bool1==0) { //se il filo viene staccato ... boom
j=0;
k=0;
bool1++;
}
if (!digitalRead(pin[0])==true && bool2==0) { //se il filo viene staccato so dimezza il tempo
j=j/2;
k=k/2;
bool2++;
}
Multiplex7Seg::loadValue(x); // carica un valore intero preso da x
tasto=prendicarattere();
if (tasto_old<=tasto && tasto<=9) {
tasto_old=tasto;
flag=0;
}
if(analogRead(A0)==0 && analogRead(A1)==0 && analogRead(A2)==0 && analogRead(A3)==0 && flag==0) {
soluzione=(soluzione *10)+tasto_old;
if (soluzione!=0)
reset++;
tasto_old=0;
flag=1;
}
if(tasto==10) { //reset soluzione
soluzione=0;
flag=1;
}
if (tasto==11) { // visualizzazione della soluzione su schermo
Multiplex7Seg::loadValue(soluzione);
delay(1000);
if (k==0)
j--; else k--;
if (j<=0 && k==0) {
Multiplex7Seg::loadValue(0);
break;
}
}
if (reset==4 && soluzione != codice) {
reset=0;
soluzione=0;
digitalWrite(0, HIGH);
delay(500);
digitalWrite(0, LOW);
}
if(soluzione == codice) { // confronto soluzione
Multiplex7Seg::loadValue(8888);
break;
}
if (j==0 && k==0) { // caso in cui il tempo scade
Multiplex7Seg::loadValue(0);
digitalWrite(0, HIGH);
delay(1000);
digitalWrite(0, LOW);
break;
}
}
}
void loop() {
Multiplex7Seg::loadValue(8888);
}
int prendicarattere(void) {
if (analogRead(A0)>=100) {
if (analogRead(A0)>=140 && analogRead(A0)<=160) { // Corrispondente alla I Riga
return 1;
}
if (analogRead(A0)>=280 && analogRead(A0)<=310) {
return 2;
}
if (analogRead(A0)>=470 && analogRead(A0)<=510) {
return 3;
}
if (analogRead(A0)>=800 && analogRead(A0)<=830) {
return 12;
}
}
if (analogRead(A1)>=100) {
if (analogRead(A1)>=140 && analogRead(A1)<=160) { // Corrispondente alla II Riga
return 4;
}
if (analogRead(A1)>=280 && analogRead(A1)<=310) {
return 5;
}
if (analogRead(A1)>=470 && analogRead(A1)<=510) {
return 6;
}
if (analogRead(A1)>=800 && analogRead(A1)<=830) {
return 13;
}
}
if (analogRead(A2)>=100) {
if (analogRead(A2)>=140 && analogRead(A2)<=160) { // Corrispondente alla III Riga
return 7;
}
if (analogRead(A2)>=280 && analogRead(A2)<=310) {
return 8;
}
if (analogRead(A2)>=470 && analogRead(A2)<=510) {
return 9;
}
if (analogRead(A2)>=800 && analogRead(A2)<=830) {
return 14;
}
}
if (analogRead(A3)>=100) {
if (analogRead(A3)>=140 && analogRead(A3)<=160) { // Corrispondente alla IV Riga
return 10;
}
if (analogRead(A3)>=280 && analogRead(A3)<=310) {
return 0;
}
if (analogRead(A3)>=470 && analogRead(A3)<=510) {
return 11;
}
if (analogRead(A3)>=800 && analogRead(A3)<=830) {
return 15;
}
}
return 16;
}
Za pomoč se že vnaprej zahvaljujem.
Upam da vas ne moti ker pišem v Slovenščini , Moja Srbo-hrvaščina (še iz juge) je bolj tako...
Lep pozdrav iz sončne Slovenije -Primorske - mesta KOPER (Najlepšega obmorskega mesta).
L.P. Valter
valter