Salve,vorrei leggere più pin analogici con un ciclo for
ho fatto questo sketch funziona ma non riesco ad assegnare una variabile i singoli output.
[code]
int pin [2] = {A0, A1};
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 2; i++) {
float val = analogRead(pin[i]);
float val1 = (val / 1024 * 5) * 5;
Serial.print("val1>>>>>");
Serial.println(val1);
delay(1000);
}
}
[/code]
gpb01
April 9, 2020, 1:42pm
2
Scusa ma se, ad esempio, dichiari
float val[2];
... hai un array di due elementi (come pin ) che indirizzi allo stesso identico modo.
Guglielmo
Sto provando ma non ci riesco ,come faccio a stamparli singolarmente?
gpb01
April 9, 2020, 2:00pm
4
Ma ti è chiaro cosa è un array e come funziona? ... perché a me non sembra e ... forse faresti bene a prendere un testo e studiarti le BASI ... :
Premesso questo, semplicemente dando l'indice come per assegnare i valori ...
Serial.println( val[0] );
Serial.println( val[1] );
Guglielmo
dici cosi?
[code]
int pin [2] = {A0, A1};
float val[2];
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 2; i++) {
float val = analogRead(pin[i]);
float val1 = (val / 1024 * 5) * 5;
Serial.print("val1>>>>>");
Serial.println(val1);
Serial.println(val[1]);
delay(1000);
}
}
[/code]
mi da errore.
Direi che di confusione ne hai molta.
Prima di tutto dichiari un float val[2]; GLOBALE, visibile ovunque
Poi dentro al loop() lo ridichiari float val; variabile locale che NASCONDE la globale
int aVal = analogRead(pin[i]); // analogico 0-1023 basta un int
val[i] = (aVal / 1024.0 * 5.0) * 5.0;
....
Serial.println(val[i]);
con questo esempio di codice mi stampa correttamente sulla monitor seriale.
[code]
int pin [2] = {A0, A1};
void setup() {
Serial.begin(9600);
}
void loop() {
for (int i = 0; i < 2; i++) {
float val = analogRead(pin[i]);
float val1 = (val / 1023 * 5) * 5;
Serial.print("val1>>>>>");
Serial.println(val1);
delay(1000);
}
}
[/code]
16:47:31.696 -> val1>>>>>12.22 // A0;
16:47:32.696 -> val1>>>>>11.95 //A1;
16:47:33.692 -> val1>>>>>12.22
risultato.
Come faccio a separarli in due variabili ?
Ma se sei in un ciclo, perchè cavolo devi avere due variabili distinte ??
Puoi averle in un array con due elementi e te lo abbiamo già indicato.
#define K_NUMPIN 2
const byte pin[K_NUMPIN] = {A0, A1};
float val[K_NUMPIN];
void setup()
{ Serial.begin(9600);
}
void loop()
{ for (int i = 0; i < K_NUMPIN; i++)
{
int aVal = analogRead(pin[i]); // analogico 0-1023 basta un int
val[i] = (aVal / 1024.0 * 5.0) * 5.0;
Serial.print(">>> pin:");
Serial.print(pin[i]);
Serial.print(" valore:");
Serial.println(val[i]);
}
}
ti risulterà qualcosa del genere su Arduino Uno (A0=14 e A1=15):
pin: 14 valore:12.22
pin: 15 valore:11.95
gpb01
April 9, 2020, 3:15pm
9
>wingamesyun: ascolta, noi aiutare aiutiamo, ma tu ti prendi un libro di C e STUDI ... >:(
Guglielmo
gpb01:
>wingamesyun: ascolta, noi aiutare aiutiamo, ma tu ti prendi un libro di C e STUDI ... >:(
Guglielmo
Ok va .
ottimo consiglio studio studio.. .
nid69ita:
Ma se sei in un ciclo, perchè cavolo devi avere due variabili distinte ??
Puoi averle in un array con due elementi e te lo abbiamo già indicato.
#define K_NUMPIN 2
const byte pin[K_NUMPIN] = {A0, A1};
float val[K_NUMPIN];
void setup()
{ Serial.begin(9600);
}
void loop()
{ for (int i = 0; i < K_NUMPIN; i++)
{
int aVal = analogRead(pin[i]); // analogico 0-1023 basta un int
val[i] = (aVal / 1024.0 * 5.0) * 5.0;
Serial.print(">>> pin:");
Serial.print(pin[i]);
Serial.print(" valore:");
Serial.println(val[i]);
}
}
ti risulterà qualcosa del genere su Arduino Uno (A0=14 e A1=15):
>>> pin: 14 valore:12.22
>>> pin: 15 valore:11.95
Questo non capivo < val = > Grazie di tutto.
Buona sera ,secondo voi un codice che legge 4 pin analogici e fa due mappature diverse va modificato
anche se funziona?
[code]
#define K_NUMPIN 4
const byte pin[K_NUMPIN] = {A0, A1, A2, A3};
float val[K_NUMPIN];
int val1[K_NUMPIN];
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x3F, 20, 4);
int y, x = 0;
float a, b = 0;
void setup()
{ Serial.begin(9600);
Wire.begin();
lcd.init();
lcd.backlight();
lcd.clear();
}
void loop()
{
for (int i = 0; i < K_NUMPIN; i++)
{
int aVal = analogRead(pin[i]);
val1[i] = map(aVal, 0, 1024, 0, 1000);
val[i] = (aVal / 1024.0 * 5.0) * 5.0;
a = val[0];
b = val[1];
x = val1[3];
y = val1[2];
lcd.clear();
lcd.setCursor(2, 0);
lcd.print(x);
lcd.setCursor(1, 1);
lcd.print(y);
lcd.setCursor(2, 2);
lcd.print(a);
lcd.setCursor(2, 3 );
lcd.print(b);
lcd.print("");
delay(200);
}
}
[/code]
Converrebbe fare due for?
Così ne leggi uno alla volta e li mostri sul display sempre tutti e quattro.
Se metti due for, col primo li leggi e col secondo li mostri sul display.
O potresti anche far mostrare sul display solo quello che hai letto, in un solo for.
Buongiorno. in poche parole va bene anche così
Probabilmente ti fornisce quello che volevi, ma andrebbe fatto meglio.
E' come mangiare gli spaghetti usando una paletta da spiaggia invece della forchetta: li mangi lo stesso, ma...
La prima cosa è quella che hai detto tu stesso: fare due for.
Prova a separare le due parti, lettura e display.