Vai al contenuto
PLC Forum


progetto arduino non funziona


mlsscnvs

Messaggi consigliati

Salve a tutti, mi chiamo Melissa e spero vivamente di riuscire a trovare un'aiuto in questo forum.
Praticamente devo realizzare un progetto con arduino in cui si verifica l'accensione di 4 Led comandati da due pulsanti uno di marcia (che fa partire tutto il circuito) e l'altro di stop che dunque va ad interrompere il circuito. Vi sono presenti, inoltre, un potenziometro che ha il compito di gestire la velocità dei led ed uno switch che ha il compito di invertitre il segnale di marcia dei led ( se prima andavano da sinistra a destra ora devono andare da destra a sinistra) Allego il progetto usato tramite il software "tinkercad".
Spero vivamente che qualcuno riesca ad aiutarmi possibilmente senza variare i valori delle resistenze.

 

 

 

 

Modificato: da Livio Orsini
tolti links
Link al commento
Condividi su altri siti


Prima cosa i 2 links ch hai inserito dove portano? Richiedono un indirizzo mail e questo è in contrasto con la politica del forum.Se vuoi inserire un tuo file devi usare o olo spazio di upload del forum, oppure metterlo in un sito di hosting che non richieda registrazioni.

 

Il tuo è un progetto didattico per una scuola?

 

Comunque sia io sono contrario a dare soluzioni belle e pronte, ma sono dispostissimo ad aiutare per trovare la soluzione.

 

Vediamo per prima cosa se ho capito bene il problema

 

Ci sono 4 LED che devono accendersi in sequenza ciclica.

Un potenziometro determina la velocità con cui questi LEDs effettuano la sequenza di accensione.

Il senso della sequenza basso ---> alto o alto ---> basso è determinato dalla posizione di uno switch.

La sequenza ha inizio con il riconoscimento della pressione del pulsante "Marcia" e termina con il riconoscimento della pressione del tasto "Arresto".

 

Ho interpretato correttamente?

 

Poi cosa c'è che non funziona?

Non fa la sequenza corretta? non effettua l'inversione? non riconosce i comandi?

Oppure non funziona alcunchè?

 

 

28 minuti fa, mlsscnvs ha scritto:

possibilmente senza variare i valori delle resistenze.

C'è un valore minimo di ressitenza al di sotto del quale non si può scendere perchè si danneggerebbe la porta di arduino(o il LEDs); c'è anche un valore massimo di resistenza al di sopra del quale la luminosità del LED diventa insufficiente.

Se le tue resistenze sono conprese tra questi 2 valori, non c'è ragione di variarle; comunque non penso che sia questo la causa del non funzionamento

Link al commento
Condividi su altri siti

6 ore fa, Livio Orsini ha scritto:

Prima cosa i 2 links ch hai inserito dove portano? Richiedono un indirizzo mail e questo è in contrasto con la politica del forum.Se vuoi inserire un tuo file devi usare o olo spazio di upload del forum, oppure metterlo in un sito di hosting che non richieda registrazioni................

.......................................

.......................................

C'è un valore minimo di ressitenza al di sotto del quale non si può scendere perchè si danneggerebbe la porta di arduino(o il LEDs); c'è anche un valore massimo di resistenza al di sopra del quale la luminosità del LED diventa insufficiente.

Se le tue resistenze sono conprese tra questi 2 valori, non c'è ragione di variarle; comunque non penso che sia questo la causa del non funzionamento

il link doveva portare al progetto su un sito che uso per testare se funziona o meno senza montare ogni volta l'arduino. 

L'oggetto l'ha interpretato correttamente.

Il problema iniziale è che quando premo il pulsante MARCIA si avviano in sequenza il led 4 poi il 3 e di nuovo il 4 poi il ciclo parte dall' 1,2,3,4 come giusto che sia solo che al raggiungimento di quest'ultimo si inverte il senso di marcia senza l'utilizzo dello switch e se provo a premerlo non accade nulla dunque l'arduino non legge lo switch

Non riesco a capire dove possa aver sbagliato nel programma:

#define switch 5
#define buttom_s 6
#define buttom_m 7
#define led1   10
#define led2   11
#define led3   12
#define led4   13

bool ciclo=0;
bool puls_m=0;
bool puls_s=0;
bool marcia=0;
int  counter=0;
int  I=0;

void setup()
{
    pinMode(switch,INPUT);
    pinMode(buttom_s,INPUT);
    pinMode(buttom_m,INPUT);
    pinMode(led1,OUTPUT);
    pinMode(led2,OUTPUT);
    pinMode(led3,OUTPUT);
    pinMode(led4,OUTPUT);
}

void loop()
{
    I=analogRead(A0);
    I=1*I;

    puls_m = digitalRead(buttom_m);
    puls_s = digitalRead(buttom_s);

    marcia= digitalRead(buttom_m);

    if ((puls_m==1)&&(puls_s==0))
    {
        ciclo=1 ;
    }
    if (puls_s)
    {
        ciclo=0 ;
    }

    if (ciclo)
    {
        if (counter==0)
        {
            digitalWrite (led1,HIGH);
            digitalWrite (led2,LOW);
            digitalWrite (led3,LOW);
            digitalWrite (led4,LOW);

            if (marcia)
            {
                counter= counter+1;
            }
            else
            {
                counter= 3;
            }

            delay(I);
        }
        else
        {
            if (counter==1)
            {
                digitalWrite (led1,LOW);
                digitalWrite (led2,HIGH);
                digitalWrite (led3,LOW);
                digitalWrite (led4,LOW);

                if (marcia)
                {
                    counter=counter+1;
                }
                else
                {
                    counter= counter-1;
                }

                delay(I);
            }

            else
            {
                if (counter==2)
                {
                    digitalWrite (led1,LOW);
                    digitalWrite (led2,LOW);
                    digitalWrite (led3,HIGH);
                    digitalWrite (led4,LOW);

                    if (marcia)
                    {
                        counter= counter+1;
                    }
                    else
                    {
                        counter =counter-1;
                    }

                    delay(I);
                }
                else
                {
                    if (counter==3)
                    {
                        digitalWrite (led1,LOW);
                        digitalWrite (led2,LOW);
                        digitalWrite (led3,LOW);
                        digitalWrite (led4,HIGH);

                        if (marcia)
                        {
                            counter= 0;
                        }
                        else
                        {
                            counter= counter-1;
                        }

                        delay(I);
                    }
                }     
            }
        }
    }

    else
    {
        digitalWrite (led1,LOW);
        digitalWrite (led2,LOW);
        digitalWrite (led3,LOW);
        digitalWrite (led4,LOW);
    }
    delay(50);
}

Inserisco la foto del circuito.

 

 

 

circuito.PNG

Link al commento
Condividi su altri siti

Per prima cosa un nota operativa, per inserire il codice c'è il tasto apposito quello con l'icona "<>", così riporti il codice in modo più ordinato, come nell'editor di arduino, e si comnprende meglio.

 

Io ti consilglio di usare il monotor di seriale per tracciare l'evoluzione del programma.

Metti dei messaggi in punti in cui il programam deve passare per effettuare le operazioni, così verifichi se passa o non passa correttamente.

 

Per acendere i LEDs io ti consiglio di usare uno "switch" in funzione dello stato del contatore e per invertire il movimento invertire il conteggio da incrementa a decrementa e viceversa.

 

poi non vedo filtraggio (debouncing) dei pulsanti e switch, questo potrebbe provocare dei falsi.

 

Ti consiglierei anche di suddividere il programma con alcune sottofunzioni sopecifiche, in questo modo viengono più facilie sia il debugging, sia le medifiche.

Link al commento
Condividi su altri siti

Crea un account o accedi per commentare

Devi essere un utente per poter lasciare un commento

Crea un account

Registrati per un nuovo account nella nostra comunità. è facile!

Registra un nuovo account

Accedi

Hai già un account? Accedi qui.

Accedi ora
×
×
  • Crea nuovo/a...