Go Down

Topic: Pin analogici 6 e 7 su ArduinoBT: come funzionano? (Read 1 time) previous topic - next topic

Andryy

Ciao a tutti, sono nuovo del forum:
Volevo sapere come usare i pin analogici 6 e 7 dell'ArduinoBT come output da 5V;
Io ho usato analogWrite(A6, 255), ma il led connesso al pin non si accende, come mai?
Qua di seguito posto il codice del mio programma:

int led2 = 2;
int led3 = 3;
int led4 = 4;
int led5 = 5;
int led6 = 6;
int led8 = 8;
int led9 = 9;
int led10 = 10;
int led11 = 11;
int led12 = 12;
int led13 = 13;
int led14 = 14;
int led15 = 15;
int led16 = 16;
int led17 = 17;
int led18 = 18;
int led19 = 19;
int led20 = A6;
int led21 = A7;
void setup(){
  pinMode(led2, OUTPUT);
  pinMode(led3, OUTPUT);
  pinMode(led4, OUTPUT);
  pinMode(led5, OUTPUT);
  pinMode(led6, OUTPUT);
  pinMode(led8, OUTPUT);
  pinMode(led9, OUTPUT);
  pinMode(led10, OUTPUT);
  pinMode(led11, OUTPUT);
  pinMode(led12, OUTPUT);
  pinMode(led13, OUTPUT);
  pinMode(led14, OUTPUT);
  pinMode(led15, OUTPUT);
  pinMode(led16, OUTPUT);
  pinMode(led17, OUTPUT);
  pinMode(led18, OUTPUT);
  pinMode(led19, OUTPUT);
  pinMode(led20, OUTPUT);
  pinMode(led21, OUTPUT);
  Serial.begin(115200);
}
void loop(){
  byte rec = 0;
  if(Serial.available()){
    rec = Serial.read();
  }
  switch(rec){
    case 2:
      digitalWrite(led2, HIGH);
    break;
    case 3:
      digitalWrite(led3, HIGH);
    break;
    case 4:
      digitalWrite(led4, HIGH);
    break;
    case 5:
      digitalWrite(led5, HIGH);
    break;
    case 6:
      digitalWrite(led6, HIGH);
    break;
    case 8:
      digitalWrite(led8, HIGH);
    break;
    case 9:
      digitalWrite(led9, HIGH);
    break;
    case 10:
      digitalWrite(led10, HIGH);
    break;
    case 11:
      digitalWrite(led11, HIGH);
    break;
    case 12:
      digitalWrite(led12, HIGH);
    break;
    case 13:
      digitalWrite(led13, HIGH);
    break;
    case 14:
      digitalWrite(led14, HIGH);
    break;
    case 15:
      digitalWrite(led15, HIGH);
    break;
    case 16:
      digitalWrite(led16, HIGH);
    break;
    case 17:
      digitalWrite(led17, HIGH);
    break;
    case 18:
      digitalWrite(led18, HIGH);
    break;
    case 19:
      digitalWrite(led19, HIGH);
    break;
    case 20:
      analogWrite(led20, 255);   
    break;
    case 21:
      analogWrite(led21, 255);
    break;
    case 25:
      digitalWrite(led2, LOW);
      digitalWrite(led3, LOW);
      digitalWrite(led4, LOW);
      digitalWrite(led5, LOW);
      digitalWrite(led6, LOW);
      digitalWrite(led8, LOW);
      digitalWrite(led9, LOW);
      digitalWrite(led10, LOW);
      digitalWrite(led11, LOW);
      digitalWrite(led12, LOW);
      digitalWrite(led13, LOW);
      digitalWrite(led14, LOW);
      digitalWrite(led15, LOW);
      digitalWrite(led16, LOW);
      digitalWrite(led17, LOW);
      digitalWrite(led18, LOW);
      digitalWrite(led19, LOW);
      analogWrite(led20, 0);
      analogWrite(led21, 0);
      break;
  }
}
Grazie mille!

lesto

perchè facendo
Code: [Select]

pinMode(led20, OUTPUT);
  pinMode(led21, OUTPUT);


hai detto che vuoi usare quei PIN come digitali, e quindi l'analogWrite() non funziona più.
Puoi usare i pin analogici come digitali ma NON viceversa. E usa i cicli maledizione! :smiley-mr-green:
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Andryy

E devo mettere qualcos'altro al posto di pinMode() o non devo mettere niente? :~

lesto

se vuoi usarli in analogico non mettere niente
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Andryy

Ed è lo stesso se indico le porte dei pin analogici 6 e 7 con A6 ed A7 o con 20 o 21?
così:
analogWrite(20, 0);
analogWrite(21, 0);
o così:
analogWrite(A6, 0);
analogWrite(A7, 0);

lesto

sì, son tutte etichette equivalenti... ma crei solo confusione. Di solito scelto una convenzione si continua ad usare quella
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Andryy

Il codice così è giusto allora?
(con i cicli  :smiley-mr-green:):

void setup(){
  for(int i = 0; i > 21; i++){
    if((i != 7) && (i != 0) && (i != 1) && (i != 20) &&(i != 21)){
      pinMode(i, OUTPUT);
    }
  }
  Serial.begin(115200);
}
void loop(){
  byte rec = 0;
  if(Serial.available()){
    rec = Serial.read();
  }
  if((rec != 7) && (rec != 0) && (rec != 1) && (rec != 20) &&(rec != 21) && (rec != 25)){
    digitalWrite(rec, HIGH); 
  }
  else if((rec == 20) || (rec == 21)){
    analogWrite(rec, 255); 
  }
  else if(rec == 25){
    digitalWrite(2, LOW);
    digitalWrite(3, LOW);
    digitalWrite(4, LOW);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(8, LOW);
    digitalWrite(9, LOW);
    digitalWrite(10, LOW);
    digitalWrite(11, LOW);
    digitalWrite(12, LOW);
    digitalWrite(13, LOW);
    digitalWrite(14, LOW);
    digitalWrite(15, LOW);
    digitalWrite(16, LOW);
    digitalWrite(17, LOW);
    digitalWrite(18, LOW);
    digitalWrite(19, LOW);
    analogWrite(20, 0);
    analogWrite(21, 0);

  }
}

lesto

si a colpo d'occhio. stessa cosa la puoi fare anche per il segnale low... da 50 righe di codice ne hai 10, molto comodo no? se poi anche i pin analogici li usi in digitale puoi evitarti lo sbatti di fare l'if per l'analogRead  :)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

uwefed

#8
Feb 07, 2011, 12:08 am Last Edit: Feb 07, 2011, 12:11 am by uwefed Reason: 1
scusate state girando intorno al problema.
Il analogWrite funziona solo su uscite PWM non su entrate analogiche.
I pin A6 e A7 per farli funzionare come entrate/uscite digitali devi definirli prima con pinMode. e poi mettere HIGH o LOW con digitalWrite.

Non sono sicuro al 100% che i due pin funzionino come pin digitali. 

Quel codice che hai incluso accende solo un LED alla volta.
Sappi che ogni uscita puó dare 40mA ma in totale la somma delle correnti puó essere solo 200mA.

Andryy suppongo che hai collegato una resistenza in serie a ciascun LED.

Ciao Uwe


leo72

Concordo con Uwe: un pin analogico è "analogico" solo in ingresso: in uscita diventa un pin digitale a tutti gli effetti.
http://arduino.cc/en/Reference/DigitalWrite
"The analog input pins can be used as digital pins, referred to as A0, A1, etc."

http://arduino.cc/en/Reference/AnalogWrite
"The analogWrite function has nothing whatsoever to do with the analog pins or the analogRead function."

lesto

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Andryy

Già, a quanto pare hai ragione perchè se li uso some analogici non vanno, amenochè io non abbia sbagliato il mio programma:
non spegne i led ed i pin A6 ed A7 non si accendono manco....
Lo posto qua:
void setup(){
  Serial.begin(115200);
}
void loop(){
  byte rec = 0;
  if(Serial.available()){
    rec = Serial.read();
  }
  if((rec != 7) && (rec != 0) && (rec != 1) && (rec != 25)){
    analogWrite(rec, 255); 
  }
  else if(rec == 25){
    for(int j = 0; j > 21; j++){
      if((j != 7) && (j != 0) && (j != 1)){
        analogWrite(j, 0);
      }
    }
  }
}

Andryy

Cioè uwe, come dovrei fare per accendere i led nei pin A6 ed A7, dato che non posso accenderli con digitalWrite()?
Non capisco...

lesto

sì che puoi usarli come digitali.
lo dichiari con il pinMode() e poi li usi con digitalWrite (o digitlRead se li usi come input)
sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Andryy

Ma sul sito dice che non possono essere usati come pin digitali... :~ :~

Go Up