Pages: [1]   Go Down
Author Topic: primi passi...  (Read 559 times)
0 Members and 1 Guest are viewing this topic.
Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve amici,
da qualche giorno sto iniziando i miei primi esperimenti con arduino, per quanto riguarda la parte Hardware non sto trovando molte difficoltà, ho un pò di problemi con la programmazione.

Sto cercando di creare un semplice codice che attivi un led sulla porta 13 quando il pin 1 è HIGH.

Ho provato una cosa del genere:

Code:
void setup(){
pinMode(13, OUTPUT);
pinMode(1, INPUT);
}
void loop(){

  analogRead(1, HIGH);
  digitalWrite(13, HIGH);
}
ma non funziona, potreste darmi qualche indicazione?

grazie a tutti.
« Last Edit: March 24, 2013, 10:16:02 am by leo72 » Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Cominciamo col dire che l'analogRead() richiede solo un paramentro e cioè la porta di cui vuoi leggere il valore. Avrai di ritorno un valore compreso tra 0 e 1023. Le porte a cui fare riferimento per la lettura analogica sono appunto le analogiche: A0, A1, A2, An..
Quindi non puoi usare il pin 1 a questo scopo, sia perchè non è analogico ed in secondo luogo perchè insieme allo 0 è utilizzato per il caricamento dei tuoi sketch.

Hai detto che vuoi attivare il pin 13 quando hai un valore alto su di un altro ingresso, quindi devi verificarne lo stato prima di agire:
Code:
se pin analogico è alto:
          attiva pin 13

Che si traduce in:
Code:
if(analogRead(Ax)==1023){
          digitalWrite(13,1);
       }

Gira un po' nel reference tra le voci digitalRead(), digitalWrite(), analogWrite() ed analogRead()
Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho fatto una modifica al programma:

Code:
int ledPin = 11;
int inPin = 10;  
int val = 0;    



void setup(){
pinMode(ledPin, OUTPUT);
pinMode(inPin, INPUT);
}
void loop(){
  val = digitalRead(inPin);
if(digitalRead(inPin)!=0){
          digitalWrite(ledPin, HIGH);
      
}else {
  digitalWrite(ledPin,LOW);}
}

anche in questo modo non funziona, ho il dubbio che ci sia anche un problema hardware, infatti quando premo il pulsante i led su arduino si spengono!!!

vi posto lo schema sperando nell'aiuto di qualchuno...


* pulsanteled.jpg (779.28 KB, 1995x1599 - viewed 22 times.)
« Last Edit: March 29, 2013, 06:22:28 pm by leo72 » Logged

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

Prova a leggere questo, dovrebbe chiarirti alcune cose. Il tipo è bravo nello spiegare.
http://www.maffucci.it/2010/12/06/arduino-lezione-03-controlliamo-un-led-con-un-pulsante/

Noterai che il led è collegato a GND sul corto, mentre sul lungo collega il pin 13.
Inoltre, almeno la mia, breadboard se collego GND/5+ nelle file sopra, non ho nulla su quelle due sotto

Nel codice, non un errore ma solo per dire che non serve a nulla la variabile var; la leggi e non ne fai nulla. Sarebbe meglio così (oppure la togli)
Code:
void loop(){
  val = digitalRead(inPin);
  if(val != 0){
          digitalWrite(ledPin, HIGH);   
  }else {
          digitalWrite(ledPin,LOW);}
}
« Last Edit: March 29, 2013, 11:06:19 am by nid69ita » Logged

my name is IGOR, not AIGOR

Ivrea
Offline Offline
God Member
*****
Karma: 5
Posts: 680
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo è un modo:
Code:
#define ledPin 11
#define inPin 10

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

void loop() {
  if (digitalRead(inPin) == HIGH) {
    digitalWrite(ledPin, HIGH);
  }
  else {
    digitalWrite(ledPin, LOW);
  }
}

Potresti semplificare la condizione cosi:
Code:
if (digitalRead(inPin)) {
...
Omettendo il confronto con HIGH.

Un metodo ancora più sentetico potrebbe essere:
Code:
#define ledPin 11
#define inPin 10

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

void loop() {
  if (digitalRead(inPin)) digitalWrite(ledPin, HIGH);
  esle digitalWrite(ledPin, LOW);
}
Questo perché se l'istruzione da eseguire in un caso dell'IF è una sola e non usa serie di istruzioni puoi omettere le graffe.

Infine, sintetizzando ancora:
Code:
#define ledPin 11
#define inPin 10

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

void loop() {
  digitalWrite(ledPin, digitalRead(inPin));
}
smiley-wink Così in colpo solo scrivi sul pin quello che leggi dall'altro pin...

Se tu volessi invertire la logica:
Code:
digitalWrite(ledPin, !digitalRead(inPin));
« Last Edit: March 29, 2013, 11:08:19 am by Janos » Logged

Italy
Offline Offline
Jr. Member
**
Karma: 0
Posts: 82
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ho capito dove sbagliavo, grazie mille a tutti...
Logged

Pages: [1]   Go Up
Jump to: