Arduino ura

valter
Offline
Зарегистрирован: 09.08.2017

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).

inspiritus
Offline
Зарегистрирован: 17.12.2012

Hi, na primer, poskusite to knjižnico,

http://mynobook.blogspot.ru/2017/02/ledmatrix7219.html

valter
Offline
Зарегистрирован: 09.08.2017

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.

 

Проблемы работают над программой, поэтому я прошу помощи с ней. Часы должны отсчитывать 60 минут ... 59 минут ...

Спасибо за библиотеку (у меня уже есть и работает). К сожалению, мое программирование - на уровнях копирования.

 

valter
Offline
Зарегистрирован: 09.08.2017

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.

valter
Offline
Зарегистрирован: 09.08.2017
Хорошо, я прогрессирую.
Вот программа, которая отображает желаемый текст на дисплее 5-го сегмента.
Проблема все еще часовая программа.
Ok napredujem .
Tu je program ki na 5 segmentnem displeju izpiše željeni tekst.
Problem je še vedno program za uro ...
 
#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);
}