Go Down

Topic: primi passi... (Read 606 times) previous topic - next topic

ferdard

Mar 24, 2013, 11:15 am Last Edit: Mar 24, 2013, 04:16 pm by leo72 Reason: 1
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: [Select]
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.

sciorty

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: [Select]
se pin analogico è alto:
          attiva pin 13


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


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

ferdard

#2
Mar 29, 2013, 04:47 pm Last Edit: Mar 30, 2013, 12:22 am by leo72 Reason: 1
ho fatto una modifica al programma:

Code: [Select]
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...

nid69ita

#3
Mar 29, 2013, 05:00 pm Last Edit: Mar 29, 2013, 05:06 pm by nid69ita Reason: 1
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: [Select]

void loop(){
  val = digitalRead(inPin);
  if(val != 0){
          digitalWrite(ledPin, HIGH);   
  }else {
          digitalWrite(ledPin,LOW);}
}
my name is IGOR, not AIGOR

Janos

#4
Mar 29, 2013, 05:05 pm Last Edit: Mar 29, 2013, 05:08 pm by Janos Reason: 1
Questo è un modo:
Code: [Select]

#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: [Select]
if (digitalRead(inPin)) {
...

Omettendo il confronto con HIGH.

Un metodo ancora più sentetico potrebbe essere:
Code: [Select]
#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: [Select]
#define ledPin 11
#define inPin 10

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

void loop() {
  digitalWrite(ledPin, digitalRead(inPin));
}

;) Così in colpo solo scrivi sul pin quello che leggi dall'altro pin...

Se tu volessi invertire la logica:
Code: [Select]
digitalWrite(ledPin, !digitalRead(inPin));

ferdard

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

Go Up