Arduino ura
- Войдите на сайт для отправки комментариев
Втр, 22/08/2017 - 01:13
Sem iz Slovenije (EX YUgoslavija) . Se opravičujem , ker pišem v slovenščini . Mislim da je tako najbolje , saj vsi uporabljamo google translate.
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 .
Za pomoč se že vnaprej zahvaljujem.
Lep pozdrav iz sončne Slovenije -Primorske - mesta KOPER (Najlepšega obmorskega mesta).
Hi, na primer, poskusite to knjižnico,
http://mynobook.blogspot.ru/2017/02/ledmatrix7219.html
Težave mi dela program , zato bi prosil za pomoč pri njem .Ura mora namreč odštevati 60 minut...59 minut...
Hvala za knjižnico (jo že imam in dela) Žal pa je moje programiranje na nivoji copy paste.
Tu imam primer ki deluje na led (8seg) displejih....
/* * 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; }Komplicirana zadeva :
Nekaj takega bi rabil na MAX-u
Lep pozdrav Valter.
#include "LedControlMS.h" /* pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ #define NBR_MTX 4 LedControl lc=LedControl(12,11,10, 1); /* we always wait a bit between updates of the display */ String scrollString= "sebastjanova kitajska trgovina xx"; int stringLength=scrollString.length(); char ch0, ch1, ch2, ch3; int nextCharIndex=0; void setup() { /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ Serial.begin (9600); Serial.println("SEBA"); Serial.println(scrollString); Serial.println(stringLength); for (int i=0; i< NBR_MTX; i++){ lc.shutdown(i,false); /* Set the brightness to a low value */ lc.setIntensity(i,8); /* and clear the display */ lc.clearDisplay(i); } delay(800); lc.clearAll(); ch0= scrollString[0]; ch1= scrollString[1]; ch2= scrollString[2]; ch3= scrollString[3]; nextCharIndex=4; } void loop(){ lc.displayChar(0, lc.getCharArrayPosition(ch0)); lc.displayChar(1, lc.getCharArrayPosition(ch1)); lc.displayChar(2, lc.getCharArrayPosition(ch2)); lc.displayChar(3, lc.getCharArrayPosition(ch3)); ch0=ch1; ch1=ch2; ch2=ch3; ch3=scrollString[nextCharIndex++]; if (nextCharIndex>=stringLength) nextCharIndex=0; delay(1000); lc.clearAll(); delay(25); }