Informazioni

Salve a tutti,sono un neofita di Arduino scoperto in una tarda età(69) ma essendo un vecchio appassionato di elettronica(più che altro analogica) ho cercato di cimentarmi in questa avventura.Quello che cortesemente vi chiedo è questo:ho realizzato(scopiazzando un po' in qua e là un circuito dove premendo un pulsante si accendono in sequenza 8 led(pigio ON il primo, ripigio OFF il primo ON il secondo e così via)mi serve poi per fare eccitare dei relay che mi inseriscono o disinseriscono delle resistenze su di un circuito (potevo farlo con un commutatore ma cosi ci sono meno circuiti ed è anche più fico).Quello che non ho capito(e magari sia possibile)se spengo Arduino con magari il led 2 in ON alla sua rialimentazione posso ritrovare lo stesso stato(cioè led2 ON)o non è possibile(ora torna sempre a 0).Scusate il prolisso ma non sapevo come spiegare diversamente.Ringraziando tutti quelli che vogliono darmi una mano, Cordialmente saluto Luciano

Per ritrovare lo stesso stato devi usare la EEprom interna, che appunto mantiene i valori scritti anche in assenza di alimentazione

In pratica, quando vai a mettere il rele in On o Off, scrivi anche su una locazione della EEprom, e nel Setup ( quella parte dello sketch che si avvia una sola volta ad ogni reset ) vai a leggere i valori scritti nella EEprom e agisci di conseguenza

Più facile a farsi che a dirsi

https://www.arduino.cc/en/Reference/EEPROM http://www.mauroalfieri.it/elettronica/tutorial-usare-la-eeprom-di-arduino.html

>bulinda: prima di tutto, essendo il tuo primo post, nel rispetto del regolamento (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD ([u]spiegando bene quali conoscenze hai di elettronica e di programmazione[/u] ... possibilmente [u]evitando[/u] di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ...

... poi, in conformità al suddetto REGOLAMENTO, punto 13, il cross-posting è proibito ([u]anche tra lingue diverse[/u]) e tu hai posto la stessa domanda nella sezione Inglese. Tale domanda duplicata è stata cancellata e ti prego di continuare qui.

Grazie,

Guglielmo

Salve, ho provato ad inserire i saluti nelle sezione(2volte),ma il mio post non lo vedo,il cross- posting l ho fatto perché non avevo notato la sezione in Italiano,sai per quelli di una certa età bisogna avere un poco di pazienza,se mi dai una dritta sicuramente rifarò per la terza volta la presentazione non c è problema.Grazie di avermi accettato nella comunità. Saluti Luciano

Certo che c'erano entrambi ... ovviamente nell'ultima pagina del thread.

Ne ho rimosso uno dei due (visto che era doppio) e, se vuoi vedere il tuo post, basta che vai QUI ;)

Guglielmo

gpb01: Certo che c'erano entrambi ... ovviamente nell'ultima pagina del thread.

Ne ho rimosso uno dei due (visto che era doppio) e, se vuoi vedere il tuo post, basta che vai QUI ;)

Guglielmo

Senza polemica,ho riscritto la presentazione come ti ho detto perchè non la vedevo,nei forum di HI-FI dove sono iscritto l ultimo post va in prima pagina ed è per questo che pensavo di aver sbagliato in qualcosa. Luciano

brunello22:
Per ritrovare lo stesso stato devi usare la EEprom interna, che appunto mantiene i valori scritti anche in assenza di alimentazione

In pratica, quando vai a mettere il rele in On o Off, scrivi anche su una locazione della EEprom, e nel Setup ( quella parte dello sketch che si avvia una sola volta ad ogni reset ) vai a leggere i valori scritti nella EEprom e agisci di conseguenza

Più facile a farsi che a dirsi

Arduino - EEPROM
http://www.mauroalfieri.it/elettronica/tutorial-usare-la-eeprom-di-arduino.html

Grazie della tua sollecita risposta,facendo fumare la capa(non solo metaforicamente) e leggendo e provando da stamattina ho risolto,ma per finire il progetto e togliere parecchi componenti analogici ho bisogno di implementare il programma.Quello realizzato serve ad inserire e disinserire resistenze su ingresso MC di un prePHONO senza il commutatore meccanico e con un solo pulsante,con un altro pulsante dovrei commutare due rele uno MM uno MC e con un altro pulsante altri due rele, In1 In2.Ho letto che le uscite digitali non basterebbero,ma si possono adoperare quelle analogiche,grazie anticipatamente se mi puoi dare un aiuto.
Luciano

bulinda: Senza polemica,ho riscritto la presentazione come ti ho detto perchè non la vedevo,nei forum di HI-FI dove sono iscritto l ultimo post va in prima pagina ed è per questo che pensavo di aver sbagliato in qualcosa. Luciano

Assolutamente nessuna polemica, ci mancherebbe ... :)

Si, ci sono forum in cui i post più recenti vanno in testa, qui invece vanno sempre in coda, in qualunque thread ... come in questo del resto ;)

Guglielmo

bulinda:
le uscite digitali non basterebbero,ma si possono adoperare quelle analogiche

Tutti i pin si possono usare in digitale con pinMode, digitalWrite, digitalRead.

Quelli di nome A0…A5 (per ricordare che opzionalmente possono anche leggere tensioni analogiche) si possono anche chiamare indifferentemente 14…19.

In digitale si usano esattamente come gli altri.

Claudio_FF: Tutti i pin si possono usare in digitale con pinMode, digitalWrite, digitalRead.

Quelli di nome A0..A5 (per ricordare che opzionalmente possono anche leggere tensioni analogiche) si possono anche chiamare indifferentemente 14..19.

In digitale si usano esattamente come gli altri.

Grazie della risposta,ho capito,ma non riesco a inserire nello stesso Sketch altri due pulsati che comandino ognuno due led(o relay) ,un pulsate accende il primo e spenge il secondo e viceversa,l altro pulsate fa lo stesso con altri due led,scritto anche nella EEPROM.Ho provato e riprovato ma non gliela faccio.Grazie di un eventuale aiuto. Luciano

Sono tre compiti indipendenti.

Ciascuno deve usare le sue variabili e celle EEPROM personali.

Andranno fatte le define anche per gli altri ingressi e uscite.

A questo punto tutto si riduce alla lettura dei tre pulsanti e all'esecuzione del compito relativo a quello trovato premuto in quel momento.

Claudio_FF:
Sono tre compiti indipendenti.

Ciascuno deve usare le sue variabili e celle EEPROM personali.

Andranno fatte le define anche per gli altri ingressi e uscite.

A questo punto tutto si riduce alla lettura dei tre pulsanti e all’esecuzione del compito relativo a quello trovato premuto in quel momento.

Grazie ancora,forse mi sono spiegato male,ma non ci arrivo con tutta la buona volontà,devo (volevo)fare questa cosa un poco figa per il mio prePHONO,in analogico e con tutti i comandi meccanici no problem,ma per la parte digitale proprio non ci arrivo,se cortesemente puoi fare qualcosa te ne sarei grato,senza tanti giri di parole,puoi cortesemente scrivermi lo Schetch,altrimenti lascio tutto in analogico,grazie ancora.
Luciano

#include <EEPROM.h>
 
#define cella 0
#define butt 13

 
#define led1 3
#define led2 4
#define led3 5
#define led4 6
#define led5 7
#define led6 8



 
int led=2;
 
void setup() {
   led = EEPROM.read( cella );
 
   pinMode( butt,INPUT );
 
   pinMode( led1,OUTPUT );
   pinMode( led2,OUTPUT );
   pinMode( led3,OUTPUT );
   pinMode( led4,OUTPUT );
   pinMode( led5,OUTPUT );
   pinMode( led6,OUTPUT );


  
   

 
   if (led > led6 || led < led1) led = 2;

 
   digitalWrite( led1,LOW );
   digitalWrite( led2,LOW );
   digitalWrite( led3,LOW );
   digitalWrite( led4,LOW );
   digitalWrite( led5,LOW );
   digitalWrite( led6,LOW );
  
 
  
  
   
}
 
void loop() {
  if ( digitalRead(butt) == HIGH ) {
    digitalWrite( led,LOW );
    led++;
    if ( led > led6 ) led = led1;
    if (led > led8 ) led= 7;
    EEPROM.write( cella,led );
    delay(200);
  }
 
  digitalWrite( led,HIGH );
 
  delay( 100);
}

>bulinda: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post #9 (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie,

Guglielmo

gpb01:
>bulinda: ti ricordo che in conformità al regolamento, punto 7, devi editare il tuo post #9 (quindi NON scrivendo un nuovo post, ma utilizzando il bottone More → Modify che si trova in basso a destra del tuo post) e racchiudere il codice all’interno dei tag CODE (… sono quelli che in edit inserisce il bottone con icona fatta così: </>, tutto a sinistra).

Grazie,

Guglielmo

Ho scritto un nuovo post per portare a conoscenza le novità,se edito il post #9 questo viene portato in alto o no?.
Non ho problema ad editare,anzi se vuoi lo cancello pure e attendo novità che qualcuno mi dia una mano .
Luciano

bulinda: Ho scritto un nuovo post per portare a conoscenza le novità,se edito il post #9 questo viene portato in alto o no?.

No, No, la funzione di "Edit" permette solo di CORREGGERE un post, NON di cambiarne l'ordine (che poi è dato dalla data di creazione).

Guglielmo

gpb01: No, No, la funzione di "Edit" permette solo di CORREGGERE un post, NON di cambiarne l'ordine (che poi è dato dalla data di creazione).

Guglielmo

Quello volevo fare,come si fa in altri forum per cercare di trovare qulcuno interessato a leggerlo,se no poi và nel dimenticatoio. Luciano. P.S Un piccolo appunto e senza nessuna polemica,chiedo un aiuto, spiego il problema,mi dicono fai così(leggi le risposte)ma non mi indirizza nessuno, o mi fa anche un piccolo esempio.Per chi conosce bene la materia ha perfettamente ragione,ma a me da ignorante anche se leggo tutto quello che c è da legger se non ho anche un piccolo imput(e alla mia età)sarà difficile che capisca(fare accendere un led và bene).Nella mia passione se un neofita chiede come si installa con tutti i crismi una testina,si chiede certamente che si documenti, ma generalmente dopo viene guidato passo passo da quelli che veramente sanno(e che non sono mai saccenti). Scusa il prolisso.

bulinda: ... senza tanti giri di parole,puoi cortesemente scrivermi lo Schetch ...

... vedi, credo che il problema sia in questa tua richiesta e ... ti rispondo indicandoti il REGOLAMENTO, al punto 16.1. Se lo leggi con attenzione capisci il perché ... ::)

Guglielmo

gpb01: ... vedi, credo che il problema sia in questa tua richiesta e ... ti rispondo indicandoti il REGOLAMENTO, al punto 16.1. Se lo leggi con attenzione capisci il perché ... ::)

Guglielmo

Siccome sono abbastanza grande ed i cavilli dei regolamenti li conosco(sono da tutte le parti)ho chiesto cortesemente(quello che spero tu abbia letto)delle cose,non mi sono nascosto dietro a domande fasulle per arrivare allo scopo,non è nella mia indole,in questo momento per finire un progetto mio, avevo bisogno di un aiuto,bastava dire come si fa da altre parti di inviare la richiesta in privato,poi io nel mio piccolo sapere e nel mio campo, regolamento o no ,non mi sono mai tirato indietro per un aiuto .Meno male leggendo su tutto il Web dicono tutti di rivolgersi(per Arduino) alla comunità, che tutti ti danno una mano.La mia passione è da tanti ritenuta settaria,strana,fatta da persone per lo più "anziane",ma ci diamo(a parte i saccenti)volentieri mano. Se cortesemente mi volete dare mano bene,se no come ho detto sopra vado di elettromeccanico,impiego un poco più di circuitazione,forse controllando bene meno componenti.Ripeto, grazie di avermi accettato. Ultima mia risposta, perché non voglio innescare flame,voglio rimanere se possibile nella comunità per imparare quel poco che posso. Saluti Luciano

… o mi fa anche un piccolo esempio.

E come si fa’ a dare qualche piccolo esempio…
Ne vuoi uno, eccolo

#include <EEPROM.h>
int led[] = { 3, 4, 5, 6, 7, 8 }; // definiamo i pin dei Led
byte cella = 0 ;
#define butt 13
byte led_on = HIGH ; // Valore con cui si accendono i Led (LOW o HIGH )
byte stato ;
int buttonState;             // the current reading from the input pin
int lastButtonState = LOW;   // the previous reading from the input pin
unsigned long lastDebounceTime = 0;  // the last time the output pin was toggled
unsigned long debounceDelay = 50;    // the debounce time; increase if the output flickers

void setup() {
  stato = EEPROM.read( cella );
  pinMode( butt, INPUT );
  // impostiamo i pin dei Led come uscite
  for ( byte a = 0 ; a < 6 ; a++ ) {
    pinMode( led[a], OUTPUT );
  }
  // Ora spegniamo tutti i Led e accendiamo quello memorizzato
  for ( byte a = 0 ; a < 6 ; a++ ) {
    if (a == stato ) {
      digitalWrite( led[a], led_on );
    }
    else {
      digitalWrite( led[a], !led_on ); // Spegniamo i led
    }
  }
} // fine del Setup

void loop() {
  int reading = digitalRead(butt);
  // Facciamo il Debounce 
  if (reading != lastButtonState) {
    lastDebounceTime = millis();
  }
  if ((millis() - lastDebounceTime) > debounceDelay) {
    // if the button state has changed:
    if (reading != buttonState) {
      buttonState = reading;
      // cambiamo lo stato quando il pulsante è HIGH
      if (buttonState == HIGH) {
        digitalWrite(led[stato], !led_on);
        stato++;
        if (stato >= 6) stato = 0 ;
        digitalWrite(led[stato], led_on);
        EEPROM.write(cella, stato);
      }
    }
  }
  lastButtonState = reading;
}

;) :D ;D

Comunque sia un 70enne che che come hobby si trova Arduino,merita un applauso