Pages: [1] 2   Go Down
Author Topic: Utilizzare un micropulsante come lettera alfabeto  (Read 1468 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 10
« La vita è troppo breve per avere dei nemici. » (Ayrton Senna)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao a tutti ragazzi,
sono un "newbie" alle prese con Arduino Uno e con il linguaggio C  smiley-confuse . Vorrei sapere se, fatto un piccolo circuito dotato da 5 micropulsanti di questo tipo come raffigurato nell'immagine ( http://www.puglisi-elettronica.it/images/27.03105.jpg ) far riconoscere ad Arduino che il primo pulsante, una volta premuto, venga digitata la lettera "A", il secondo pulsante la lettera "B" sino ad arrivare all'ultimo con la lettera "E". Dovrei in pratica creare un piccolo programma che data, per esempio, la password "ABDEC" si accenda il led posto sul pin 13, invece, se per esempio, il codice immesso è "DCEAB" tale led si spenga. Ho visto che esiste anche la Keypad, ma sinceramente vorrei farne a meno, anche perchè creare un circuito disponendo i micropulsanti a proprio piacimento sulla millefori è anche comodo (a mio parere, ovviamente smiley-lol  smiley-lol  smiley-lol  smiley-lol  smiley-lol ). Con la speranza di essere stato quanto più chiaro possibile, vi ringrazio in anticipo ed attendo speranzoso vostre notizie. smiley-grin
Logged

MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bhe certo che si può fare, non c'è cosa più semplice.
Ovviamente ci vuole del tempo e magari maggiori dettagli...
Ma volevi il progetto bello che pronto o volevi solo informazioni?
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 25
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo a mio avviso è il modo più semplice ed efficace smiley per di più ti porta via un solo pin come contro puoi usare un pulsante alla volta...
http://www.arduino.cc/playground/Code/AnalogButtons
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

... come contro puoi usare un pulsante alla volta...

Non sono d'accordo ...  smiley-grin

Dimensionando opportunamente la sezione resistiva si arriva per logica deduzione anche alla pressione contemporanea di più pulsanti.
L'unica limitazione è la risoluzione del adc.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Offline Offline
Newbie
*
Karma: 0
Posts: 10
« La vita è troppo breve per avere dei nemici. » (Ayrton Senna)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@niki77: beh, ovviamente un progetto bello e pronto sarebbe l'ideale per un "newbie" come me  smiley-lol , scherzi a parte, certo, se si avesse un progetto che funga come un input iniziale sarebbe molto più che esaustivo smiley
Logged

Monselice PD Italy
Offline Offline
Faraday Member
**
Karma: 25
Posts: 5480
фон Крыса
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

dipende come la si costruisce... per di più bisognerebbe usare resistenze di precisione smiley
ed a quel punto conviene usare una vecchia tastiera smiley-razz PS2 o USB che sia...
Logged

Se corri veloce come un fulmine, ti schianterai come un tuono.

Riva del Garda, TN / Forlì
Offline Offline
Edison Member
*
Karma: 7
Posts: 2247
Il piu' modesto al mondo
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

matrice no?

ovvio con 5 pulsanti non vale la pena..

i pulsanti con resistenza potrebbero essere la soluzione migliore.

se poi ragioni dicendo resistenza 1 = (per assurdo) 1 ohm, resistenza 2 2 ohm, resistenza 3 4 ohm arrivi si a dedurre quali sono premuti contemporaneamente smiley-razz

il binario lo conoscete? smiley-grin
« Last Edit: October 13, 2011, 10:11:47 am by superlol » Logged

Il nuovo forum italiano sull'elettronica: http://www.electroit.tk/ <--- Nuovamente online!

Offline Offline
Newbie
*
Karma: 0
Posts: 10
« La vita è troppo breve per avere dei nemici. » (Ayrton Senna)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho trovato quest'immagine di come è collegato un pulsante su Arduino, certo, è un progetto diverso, ma, parlando sempre da "newbie", potrebbe essere una buona idea fare un collegamento simile all'immagine con i pulsanti che ho in dotazione? ( http://www.maffucci.it/wp-content/uploads/2010/11/arduino10.jpg ) - nel progetto usa una resistenza da 10 K Ohm come viene descritto qui ( http://www.maffucci.it/2010/12/06/arduino-%E2%80%93-lezione-03-controlliamo-un-led-con-un-pulsante/ )
« Last Edit: October 13, 2011, 10:20:50 am by Cobra » Logged

MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bel tutorial,

Un bel led messo li a 'porcu' senza neanche uno straccio di resistenza !
Povero arduino.
Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Offline Offline
Newbie
*
Karma: 0
Posts: 10
« La vita è troppo breve per avere dei nemici. » (Ayrton Senna)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ragazzi, ho messo questo codice non sapendo bene nè di cosa parla nè di cosa abbia combinato caricandolo nel "povero" Arduino, ho collegato i pulsanti (ne ho messi 10 e non 5) sulla breadboard come in figura ( http://www.maffucci.it/wp-content/uploads/2010/11/arduino10.jpg ) ma succede che bypassa i pulsanti, non accende il led 13 e accende di continuo il led "TX" della scheda (penso sia il led della trasmissione, correggetemi se sbaglio) help me!  smiley-mad  smiley-mad  smiley-mad

const int a2 = 2;
const int a3 = 3;
const int a4 = 4;
const int a5 = 5;
const int a6 = 6;
const int a7 = 7;
const int a8 = 8;
const int a9 = 9;
const int a10 = 10;
const int ledPin =  13;
int i, k, pwcount=0;
char password[] = "1234", entry[10];
void setup()
{
  Serial.begin(115200);
  
 for(i=13; i<=1; i++)
 pinMode(i, INPUT);
  for(i=2; i<=10; i++)
 pinMode(i, OUTPUT);
}

void loop()
{
  
  for(i=2; i<=11; i++){
  reset();
  digitalWrite(i, HIGH);
  if(digitalRead(a2)==HIGH && i==2){
    blinker();
    entry[pwcount] = '1';
    pwcount++;
   delay(200);
  Serial.print('1');
  }
  if(digitalRead(a3)==HIGH && i==3){
    blinker();
    entry[pwcount] = '2';
    pwcount++;
   delay(200);
  Serial.print('2');
  }
   if(digitalRead(a3)==HIGH && i==4){
    blinker();
    entry[pwcount] = '3';
    pwcount++;
   delay(200);
  Serial.print('3');
  }
  if(digitalRead(a4)==HIGH && i==5){
    blinker();
    entry[pwcount] = '4';
    pwcount++;
   delay(200);
  Serial.print('4');
  }  
   if(digitalRead(a5)==HIGH && i==6){
     blinker();
    entry[pwcount] = '5';
    pwcount++;
   delay(200);
  Serial.print('5');
  }
  
   if(digitalRead(a6)==HIGH && i==7){
     blinker();
    entry[pwcount] = '6';
    pwcount++;
   delay(200);
  Serial.print('6');
  }
  if(digitalRead(a7)==HIGH && i==8){
    blinker();
    entry[pwcount] = '7';
    pwcount++;
   delay(200);
  Serial.print('7');
  }
  if(digitalRead(a8)==HIGH && i==9){
    blinker();
    entry[pwcount] = '8';
    pwcount++;
   delay(200);
  Serial.print('8');
  }  
   if(digitalRead(a9)==HIGH && i==10){
     blinker();
   entry[pwcount] = '9';
    pwcount++;
   delay(200);
  Serial.print('9');
  }
  
    if(digitalRead(a10)==HIGH && i==11){
      blinker();
    entry[pwcount] = '0';
    pwcount++;
   delay(200);
  Serial.print('0');
  pwcount=0;
  for(k=0; k<=4; k++){
   if(k==4){
   Serial.println("Access Granted");
   digitalWrite(13, HIGH);
   break;
   }
   if(password[k] != entry[k]){
     Serial.println("Denied");
     break;
   }
  }
  for(k=0; k<10; k++)
  entry[k]=0;
  }  

}}

void reset(){
   int j;
   for(j=3; j<=4; j++)
   digitalWrite(j, LOW);
}

void blinker(){
  digitalWrite(9, HIGH);
  delay(20);
  digitalWrite(9, LOW);
  
}




P.S.: avviato il monitor seriale, esce questa riga di continuo, come se fosse un "loop":

12356780 Denied
12356780 Denied
12356780 Denied
12356780 Denied
12356780 Denied
12356780 Denied
12356780 Denied
12356780 Denied
...

Che faccio? Non sto capendo niente, help me please (o, come diceva il vecchio e caro Johnny 5: "Necessito INPUT") smiley-sad smiley-sad smiley-sad smiley-sad smiley-sad
« Last Edit: October 13, 2011, 12:37:39 pm by Cobra » Logged

MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


 for(i=13; i<=1; i++)
 pinMode(i, INPUT);

.....


 smiley-eek-blue smiley-eek-blue smiley-eek-blue

Ma l'hai scritto tu???
Se ci spieghi un attimo cosa vuoi fare una vista ce le diamo.
Ma così com'è non dovrebbe nemmeno uscire da setup!
Sicuro che hai caricato quello sulla scheda?

Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 312
Posts: 21606
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusami ma così non va bene.
Mi pare che tu non abbia molte basi di programmazione, non puoi pensare di scrivere un codice così di punto in bianco.
Prima comprati un libro sul C, imparati le basi, poi leggi la documentazione presente nel Reference del sito sui comandi e le funzioni specifiche di Arduino, poi inizia con le basi di elettronica, se ti mancano anche quelle (non lo so, non lo hai detto che grado di conoscenza hai).

Non prenderla male questa mia critica, voglio solo aiutarti a capire le cose ed a farti farei passi giusti
Logged


Global Moderator
Italy
Offline Offline
Brattain Member
*****
Karma: 312
Posts: 21606
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bel tutorial,

Un bel led messo li a 'porcu' senza neanche uno straccio di resistenza !
Povero arduino.


Se vedi è infilato nel pin 13, e tutti pensano che lì la R ci sia già perché c'è un led integrato sul PCB smiley-wink
Logged


MC
Offline Offline
God Member
*****
Karma: 13
Posts: 917
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Se vedi è infilato nel pin 13, e tutti pensano che lì la R ci sia già perché c'è un led integrato sul PCB smiley-wink

Bhe pensano male, già dalla luminosità che emana si vede che poccia un bel pò.

Logged

Vi è una spiegazione scientifica a tutto.
La fede è solo quell'anello che si porta al dito dopo il matrimonio.

Offline Offline
Newbie
*
Karma: 0
Posts: 10
« La vita è troppo breve per avere dei nemici. » (Ayrton Senna)
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Allora ragazzi,
mi dovete innanzitutto scusare, ripeto che sono nuovo sia nell'ambiente arduino e sia nel linguaggio C (per me ancor più complesso dell'Arduino stesso).
Mi scuso soprattutto perchè me ne sono accorto che non sono stato affatto chiaro, aumentando ancor di più la confusione con quella "specie" di programma che ho postato  smiley-confuse , frutto malsano dell'unione di un progetto per keypad + il progetto per accendere un led come era scritto in quel tutorial smiley-sad smiley-sad smiley-sad . Vorrei in pratica collegare i micropulsanti alle uscite digitali di arduino e l'uscita digitale n.13 il led. Devo far riconoscere ad Arduino che, una volta schiacciato il pulsante posto, per esempio, sul pin digitale n.2, venga inviata la lettera "A" e via discorrendo per gli altri pulsanti, cioè il micropulsante posto sul pin digitale n.3, una volta schiacciato, faccia riconoscere ad Arduino che è stata schiacciata la lettera "B", il micropulsante posto sul pin digitale n.4 la "C" e via discorrendo sino al micropulsante posto sul pin 10 che rappresenterebbe la lettera "J". Poi, una volta fatto ciò, vorrei creare due password (una per esempio "ABC" e l'altra "DEF") così che, una volta schiacciati i pulsanti che rappresentano ciascuno le lettere "A"; "B" e "C", arduino riconosca la password ed accenda il led, se, invece, si schiacciassero i pulsanti che rappresentano ciascuno le lettere "D"; "E" e "F", arduino riconosca la nuova password immessa e spegne il led. Perdonatemi la confusione ma più chiaro di così non riesco ad essere, vi ringrazio per la pazienza dimostratami sino ad ora, ma ho scelto questo forum perchè so che qui c'è veramente il top della professionalità (e non lo dico tanto per dire ma perchè ci credo veramente smiley ) e, soprattutto, gente veramente capace ad aiutare chi di programmazione e di elettronica ahimè è alle prime armi come il sottoscritto che ha tanta ma tantissima voglia di imparare attraverso esempi, illustrazioni che solo voi ragazzi potete dare. Grazie infinite. smiley

Comunque, per farvi capire come sia nato quella specie di "mostro" che ho spacciato per codice, vi do i codici da cui, a mio modo, ho preso spunto:

1) Arduino keypad:

int i, k, pwcount=0;
char password[] = "1342", entry[10];
void setup()
{
  Serial.begin(9600);
  
 for(i=2; i<=5; i++)
 pinMode(i, INPUT);
  for(i=6; i<=9; i++)
 pinMode(i, OUTPUT);
}

void loop()
{
  
  for(i=6; i<=8; i++){
  reset();
  digitalWrite(i, HIGH);
  if(digitalRead(2)==HIGH && i==6){
    blinker();
    entry[pwcount] = '1';
    pwcount++;
   delay(200);
  Serial.print('1');
  }
  if(digitalRead(3)==HIGH && i==6){
    blinker();
    entry[pwcount] = '4';
    pwcount++;
   delay(200);
  Serial.print('4');
  }
  if(digitalRead(4)==HIGH && i==6){
    blinker();
    entry[pwcount] = '7';
    pwcount++;
   delay(200);
  Serial.print('7');
  }  
   if(digitalRead(5)==HIGH && i==6){
     blinker();
    entry[pwcount] = '*';
    pwcount++;
   delay(200);
  Serial.print('*');
  }
  
   if(digitalRead(2)==HIGH && i==7){
     blinker();
    entry[pwcount] = '2';
    pwcount++;
   delay(200);
  Serial.print('2');
  }
  if(digitalRead(3)==HIGH && i==7){
    blinker();
    entry[pwcount] = '5';
    pwcount++;
   delay(200);
  Serial.print('5');
  }
  if(digitalRead(4)==HIGH && i==7){
    blinker();
    entry[pwcount] = '8';
    pwcount++;
   delay(200);
  Serial.print('8');
  }  
   if(digitalRead(5)==HIGH && i==7){
     blinker();
   entry[pwcount] = '0';
    pwcount++;
   delay(200);
  Serial.print('0');
  }
  
    if(digitalRead(2)==HIGH && i==8){
      blinker();
    entry[pwcount] = '3';
    pwcount++;
   delay(200);
  Serial.print('3');
  }
  if(digitalRead(3)==HIGH && i==8){
    blinker();
   entry[pwcount] = '6';
    pwcount++;
   delay(200);
  Serial.print('6');
  }
  if(digitalRead(4)==HIGH && i==8){
    blinker();
   entry[pwcount] = '9';
    pwcount++;
   delay(200);
  Serial.print('9');
  }  
   if(digitalRead(5)==HIGH && i==8){
    blinker();
   delay(200);
  Serial.println('#');
  pwcount=0;
  for(k=0; k<=4; k++){
   if(k==4){
   Serial.println("Access Granted");
   digitalWrite(9, HIGH);
   break;
   }
   if(password[k] != entry[k]){
     Serial.println("Denied");
     break;
   }
  }
  for(k=0; k<10; k++)
  entry[k]=0;
  }  
}}

void reset(){
   int j;
   for(j=6; j<=8; j++)
   digitalWrite(j, LOW);
}

void blinker(){
  digitalWrite(9, HIGH);
  delay(20);
  digitalWrite(9, LOW);
  
}







2) Arduino Led:


const int buttonPin = 2;    
const int buttonPin2 = 3;

const int ledPin =  13;      

int buttonState = 0;
int buttonState2 = 0;

void setup()
{
  pinMode(ledPin, OUTPUT);      
  pinMode(buttonPin, INPUT);    
  pinMode(buttonPin2, INPUT);
}

void loop()
{
  buttonState = digitalRead(buttonPin);   /
  buttonState2 = digitalRead(buttonPin2);

  if (buttonState == HIGH){      
    digitalWrite(ledPin, HIGH);  
  }
  if (buttonState2 == HIGH){      
    digitalWrite(ledPin, LOW);  
  }
}





Logged

Pages: [1] 2   Go Up
Jump to: