Show Posts
Pages: [1]
1  International / Software / [RISOLTO] Problema visualizzazione valore su display 7 segnenti on: October 17, 2012, 01:31:42 pm
Ringrazio per i consigli.Al momento sono riuscito ad ottenere cio che volevo un po' ragionado,un po' con delle prove e molto per c..o  smiley-lol .
Mancio non volevo sminuire il tuo consiglio/programma quando ho scritto peggiore era solo per dire che non andava bene nemmeno lui per il mio scopo.
Come avrete ben capito purtroppo sono alle prime armi e non avendo nessuno che mi insegni chiedo qui qualche consiglio dopo che magari ho già perso molte ore a
cercare informazioni, provare e leggere nei vari corsi online senza riuscire a venirne a capo.Spero di non stressarvi troppo in futuro.comunque grazie a tutti.
Questo è il codice "giusto" per il mio scopo non sarà il massimo da leggersi forse si riusciva a fare risparmiando memoria però in compenso sono soddisfatto.
Grazie leo72 per quel while senno neanche il c..o poteva aiutarmi....
P.S. critiche e consigli sempre ben accetti!!!!!
Code:

//contatore da 0 a 6 base con due pulsnti
//con visualizzazione su monitor
//seriale del valore acquisito da cont
//e visualizzazione del numero su display
//led 7 digit con interfaccia cd4511

int up =8;
int down =7;
int attup =13;
int attdown =12;
int val_up;
int val_down;
int count;
int pausa =250;
int led1 =10;
int led2 =11;
int led3 =2;


void setup(){
  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  Serial.begin(9600);
}

void loop(){

  Serial.println(count);

  val_up = digitalRead(up);
  val_down = digitalRead(down);

  if ( val_up == HIGH && count <= 5) {
    digitalWrite (attup, HIGH);
    delay (pausa);
    digitalWrite (attup, LOW);
    count++;
    Serial.println(count);
     
  }

  else if ( val_down == HIGH && count != 0) {
    digitalWrite(attdown, HIGH);
    delay (pausa);
    digitalWrite(attdown, LOW);
    count--;
    Serial.println(count);
   
  }

  else {
    digitalWrite(attup, LOW);
    digitalWrite(attdown, LOW);
  }
 
  switch (count) {

  case 0:
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }
    break;

  case 1:
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }
    break;

  case 2:
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }
    break;

  case 3:
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }   
    break;

  case 4:
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }
    break;

  case 5:
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }
    break;

  case 6:
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    while (digitalRead(up)){
    }
    while (digitalRead(down)){
    }
    break;
  }

  delay (15);
}



2  International / Software / Problema visualizzazione valore su display 7 segnenti on: October 16, 2012, 12:20:39 pm
Purtroppo il codice postato lo avevo provato successivamente,e avevo ottenuto risultati peggiori. Nel senso che, oltre al ritardo di incremento sul display, il ritardo lo avevo anche sul serial monitor...(per ritardo intendo che finchè non rilascio il pulsante,non avviene la variazione di cont o del display).avrei bisogno qualcosa che mi permettesse di incrementare del valore prescelto il display nonostante che il pulsante sia ancora premuto.comunque grazie lo stesso!!!  smiley-wink
3  International / Software / [RISOLTO] Problema visualizzazione valore su display 7 segnenti on: October 15, 2012, 07:25:26 am
Ciao a tutti, ho un problema con un programma. Spiego brevemente come funziona il programma:dopo la pressione di uno dei tasti modifica il valore della variabile cont,e in base al valore acquisito da cont,con switch case, va a pilotare un cd4511(cod. bcd )che decodifica per rappresentare sul display in questione il valore di cont.Fin qui tutto bene visto che il programma che posterò a seguitio funziona correttamente. Quello che però non va, o per lo meno non va bene a me,è il fatto che finchè non rilascio il pulsante non mi cambia lo stato (switch case) che pilota il cd4511, mentre il valore di cont cambia prima del rilascio del pulsante(visto dal serial monitor).Spero di essere riuscito a spiegarmi correttamente nel caso chiedete pure se qualcosa non è chiaro grazie per l'aiuto e buona continuazione.
Code:
//contatore da 0 a 6 base con due pulsnti
//con visualizzazione su monitor
//seriale del valore acquisito da cont
//e visualizzazione del numero su display
//led 7 digit con interfaccia cd4511

int up =8;
int down =7;
int attup =13;
int attdown =12;
int val_up;
int val_down;
int cont;
int pausa =250;
int led1 =10;
int led2 =11;
int led3 =2;


void setup(){
  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT);
  pinMode(led1, OUTPUT);
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  Serial.begin(9600);
}

void loop(){

  Serial.println(cont);

  val_up = digitalRead(up);
  val_down = digitalRead(down);
  
  if ( val_up == HIGH && cont <= 5) {
    digitalWrite (attup, HIGH);
    delay (pausa);
    digitalWrite (attup, LOW);
    cont++;
    Serial.println(cont);
    while (digitalRead(up)){
    }
  }

  else if ( val_down == HIGH && cont != 0) {
    digitalWrite(attdown, HIGH);
    delay (pausa);
    digitalWrite(attdown, LOW);
    cont--;
    Serial.println(cont);

    while (digitalRead(down)){
    }
  }

  else {
    digitalWrite(attup, LOW);
    digitalWrite(attdown, LOW);
  }

  switch (cont) {

  case 0:
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    break;

  case 1:
    digitalWrite(led1, LOW);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    break;

  case 2:
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    break;

  case 3:
    digitalWrite(led1, LOW);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, HIGH);
    break;

  case 4:
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, LOW);
    break;

  case 5:
    digitalWrite(led1, HIGH);
    digitalWrite(led2, LOW);
    digitalWrite(led3, HIGH);
    break;

  case 6:
    digitalWrite(led1, HIGH);
    digitalWrite(led2, HIGH);
    digitalWrite(led3, LOW);
    break;
  }

  delay (15);
}
4  International / Software / Re: Problema con l'utilizzo delle variabili on: October 14, 2012, 09:27:47 am
grazie mille ora infatti a furia di provarci e ragionarci ci ero riuscito su un programma ancora più semplice(non che l'altro era complicato  smiley)
5  International / Software / Problema con l'utilizzo delle variabili on: October 14, 2012, 07:22:15 am
Vediamo se riesco a spiegare meglio la situazione ho modificato il programma come avete detto, purtroppo però non funziona!!
Il problema è il seguente:non riesco a gestire la variabile cont.Essa dovrebbe,in seguito alla pressione del pulsante up variare il suo stato da 0 a 1 cont++ e avendo un valore <5 venir incrementata nuovamente con la seconda funzione else if. spero di essermi spiegato correttamente di seguito il codice modificato
Code:
int up = 8;
int down = 7;
int attup = 13;
int attdown = 12;
int val_up;
int val_down;

void setup() {
  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT);

}

void loop() {
  val_up = digitalRead(up);
  val_down = digitalRead(down);
  int cont=0; //variabile che deve cambiare in funzione dellla pressione tasto
  if ( val_up == HIGH && cont == 0) {
    delay (25);
    digitalWrite(attdown, HIGH);
    delay (1000);
    digitalWrite(attdown, LOW );
    cont++;
    while (digitalRead(up)) {
    }
  }
  else if ( val_up == HIGH && cont <6) {
    delay (25);
    digitalWrite(attup, HIGH);
    delay (1000);
    digitalWrite(attup, LOW);
    cont++;
    while (digitalRead(up)) {
    }
  }
  else
    digitalWrite(attup, LOW);
  digitalWrite(attdown, LOW);
}




6  International / Software / Problema con l'utilizzo delle variabili on: October 14, 2012, 04:52:13 am
Ciao a tutti.Sto cercando di capire il funzionamento delle variabili.Ipottizziamo di creare un programma che mi permetta in funzione del valore di x di eseguire una determinata azione il mio problema è che non riesco a capire come dichiararla e come incrementarla o decrementarla in base all'azione svolta. Posto il codice che forse rende più chiara la situazione.grazie per chi riuscirà a togliermi i dubbi.
Code:





int up = 8;
int down = 7;
int attup = 13;
int attdown = 12;

void setup() {
  pinMode(up, INPUT);
  pinMode(down, INPUT);
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT);

}

void loop() {
  up = digitalRead(up);
  down = digitalRead(down);
  int var=0;
  if ( up == HIGH && var == 0) {
    delay (25);
    digitalWrite(attdown, HIGH);
    delay (1000);
    digitalWrite(attdown, LOW );
    var++;
    while (digitalRead(up)) {
    }
  }
  else if ( up == HIGH && var <6) {
    delay (25);
    digitalWrite(attup, HIGH);
    delay (1000);
    digitalWrite(attup, LOW);
    var++;
    while (digitalRead(up)) {
    }
  }
  else
    digitalWrite(attup, LOW);
  digitalWrite(attdown, LOW);
}
7  International / Software / Accendere led per 50 millisecondi con pressione pulsante on: October 13, 2012, 11:25:56 am
Grazie per la risposta veloce e per la spiegazione
8  International / Software / Accendere led per 50 millisecondi con pressione pulsante on: October 13, 2012, 10:56:22 am
Ciao a tutti. E' tutto il pomeriggio che provo ma non riesco a venirne a capo.Il programma in questione dovrebbe,dopo la pressione del pulsante,accendere un led per 50 millisecondi. Il mio problema è il seguente:se mantengo premuto il pulsante il led rimane acceso.In pratica a me servirebbe un'impulso di 50 ms anche se il pulsante rimane premuto. Spero di essermi spiegato di seguito posto il file sorgente.
Code:
                 
int up = 8;
int down = 7;
int attup = 13;
int attdown = 12;
int pausa = 50;
int su = 0;
int giu = 0;

void setup() {
  pinMode(attup, OUTPUT);
  pinMode(attdown, OUTPUT );
  pinMode(up,    INPUT);
  pinMode(down, INPUT);
  }
 
void loop() {
 
  su = digitalRead(up);
  giu = digitalRead(down);
  if (su == HIGH) {
  digitalWrite(attup, HIGH);
  delay (pausa);
  digitalWrite(attup, LOW );
  }
  else {
  digitalWrite(attup, LOW);
  }
  if (giu == HIGH) {
  digitalWrite(attdown, HIGH);
  delay (pausa);
  digitalWrite(attdown, LOW ); 
  }
  else {
  digitalWrite(attdown, LOW);
  }
  }

Grazie anticipatamente a chi vorrà spiegarmi dov'è l'errore e indicarmi la soluzione.
9  International / Generale / Re: Presentazioni nuovi iscritti, fatevi conoscere da tutti! on: October 13, 2012, 09:11:10 am
Ciao a tutti mi chiamo Gianluca, sono della provincia di Varese e sono apppassionato di elettronica e meccanica.
Purtroppo non sono riuscito a prendere il diploma di perito elettronico visto che ai tempi non ero motivato;quindi
le mie conoscenze sono superficiali. Spero con voi di riuscire a imparare a programmare con arduino nella speranza
di riuscire a realizzare qualche progetto per il campo dell'aeromodellismo e dei go-kart
Pages: [1]