Show Posts
Pages: [1] 2 3
1  International / Software / Re: Codice poco reattivo? on: April 18, 2014, 05:15:44 am
Ricevuto!
tolto serialprint e tutto piu' reattivo! Poi studiero' anch'io millis() .

Grazie
2  International / Software / Codice poco reattivo? on: April 18, 2014, 04:43:54 am
Ciao a tutti,
attraverso un Arduino Mini,  vorrei sfruttare la lettura degli ingressi analogici (AD0, AD1, AD2, AD3)  collegati rispettivamente a 4 trimmer: in base al numero restituito (da 0 a 2013)  i 4 led RGB  dovrano, essere spenti,  lampeggiare, restare fissi o cambiare colore.
il codice seguente funziona, l'unico difetto è la reattivita': giro il trimmer ma per vedere l'effettivo cambiamento ci vuole qualche istante.
Come posso migliorare questo gap??

Qui potete trovare lo schemino elettrico:
https://www.dropbox.com/s/oh2kem76dbtr2wt/schema_001.jpg

Un grazie a chi mi da una mano!


Code:
int red1=2;
int red2=5;
int red3=8;
int red4=11;

int blue1 = 3;
int blue2 = 6;
int blue3 = 9;
int blue4 = 12;

int green1 = 4;
int green2 = 7;
int green3 = 10;
int green4 = 13;

void setup () {
Serial.begin(9600); 
 
    pinMode (blue1, OUTPUT);
    pinMode (blue2, OUTPUT);
    pinMode (blue3, OUTPUT);
    pinMode (blue4, OUTPUT);

    pinMode (green1, OUTPUT);
    pinMode (green2, OUTPUT);
    pinMode (green3, OUTPUT);
    pinMode (green4, OUTPUT);

    pinMode (red1, OUTPUT);
    pinMode (red2, OUTPUT);
    pinMode (red3, OUTPUT);
    pinMode (red4, OUTPUT);
}

void loop () {

int AD0 = analogRead(A0);
int AD1 = analogRead(A1);
int AD2 = analogRead(A2);
int AD3 = analogRead(A3); 
 
   Serial.println("AD0");
   Serial.println(AD0);
   delay(500);
   Serial.println("AD1");
   Serial.println(AD1);
   delay(500);
   Serial.println("AD2");
   Serial.println(AD2);
   delay(500);
   Serial.println("AD3");
   Serial.println(AD3);
   delay(500);
   
 //------------------------------------------

if ((AD0 > 0) && (AD0 < 307)) { 
  digitalWrite(green1, LOW);
  digitalWrite(red1, LOW);
  digitalWrite(blue1, LOW);  }                                       
      if   ((AD1 > 0) && (AD1 < 307)) { 
      digitalWrite(green2, LOW);
      digitalWrite(red2, LOW);
      digitalWrite(blue2, LOW);   }                                                       
            if   ((AD2 > 0) && (AD2 < 307)) { 
            digitalWrite(green3, LOW);
            digitalWrite(red3, LOW);
            digitalWrite(blue3, LOW); }         
                    if   ((AD3 > 0) && (AD3 < 307)) { 
                    digitalWrite(green4, LOW);
                    digitalWrite(red4, LOW);
                    digitalWrite(blue4, LOW);
                    delay(500);    }                         
//------------------------------------------
if ((AD0 > 307) && (AD0 < 409)) { 
  digitalWrite(green1, LOW);
  digitalWrite(red1, LOW);
  digitalWrite(blue1, HIGH);
  delay(500);               
  digitalWrite(blue1, LOW);
  digitalWrite(green1, LOW);
  digitalWrite(red1, LOW);
  delay(500);  }             
      if   ((AD1 > 307) && (AD1 < 409)) { 
      digitalWrite(green2, LOW);
      digitalWrite(red2, LOW);
      digitalWrite(blue2, HIGH);
      delay(500);               
      digitalWrite(blue2, LOW);
      digitalWrite(green2, LOW);
      digitalWrite(red2, LOW);
      delay(500); }             
            if   ((AD2 > 307) && (AD2 < 409)) { 
            digitalWrite(green3, LOW);
            digitalWrite(red3, LOW);
            digitalWrite(blue3, HIGH);
            delay(500);               
            digitalWrite(blue3, LOW);
            digitalWrite(green3, LOW);
            digitalWrite(red3, LOW);
            delay(500);   }             
                    if   ((AD3 > 307) && (AD3 < 409)) { 
                    digitalWrite(green4, LOW);
                    digitalWrite(red4, LOW);
                    digitalWrite(blue4, HIGH);
                    delay(500);               
                    digitalWrite(blue4, LOW);
                    digitalWrite(green4, LOW);
                    digitalWrite(red4, LOW);
                    delay(500);      }         
//------------------------------------------
if  ((AD0  > 410) && (AD0  < 511)){ 
  digitalWrite(blue1, HIGH);
  digitalWrite(green1, LOW);
  digitalWrite(red1, LOW); }
      if   ((AD1  > 410) && (AD1  < 511)){ 
      digitalWrite(blue2, HIGH);
      digitalWrite(green2, LOW);
      digitalWrite(red2, LOW); }
            if   ((AD2  > 410) && (AD2  < 511)){ 
            digitalWrite(blue3, HIGH);
            digitalWrite(green3, LOW);
            digitalWrite(red3, LOW); }               
                  if   ((AD3  > 410) && (AD3  < 511)){ 
                  digitalWrite(blue4, HIGH);
                  digitalWrite(green4, LOW);
                  digitalWrite(red4, LOW); }
//------------------------------------------
 if  ((AD0  > 512) && (AD0  < 614)){ 
      digitalWrite(blue1, LOW);
      digitalWrite(red1, LOW);
      digitalWrite(green1, HIGH);
      delay(500);               
      digitalWrite(green1, LOW);
      digitalWrite(blue1, LOW);
      digitalWrite(red1, LOW);
      delay(500);}
            if  ((AD1  > 512) && (AD1  < 614)){ 
            digitalWrite(blue2, LOW);
            digitalWrite(red2, LOW);
            digitalWrite(green2, HIGH);
            delay(500);               
            digitalWrite(green2, LOW);
            digitalWrite(blue2, LOW);
            digitalWrite(red2, LOW);
            delay(500);}
                  if  ((AD2  > 512) && (AD2  < 614)){ 
                  digitalWrite(blue3, LOW);
                  digitalWrite(red3, LOW);
                  digitalWrite(green3, HIGH);
                  delay(500);               
                  digitalWrite(green3, LOW);
                  digitalWrite(blue3, LOW);
                  digitalWrite(red3, LOW);
                  delay(500);}
                    if  ((AD1  > 512) && (AD1  < 614)){ 
                      digitalWrite(blue4, LOW);
                      digitalWrite(red4, LOW);
                      digitalWrite(green4, HIGH);
                      delay(500);               
                      digitalWrite(green4, LOW);
                      digitalWrite(blue4, LOW);
                      digitalWrite(red4, LOW);
                      delay(500);}
//------------------------------------------ 
if  ((AD0  > 615) && (AD0  < 716)){ 
    digitalWrite(green1, HIGH);
    digitalWrite(red1, LOW);   
    digitalWrite(blue1, LOW);   }   
      if  ((AD1  > 615) && (AD1  < 716)){ 
      digitalWrite(green2, HIGH);
      digitalWrite(red2, LOW);   
      digitalWrite(blue2, LOW);  }               
            if  ((AD2  > 615) && (AD2  < 716)){ 
            digitalWrite(green3, HIGH);
            digitalWrite(red3, LOW);   
            digitalWrite(blue3, LOW);   }                 
            if  ((AD3  > 615) && (AD3  < 716)){ 
            digitalWrite(green4, HIGH);
            digitalWrite(red4, LOW);   
            digitalWrite(blue4, LOW);   }   
 //------------------------------------------                 
if  ((AD0  > 717) && (AD0  < 921)){           
     digitalWrite(blue1, LOW);
     digitalWrite(green1, LOW);
     digitalWrite(red1, HIGH);
     delay(500);               
     digitalWrite(red1, LOW);
     digitalWrite(blue1, LOW);
     digitalWrite(green1, LOW);
     delay(500);}
           if  ((AD1  > 717) && (AD1  < 921)){   
           digitalWrite(blue2, LOW);
           digitalWrite(green2, LOW);
           digitalWrite(red2, HIGH);
           delay(500);               
           digitalWrite(red2, LOW);
           digitalWrite(blue2, LOW);
           digitalWrite(green2, LOW);
           delay(500);}
               if  ((AD2  > 717) && (AD2  < 921)){   
               digitalWrite(blue3, LOW);
               digitalWrite(green3, LOW);
               digitalWrite(red3, HIGH);
               delay(500);               
               digitalWrite(red3, LOW);
               digitalWrite(blue3, LOW);
               digitalWrite(green3, LOW);
               delay(500);}
                   if  ((AD3 > 717) && (AD3  < 921)){   
                   digitalWrite(blue4, LOW);
                   digitalWrite(green4, LOW);
                   digitalWrite(red4, HIGH);
                   delay(500);               
                   digitalWrite(red4, LOW);
                   digitalWrite(blue4, LOW);
                   digitalWrite(green4, LOW);
                   delay(500);}
  //------------------------------------------       
if  ((AD0  > 922) && (AD0  < 1024)){ 
     digitalWrite(red1, HIGH);
     digitalWrite(green1, LOW);   
     digitalWrite(blue1, LOW);  }
         if  ((AD1  > 922) && (AD1  < 1024)){ 
         digitalWrite(red2, HIGH);
         digitalWrite(green2, LOW);   
         digitalWrite(blue2, LOW);}
           if  ((AD2  > 922) && (AD2  < 1024)){ 
           digitalWrite(red3, HIGH);
           digitalWrite(green3, LOW);   
           digitalWrite(blue3, LOW);}
               if  ((AD3  > 922) && (AD3  < 1024)){ 
               digitalWrite(red4, HIGH);
               digitalWrite(green4, LOW);   
               digitalWrite(blue4, LOW);}









3  International / Software / Re: ROTAZIONE LED on: September 19, 2013, 08:44:41 am
Ciao,
questo inizio di  sketch puo' andare bene per array circolare?
Mi manca il codice che va' all'interno del void loop....  qualche suggerimento? smiley-sad-blue
Grazie per la santa pazienza


Code:
byte led [] = {2,3,4,5,6,7,8,9};
int ciclo1 []= {2,3};
int ciclo2 []= {3,4};
int ciclo3 []= {4,5};
int ciclo4 []= {5,6};
int ciclo5 []= {6,7};
int ciclo6 []= {7,8};
int ciclo7 []= {8,9};
int ciclo8 []= {9,2};




int Count = 8;
int SPEED = 1000;


void setup () {
  for (int Pin = 0; Pin < Count; Pin++) {
    pinMode (led [Pin],OUTPUT);

  }   
}

void loop () {


}
4  International / Software / Re: ROTAZIONE LED on: September 19, 2013, 07:02:47 am
Ciao,
ho provato come dici tu ma non mi funziona... smiley-confuse
conosci qualche codice alternativo che dia lo stesso risultato?
5  International / Software / ROTAZIONE LED on: September 19, 2013, 04:28:30 am
Ciao,
ho disposto in cerchio 8 led e volevo far scorrere 2 led in rotazione continua, con il codice che vi posto ho dei problemi nel "legare" lo scorrimento nel punto finale con quello iniziale, potete darci un'occhiata?



Code:
int pinArray[] = {2, 3, 4, 5, 6, 7, 8, 9};
int count = 0;
int timer = 1000;

void setup(){
  for (count=0;count<8;count++) {
       pinMode(pinArray[count], OUTPUT);
  }
}

void loop() {
  for (count=0;count<8;count++) {
      digitalWrite(pinArray[count], HIGH);
      digitalWrite(pinArray[count]+1, HIGH);

           delay(timer);

      digitalWrite(pinArray[count], LOW);
      digitalWrite(pinArray[count]+1, LOW);
  }



}


Grazie!
6  International / Software / Re: lettura analogica on: August 27, 2013, 01:35:32 am
ok, grazie.
7  International / Software / Re: lettura analogica on: August 26, 2013, 09:21:19 am
ok, questo dovrebbe essere abb.za corretto:

Code:
// definisce il pin analogico

#define analog0 A0


// definisce il pin digitale
 
#define led 2


// variabile int che memorizza lo stato (high/low) del led

int stLed0 = 0;

 
void setup()
{
    pinMode( analog0, INPUT ); //imposta il pin analogico come imput 

 
    pinMode( led, OUTPUT ); //imposta il led come output

 
    digitalWrite( led, stLed0 ); //
}
 
void loop()
{
 
  if ( analogRead(analog0) > 1000 )  //se analog0 è maggiore di 1000
  {
    if ( stLed0 == LOW  ) stLed0 = HIGH;  //se la variabile stLed0 è low portala ad high
    else                     stLed0 = LOW;  // altrimenti imposta la variabile stLed0 come low
    digitalWrite( led, stLed0 );
    delay(200);  /*importante! se non ci fosse risulterebbe problematico catturare lo stato acceso o spento alla pressione del pulsante
    in piu' evita di premere il pulstante alla velocita' di 1 millesimo di sec */
   
  }
 
}

8  International / Software / Re: lettura analogica on: August 26, 2013, 04:52:07 am
Ok grazie per le dritte.
Utizillo gli ingressi analogici perche' quelli digitali sono gia' tutti occupati.

Ciao.
9  International / Software / Re: lettura analogica on: August 26, 2013, 03:34:47 am
Ciao e grazie per la risposta.
Ho fatto come hai detto tu ed ho modificato un po' il codice, ora se premo il pulsante il led si accende e se lo ripremo si spegne. Se lo tengo premuto pero' lampeggia, come mai? C'è un modo per evitare che accada?

Code:
const int analogPin = A0;    // Pin analogico
const int ledPin = 7;       // Pin digitale
const int soglia = 400;
int analogValue = 0;
int state = 0;
int val = 0;
int old_val = 0;

void setup() {
 
  pinMode(ledPin, OUTPUT);
 
  Serial.begin(9600);
}

void loop() {
 
analogValue = analogRead(analogPin);  //legge il valore dell'ingresso analogico

  // se il valore analogico e abbastanza alto accendi il led:
 
 
 
  if (analogValue > soglia) {
     state = 1 - state;
     delay(50);
     
  }
 

  if (state == 1) { 
    digitalWrite(ledPin, HIGH);
}
  else {
    digitalWrite(ledPin,LOW);
  }


  Serial.println(analogValue);
  delay(100);     
  }


Qui c'è lo schema:
https://www.dropbox.com/s/j1fjmh8sk2h464t/schema.jpg
10  International / Software / lettura analogica on: August 22, 2013, 10:48:24 am
Ciao a tutti,
ho trovato questo codice che, attraverso un pulsante, attiva il  pin digitale 7 se la variabile "analogvalue" supera una certa soglia. Vorrei pero' conservare questo valore fin quando non viene ripremuto il pulsante, un po' come succede con gli interruttori di casa. E' possibile?


Code:

const int analogPin = A0;    // Pin analogico
const int ledPin = 7;       // Pin digitale
const int soglia = 400;   

void setup() {
 
  pinMode(ledPin, OUTPUT);
 
  Serial.begin(9600);
}

void loop() {
 
  int analogValue = analogRead(analogPin);  //legge il valore dell'ingresso analogico

  // se il valore analogico e abbastanza alto accendi il led:
  if (analogValue > soglia) {
    digitalWrite(ledPin, HIGH);
  }
  else {
    digitalWrite(ledPin,LOW);
  }


  Serial.println(analogValue);
  delay(100);     
}


Grazie per le numerose risposte smiley-wink

11  International / Hardware / Re: TLC 5940 E LED DI POTENZA on: July 31, 2013, 08:56:57 am
Ciao a tutti.
Prima di tutto volevo ringraziarivi per  i suggerimenti, vi aggiorono sulle ultime cose fatte:

L'isolamento galvanico delle alimentazioni ed il sucessivo filtraggio non ha dato i risultati che ci aspettavamo, il comportamento dei led è ancora "random".
Penso che il pilotaggio dei 4n35 (diodo led controllato in PWM) non vada d'accordo con il generatore di corrente costante cosi' com'è stato progettato, che prevede il pilotaggio diretto da parte di arduino senza l'uso del PWM.
Una delle possibilta' è quella di abbandonare il TLC 5940 ed utilizzare direttamente le porte I/O di arudino (ovviamente aumentandone il numero...questo progetto morira' cosi' smiley-cry)





Vi allego cmq lo sketch:
Code:

    Tlc.clear();


    if (channel == 0) {
      direction = 1;
    } else {
 //     Tlc.set(channel - 1, 500);
 //     Tlc.set(channel - 2, 100);
    }
    Tlc.set(channel, 4095);
    if (channel != NUM_TLCS * 16 - 1) {
 //     Tlc.set(channel + 1, 500);
 //     Tlc.set(channel + 2, 100);
    } else {
      direction = -1;
    }


    Tlc.update();

    delay(75);
  }
12  International / Hardware / Re: TLC 5940 E LED DI POTENZA on: July 26, 2013, 08:50:28 am
Grazie per la (veloce) risposta,

Il programma cosi' come è stato fatto (per ora) accende un led alla volta in sequenza (350mA) , gia' all'avvio si ha un accensione random con piu' led accesi simultaneamente. Tenderei ad escludere questa ipotesi.

L'alimentazione +5v dei led di potenza è in comune con quella digitale, potrei  quindi tentare come dici tu, una suddivisione dei 2 rami per verificare il corretto funzionamenti di i micro e potenza.

Ti faccio sapere qualcosa lunedi'.

Grazie ancora,
Un saluto.

13  International / Hardware / TLC 5940 E LED DI POTENZA on: July 26, 2013, 05:04:25 am
Ciao a tutti,
sto cercando di far funzionare dei led di potenza con tlc 5940, ma qualcosa non va per il verso giusto, avete qualche suggerimento o consiglio da darmi?
Ho creato un brevissimo filmato che mostra il problema:    
Qui sotto vi descrivo il lavoro fatto:


PROGETTO:
Scorrimento Led di Potenza

TEST PRELIMINARI ESEGUITI: Arduino Mini con TLC 5940 con 16 LED collegati, (scorrimento di un led acceso in sequenza, Vedi Filmato). Il funzionamento è corretto.

PROGETTO FINALE
(foto1):
Pilotaggio LED di potenza con i seguenti componenti:
1. Arduino Mini
2. TLC5940
3. Optoisolatore 4N35
4. Stadio Mosfet Regolatore in corrente
5. Led 1w/350 mA

 (vedi schema elettrico foto 4)

PROBLEMA:

L'accensione dei led a scorrimento regolare non avviene in maniera corretta, presenta invece, una sequenza disordinata (random).  
I controlli di pilotaggio sono stati eseguiti manualmente “senza TLC”, con risultato positivo.
Dopo aver inserito il TLC ed acceso il sistema si verifica una emissione “random” di luce.
Tutti i componenti (Arduino, TLC, Piloti) sono stati testati singolarmente e sono tutti funzionanti.


Nel caso vi dovessero servire vi allego delle foto:
https://www.dropbox.com/s/a72otow7n1408eb/foto1.jpg
https://www.dropbox.com/s/bc0hcbdb2yq1tzo/foto2.jpg
https://www.dropbox.com/s/2kgtgsrjondosz8/foto3.jpg

schema elettrico:
https://www.dropbox.com/s/uqwanc8cfvgoonn/foto4.jpg

Grazie a tutti!
14  International / Software / "semplice" LED fade con TLC5940 on: May 24, 2013, 05:34:47 am
Ciao a tutti,
volevo far "respirare" un led con il TLC5940, magari con una pausa di 1 sec.
In questo caso ottengo un unico "respiro", non riesco quindi ad ottenere un ciclo continuo.

Vi posto il codice:

Code:
//Tlc_addFade (channel, startValue, endValue, startMillis, endMillis)
//channel: the LED you want to fade
//startValue: the output value at the start of the fade
//endValue: the output value at the end of the fade
//startMillis: when to start the fade (based on the Arduino's millis() value)
//endFade : when to end the fade


#include "Tlc5940.h" //led driver
#include "tlc_fades.h"

void setup ()
{
Tlc.init ();

tlc_addFade(0, 0, 500, 0000, 1000); tlc_addFade(0, 500, 0, 2000, 4000);
 

}

void loop ()
{
 

Tlc.update();

tlc_updateFades();
}

Grazie a tutti.
15  International / Software / Re: tlc 5940 e leds on: May 19, 2013, 10:54:39 am
Ok, grazie del consiglio.
Pages: [1] 2 3