Consiglio per cablaggio

Salve ragazzi,

ho due domande per questo cablaggio su arduino e volevo un info da parte vostra.

Partiamo dalla prima per poi procedere con la successiva

come vedete ho due interruttori, però dallo schema è collegato sia il + che il -, a me servirebbe che i due interruttori siano collegati solo a massa per poter accendere i led, sarebbe fattibile?

Risposta breve sì
Risposta lunga colleghi pulsante tra ingresso e massa, elimini la resistenza, fai le pinmode come input pullup, ti ricordi di negare le condizioni.

Standardoil:
Risposta breve sì
Risposta lunga colleghi pulsante tra ingresso e massa, elimini la resistenza, fai le pinmode come input pullup, ti ricordi di negare le condizioni.

Graie mille :slight_smile: piccolo problemino non ho esperienza con arduino sto iniziando ora a capire come scrivere lo sketch, come si farebbe il "pinmode come input pullup", se può servire ho lo sketch

VinDiesel:
... come si farebbe il "pinmode come input pullup" ...

studiando il reference pinMode() :smiling_imp: ... ed anche QUI !

Guglielmo

gpb01:
studiando il reference pinMode() :smiling_imp: ... ed anche QUI !

Guglielmo

Grazie mille, darò uno sguardo cercando di capire :slight_smile:

VinDiesel:
Grazie mille, darò uno sguardo cercando di capire :slight_smile:

Vedrai che è banale ... cambia solo una "parolina" in ciò che già fai. Il secondo link è esplicativo e chiarisce un po' il concetto :wink:

Guglielmo

Allora...
Ho modificato lo sketch, quello prima della modifica era cosi:

#define ACCENDI 2           //Pin interruttore che accende
#define LAMPEGGIA 3         //Pin interruttore lampeggio
#define LED 4               //Pin insieme dei led
#define A_LAMPEGGIO 150      //il tempo di lampeggio. accesi
#define S_LAMPEGGIO 1000     //il tempo di lampeggio. Spenti
void setup()
{
pinMode (ACCENDI, INPUT);
pinMode (LAMPEGGIA, INPUT);
pinMode (LED, OUTPUT);
}
//fine setup()
void loop ()
{
if (digitalRead (LAMPEGGIA))
{
digitalWrite (LED, HIGH);
delay (A_LAMPEGGIO);
digitalWrite (LED,LOW);
delay (S_LAMPEGGIO);
}
if (!digitalRead (LAMPEGGIA) && digitalRead (ACCENDI))
{
digitalWrite (LED, HIGH);
}
if (!digitalRead (LAMPEGGIA) && !digitalRead (ACCENDI))
{
digitalWrite (LED, LOW);
}
}
//Fine loop()
//Fine codice

Questo quello modificato facendo attivare gli interruttori a massa

#define ACCENDI 2           //Pin interruttore che accende
#define LAMPEGGIA 3         //Pin interruttore lampeggio
#define LED 4               //Pin insieme dei led
#define A_LAMPEGGIO 150      //il tempo di lampeggio. accesi
#define S_LAMPEGGIO 100     //il tempo di lampeggio. Spenti
void setup()
{
pinMode (ACCENDI, INPUT_PULLUP);
pinMode (LAMPEGGIA, INPUT_PULLUP);
pinMode (LED, OUTPUT);
}
//fine setup()
void loop ()
{
if (digitalRead (LAMPEGGIA))
{
digitalWrite (LED, HIGH);
delay (A_LAMPEGGIO);
digitalWrite (LED,LOW);
delay (S_LAMPEGGIO);
}
if (!digitalRead (LAMPEGGIA) && digitalRead (ACCENDI))
{
digitalWrite (LED, HIGH);
}
if (!digitalRead (LAMPEGGIA) && !digitalRead (ACCENDI))
{
digitalWrite (LED, LOW);
}
}
//Fine loop()
//Fine codice

Con il cablaggio cosi:

Sembra funzionare però ho un problema, in pratica i LED lampeggiano quando l'interruttore 2 ( quello a destra ) non è premuto, mentre se lo premo si fermano, a me servirebbe il contrario, dove ho sbagliato?

Non hai negato le condizioni
Con input pullup i pulsanti vengono letti, mi si passi il termine, a rovescio
Devo rovesciare anche le if.
In C la negazione è il punto esclamativo

uhm.. qui invece sto andando nel pallone con le if

Anche qui è semplice ...
... con le pull-up attive il pin è tenuto normalmente HIGH e quindi, quando nessuno preme il bottone, tu leggi questo livello.

Se il bottone viene premuto, il pin viene collegato con il GND e quindi legge LOW.

Ora tu devi solo aggiustare le tue IF per rispecchiare questa cosa ... ::slight_smile:

Guglielmo

Sto impazzendo, ho provato a cambiare un pò di cose... ma sono bloccato :frowning: riesco a spegnarli però poi non lampeggiano

fai un passo alla volta...

if (digitalRead (LAMPEGGIA))
{
  digitalWrite (LED, HIGH); 
  delay (A_LAMPEGGIO);
  digitalWrite (LED,LOW);
  delay (S_LAMPEGGIO);
}

qui ad esempio il led dovrebbe lampeggiare quando il pulsante non è premuto, giusto? E' quello che vuoi? Penso di no, tu vorresti che lampeggiasse quando il pulsante è premuto, quindi devi invertire il valore di lettura del pulsante da if (digitalRead (LAMPEGGIA)) a if (!digitalRead (LAMPEGGIA))

Grazie mille :slight_smile:

cosi facendo funziona, però per sicurezza e prima di procedere alla seconda domanda è tutto corretto ora?

#define ACCENDI 2           //Pin interruttore che accende
#define LAMPEGGIA 3         //Pin interruttore lampeggio
#define LED 4               //Pin insieme dei led
#define A_LAMPEGGIO 500      //il tempo di lampeggio. accesi
#define S_LAMPEGGIO 1000     //il tempo di lampeggio. Spenti
void setup()
{
pinMode (ACCENDI, INPUT_PULLUP);
pinMode (LAMPEGGIA, INPUT_PULLUP);
pinMode (LED, OUTPUT);
}
//fine setup()
void loop ()
{
if (!digitalRead (LAMPEGGIA))
{
digitalWrite (LED, HIGH);
delay (A_LAMPEGGIO);
digitalWrite (LED,LOW);
delay (S_LAMPEGGIO);
}
if (digitalRead (LAMPEGGIA) && digitalRead (ACCENDI))
{
digitalWrite (LED, HIGH);
}
if (digitalRead (LAMPEGGIA) && !digitalRead (ACCENDI))
{
digitalWrite (LED, LOW);
}
}
//Fine loop()
//Fine codice

Cablaggio:

No. Devi togliere il ! dall'ultimo if() e cambiare il penultimo if da if (...&&...) a if (...&& !...) chiaro?

Se intendi cosi:

void loop ()
{
if (!digitalRead (LAMPEGGIA))
{
digitalWrite (LED, HIGH);
delay (A_LAMPEGGIO);
digitalWrite (LED,LOW);
delay (S_LAMPEGGIO);
}
if (digitalRead (LAMPEGGIA) && !digitalRead (ACCENDI))
{
digitalWrite (LED, HIGH);
}
if (digitalRead (LAMPEGGIA) && digitalRead (ACCENDI))
{
digitalWrite (LED, LOW);
}
}

sperando di aver capito...i led rimangono accesi, mentre come postato sopra sembra andare

Silente:
No. Devi togliere il ! dall'ultimo if() e cambiare il penultimo if da if (...&&...) a if (...&& !...) chiaro?

Avevi ragione :slight_smile: scusami...ma prima di farlo con arduino ho usato il simulatore online e mi dava i LED spenti :slight_smile:

La seconda domanda invece era:

Io devo eliminare arduino in pratica fare un Arduino Stand-alone ed il tutto dev'essere alimentato da una batteria da 12v, per il mio progetto basta un microcontrollore ATtiny85? per poi alimentare il tutto con i 12v mi servirà un un riduttore 78L05?

Ho pensato di utilizzare questo PIC12HV615T-I/SN funziona a 12 volt basta una resistenza da 220 ohm per abbassare la tensione e si programma in icsp

VinDiesel:
Ho pensato di utilizzare questo PIC12HV615T-I/SN ...

Ehhhh ? ? ? :o
... ma tu quanto ne sai di programmazione di PIC ? e di MPLAB X come ambiente di sviluppo ? e di XC8 come compilatore ?

Non trovo queste specifiche conoscenze nella tua presentazione ... ::slight_smile:

Guglielmo

Poco perchè? sto iniziando ora ad informarmi cercare ecc ecc so due notti che sono sveglio :slight_smile: non ho fretta di finire il progetto, sto cercando di capire come passare il code caricato in arduino nel pic