Pages: [1]   Go Down
Author Topic: Progetto con relè, pulsante ed EPROM  (Read 1195 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti,
questo è il mio primo post, quindi mi dispiace se potrei sbagliare qualcosa  smiley
Vado subito al dunque:
sono alle prese con un progetto basato su Arduino che dovrebbe svolgere le seguenti funzioni:
C'è una memoria, in cui è memorizzato un numero (Ad esempio 10), se viene premuto un pulsante viene eccitato un relè ed in contemporanea il numero memorizzato  nella memoria viene decresciuto (Diventa 9)
Inoltre se il numero memorizzato nella memoria è > di 0 viene eccitato un altro relè, altrimenti no.

In Teoria, dovrebbe essere un progetto molto semplice, ma purtroppo io sono mooolto all' inizio  smiley-sad-blue
Perciò avrei bisogno di una mano per poter realizzare questo progetto...

Quì di seguito un codice che accende un led se un bottone viene premuto:
Code:
// Esempio 01: accendi il led appena è premuto il pulsante 
 
#define LED 13                // LED collegato al pin digitale 13 
#define BUTTON 7              // pin di input dove è collegato il pulsante 
int  val = 0;                 // si userà val per conservare lo stato del pin di input 
 
void setup() { 
  pinMode(LED, OUTPUT);       // imposta il pin digitale come output 
  pinMode(BUTTON, INPUT);     // imposta il pin digitale come input 

 
void loop() { 
  val = digitalRead(BUTTON);  // legge il valore dell'input e lo conserva 
 
  // controlla che l'input sia HIGH (pulsante premuto) 
  if (val == HIGH) { 
    digitalWrite(LED, HIGH);  //accende il led 
  } 
  else { 
    digitalWrite(LED, LOW);   //spegne il led 
  } 


Come potrebbe essere adattato questo codice per quello che mi serve?

Ringrazio di cuore coloro che vorranno darmi una mano   smiley
A presto!
Logged

HO BISOGNO DI AIUTO smiley-razz

ivrea (to)
Offline Offline
Faraday Member
**
Karma: 87
Posts: 5062
miaaao ^-^
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma il bottone mantiene la posizione quando premuto o quando lo rilasci ritorna scollegato?
Dove sarà questa memoria? EEPROM di Arduino o esterna?
Aggiungi già una variabile int che rappresenta la memoria di cui parli e diminuiscila di 1 quando bottone premuto.
Ma quando il bottone viene premuto (cioè ERA non premuto e lo premi, non basta chiedersi se il bottone è premuto)

Alcuni suggerimenti:
1.non usare define ma const byte per i pin:
Code:
#define LED 13  =>  const byte LED=13;
Per il perchè cerca nel forum, ne abbiam parlato molte volte.
2. nella setup() conviene mettere come prima istruzione un delay(1000);  (se lo sketch o Arduino dovesse "bloccarsi" può essere d'aiuto a sbloccarlo)
3. nella setup() puoi attivate la comunicazione con la seriale con il comando    Serial.begin(9600);   Servirà per mandare frasi all'IDE per il debug usando Serial.println("frase");  (vedi Monitor Seriale IDE)

P.S. non sei italiano di madre lingua o sbaglio?
« Last Edit: July 16, 2013, 09:20:57 am by nid69ita » Logged

my name is IGOR, not AIGOR

Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Innanzi tutto grazie per aver risposto!
Si, sono di madre lingua. Ho commesso così tanti errori grammaticali?  smiley-lol
Grazie per i suggerimenti, presto effettuerò le modifiche, ma prima vorrei avere le idee un po più chiare.

Il bottone resterà premuto per alcuni secondi, e la migliore soluzione per la memoria credo che sia quella di utilizzare una memoria esterna dato che avrò bisogno di poter aggiornare il NUMERO.
Ho disegnato uno schemino di quello che avrei intenzione di realizzare in allegato.

Come si potrebbe realizzare?
Ringrazio ancora a chi mi può aiutare


* prog.jpg (62.2 KB, 640x480 - viewed 42 times.)
Logged

HO BISOGNO DI AIUTO smiley-razz

Milan, Italy
Online Online
Sr. Member
****
Karma: 0
Posts: 349
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ogni quanto vengono premuti i tasti/aggiornata la variabile in memoria, se le scritture sono saltuarie puoi anche usare la eeprom interna.
http://arduino.cc/en/Reference/EEPROM

Alberto
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Grazie per avermi proposto questa soluzione, ma dovrà essere utilizzato apesso smiley
Logged

HO BISOGNO DI AIUTO smiley-razz

Milan, Italy
Online Online
Sr. Member
****
Karma: 0
Posts: 349
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma usi la memoria eeprom perché devi salvare lo stato dell'apparecchio dopo un eventuale spegnimento?
Logged


Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Esatto, mi serve salvare il NUMERO, quello che permetta di eccitare il relè se è maggiore di 0 e quando si preme il bottone diventa -1
Logged

HO BISOGNO DI AIUTO smiley-razz

Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi quì,
non ho abbandonato la discussione ma sto solo studiando qualcosa per realizzare questo progetto smiley
Credo proprio che opterò per la soluzione proposta, cioè quella di utilizzare la eprom interna dell'atmega328.
Accetto ancora AIUTO smiley
Logged

HO BISOGNO DI AIUTO smiley-razz

Genova
Offline Offline
Faraday Member
**
Karma: 43
Posts: 3479
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quante volte viene scritto questo dato sulla eeprom in un ora o un giorno?
Logged

no comment

Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quante volte viene scritto questo dato sulla eeprom in un ora o un giorno?

All'incirca ogni 30 minuti
Logged

HO BISOGNO DI AIUTO smiley-razz

Genova
Offline Offline
Faraday Member
**
Karma: 43
Posts: 3479
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Lo sai vero che ogni volta che scrivi su una cella eeprom riduci la sua vita fino a non funzionare più? Le eeprom non sono fatte per essere riscritte ogni mezzora, di solito contengono costanti, parti di programmi che possono essere cambiate, ma raramente.
Sarebbe meglio che tu usassi una batteria tampone e la flash memory. Se proprio non vuoi, cambia indirizzo della cella eeprom almeno una volta al giorno
« Last Edit: July 21, 2013, 08:33:09 am by pablos » Logged

no comment

Switzerland
Offline Offline
Faraday Member
**
Karma: 116
Posts: 6021
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Pablos, sicuramente giusto, ma ... se ti fai i conti Ivan scrive ogni 30 minuti ovvero 2 volte l'ora ... la EEPROM è data per 100'000 scritture (... che è sicuramente un numero più basso del reale per ovvi motivi) quindi, scrivendo sempre ogni 30 minuti, esaurirebbe la vita della EEPROM dopo ... oltre 5 anni ...  smiley-lol

A questo punto ... deve valutare Ivan se il suo apparecchio sarà veramente in funzione H24 x 365GG x 5 ... smiley-wink

Guglielmo
« Last Edit: July 21, 2013, 08:42:22 am by gpb01 » Logged

Search is Your friend ... or I am Your enemy !

Offline Offline
Jr. Member
**
Karma: 0
Posts: 86
PINGUWEB
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi quì...
A dir la veritá dovrò riscrivere la eeprom non più di 80 volte al giorno.
Perciò dato che 80:1=x:100000 non dovrei avere problemi almeno per 20000 anni xd
Logged

HO BISOGNO DI AIUTO smiley-razz

Switzerland
Offline Offline
Faraday Member
**
Karma: 116
Posts: 6021
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Eccomi quì...
A dir la veritá dovrò riscrivere la eeprom non più di 80 volte al giorno.
Perciò dato che 80:1=x:100000 non dovrei avere problemi almeno per 20000 anni xd

Quindi NON scrivi ogni 30 minuti, ma ogni 18 minuti (80 volte in 24 ore) ???  smiley-eek bé ... allora, se fossi in te, rifarei i calcoli ...  smiley-twist

100'000 scritture  /  80 scritture_al_giorno = 1250 gg_di_vita = poco più di 3 anni ...

Guglielmo
« Last Edit: July 21, 2013, 09:18:51 am by gpb01 » Logged

Search is Your friend ... or I am Your enemy !

Pages: [1]   Go Up
Jump to: