Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Arduino ura
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
valter
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).
L.P. Valter

vvvv
Valter if you use google translate, it's polite to post the text translated to target language or in English.
Вот перевод его поста с словенского, прикольный парень ...:
Я из Словении (EX YUgoslavia). Прошу прощения за письмо в словенском. Я думаю, что это лучшее, потому что мы все используем google translate.
Поэтому я хотел бы сделать час - который отсчитывал бы от 60 минут до нуля.
Я хотел бы использовать дисплей MAX 7219 и arduino UNO ..
Я бы попросил полезную программу. Это то, что мне нужно для ESCAPE HAUSE.
Я уже заранее благодарю вас за помощь.
Привет из солнечной Словении - Приморская - город КОПЕР (самый красивый прибрежный город).
Л.П. Valter
valter
vvvv Se zahvaljujem za pomoč. Bom probal prevajati.Bojim pa se , da bo Googlova Ruščina težko razumljiva.Če ne bo kaj narobe , bi dal gor oba teksta , da bo lahko kdo še kaj dodal (v prevajanju)
OK imam program za 7 segmentni led prikazovalnik , ki je zelo kompliciran. Na žalost je moje programiranje na nivoji Copy - paste. Zato bi rabil pomoč pri spremembi programa.

Код
/*
* 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;
}

VVVV спасибо за вашу помощь. Буду ли я попробовал prevajati.Bojim, что России трудно razumljiva.Če Google не ошибется, отказаться от двух текстов, что кто-то может что-нибудь добавить (в переводе)
Хорошо у меня есть программа для 8-сегментного светодиодного дисплея, который является очень сложным. К сожалению, мое программирование на уровне Копировать - Вставить. Таким образом, необходимо, чтобы помочь изменить программу.
valter
Ok napredujem .
Tu je program ki na 5 segmentnem displeju izpiše željeni tekst.
Problem je še vedno program za uro ...

QUOTE
Хорошо, я прогрессирую.
Вот программа, которая отображает желаемый текст на дисплее 5-го сегмента.
Проблема все еще часовая программа.

CODE

#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);
}

valter
Нажмите для просмотра прикрепленного файла
Se mi ne da preveč programirati ....
Prihaja hladna fronta in se bo ohladilo --->spraznila plaža ...potem bo več volje za programiranje...
vvvv
Valter, I'm really sorry for the all participants of this forum. But it's obvious you will not get help here.
Arduino is not a professional hardware. To answer on your questions user should have board and time to check your software.

Try other forums connected with the Arduino via Google
like this http://arduino.ru/forumy/programmirovanie
or this https://forum.arduino.cc/index.php?PHPSESSI...1&board=4.0
Thank you for the photo sm.gif
Lagman
Так вроде полно в инете проектов таймеров на arduino и MAX 7219, как раз для copy-paste
Вот для примера https://brainy-bits.com/blogs/tutorials/ard...max7219-display
valter
Logman hvala za link beer.gif Dela... Samo še moram vse skupaj pretvoriti v minute sad.gif .
Zunaj se je malo ohladilo , pa bo več časa za programiranje...

Logman благодарит вас за то, что вы связали Дело ... Мне просто нужно перевернуть все вместе за несколько минут
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.