Informazioni "banali"

Salve :slight_smile:
vorrei sciogliere un paio di piccoli dubbi.
A) qualcuno sa spiegarmi la linea di codice "int val = 0 (intero valore = 0 giusto?)" a cosa serve con precisione? Il mio circuito funziona anche se ometto int val = 0 e val=digitalRead(BUTTON) e scrivo solo digitalRead(BUTTON).
per fare un esempio: lo sketch per far accendere e spegnere un LED tramite pulsante.

B)come misuro correttamente la caduta di potenziale ai capi di un componente? prendo il singolo componente lo collego al multimetro(taster) e vedo il valore che ottengo?

Grazie per la cortese attenzione.

a) con
int val =0;
definisci il tipo di variabile che assegni alla variabile val. in questo caso un tipo integer con segno a 2Byte. Dai anche subito un valora allla variabile. Ogni variabile prima che possa essere usata deve essere data un tipo. http://arduino.cc/en/Reference/Int Ogni riga deve essere terminata con un puntoevirgola.
Una parte di funzioni e commandi trovi su Arduino - Home

b) la caduta di tensione su un componente dipende dal suo stato di funzionamento ( se per esemio un transistore conduce o un LDR riceve luce o no) e la corrente che circla. La tensione puoi misurare collegando i tester ai capi del componente. Attenzione: non sempre quello che misuri ha un significato.

Ciao Uwe

a)
per completare le informazioni di Uwe, spesso si usa la forma tipo_variabile nome = valore per compiere in un singolo passaggio 2 operazioni, ossia la definizione del tipo di variabile e l'assegnazione di un valore iniziale.

Non sempre tale valore iniziale serve.
Nel tuo caso, se il codice è:

int val=0;
val=digitalRead(BUTTON);

l'assegnazione di 0 a val è inutile dato che val andrà comunque a contenere un valore, nello specifico la lettura del pin BUTTON. Diversamente, non puoi omettere la dichiarazione di tipo perché, come ti ha spiegato Uwe, il micro deve sapere prima di usarla di che tipo sarà una variabile perché deve crearla materialmente in memoria e riservargli lo spazio necessario.

mmh. scusate ma purtroppo non mi è molto chiaro :frowning:

AMBUSH:
mmh. scusate ma purtroppo non mi è molto chiaro :frowning:

Cosa non ti è chiaro?

PS:
a che livello sei di programmazione? per capire le tue conoscenze

funziona anche se ometto int val = 0 e val=digitalRead(BUTTON) e scrivo solo digitalRead(BUTTON).

se metti soltanto val=digitalRead(BUTTON) ti da errore, dicendoti che val non è dichiarato
puoi usarla così int val=digitalRead(BUTTON)
oppure così byte val=digitalRead(BUTTON) occuperai meno memoria se sei sicuro che il tuo valore non supererà i 255
se pensi che la tua variabile possa assumere valori piĂą alti numeri interi (da -2147483648 a 2147483648) allora usi int

http://programmazione.html.it/guide/lezione/1090/le-variabili-in-c/

pablos:

funziona anche se ometto int val = 0 e val=digitalRead(BUTTON) e scrivo solo digitalRead(BUTTON).

se metti soltanto val=digitalRead(BUTTON) ti da errore, dicendoti che val non è dichiarato
puoi usarla così int val=digitalRead(BUTTON)
oppure così byte val=digitalRead(BUTTON) occuperai meno memoria se sei sicuro che il tuo valore non supererà i 255
se pensi che la tua variabile possa assumere valori piĂą alti numeri interi (da -2147483648 a 2147483648) allora usi int

http://programmazione.html.it/guide/lezione/1090/le-variabili-in-c/
Guida al C : Uso delle variabili :: Orebla.it :: iPhone 5 - Jailbreak iOS 5 - Guide Apple - Sfondi HD iPhone 4S

Ocio!
Un int assume valori da -32768 a +32767, gli intervalli che hai dato tu sono per un unsigned int :stuck_out_tongue:

int di atmel che è a 16 bit -32768 a +32767 che equivale a un short
ma il normale int dei microprocessori a 32 bit -2147483648 a 2147483648

non ho specificato che nell'atmel è limitato a 16, è corretto detto così?

ciao

leo72:

AMBUSH:
mmh. scusate ma purtroppo non mi è molto chiaro :frowning:

Cosa non ti è chiaro?

PS:
a che livello sei di programmazione? per capire le tue conoscenze

praticamente è un limite che tende a zero.

quindi "val" indica "variabile"? quindi int val=0; significa assegno alla variabile "val" un numero intero pari a "0"?

ecco lo sketch dell'esempio
// Accendere il LED mentre è premuto il pulsante

#define LED 13
#define BUTTON 7

int val = 0;

void setup() {
pinMode(LED, OUTPUT);
pinMOde(BUTTON, INPUT);
}

void loop() {
val = digitalWrite(BUTTON);

if (val=HIGH) {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}

ecco il mio sketch

// Accendere il LED mentre è premuto il pulsante

void setup() {
pinMode(13, OUTPUT);
pinMode(7, INPUT);
}

void loop() {
digitalWrite(7);

if (digitalWrite(7)=HIGH) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}

e funziona :slight_smile:

scusate il post kilometrico.

Scusa dove hai preso quell'esempio
Negli if quando fai i controlli dovrebbe esserci == in questo modo l'if assegna un valore invece che verificarlo, mi sa che devi rivedere in po di cose
Ciao

pablos:
int di atmel che è a 16 bit -32768 a +32767 che equivale a un short
ma il normale int dei microprocessori a 32 bit -2147483648 a 2147483648

non ho specificato che nell'atmel è limitato a 16, è corretto detto così?

ciao

Sul forum di Arduino un "int" è un dato a 16 bit, sul forum x86 sarà a 32 bit XD

Scherzo. :stuck_out_tongue:
Stiamo parlando di Arduino, quindi Atmel, ci dobbiamo sempre confrontare e riferire a questa architettura, è implicito.

pablos:
Scusa dove hai preso quell'esempio
Negli if quando fai i controlli dovrebbe esserci == in questo modo l'if assegna un valore invece che confrontarlo, mi sa che devi rivedere in po di cose
Ciao

Esattamente. Il segno di equivalenza è "==", il simbolo "=" (1 solo segno di uguale) è l'assegnazione. Quindi quegli if saranno sempre veri perché un'operazione di assegnamento darà sempre esito positivo.

AMBUSH:
ecco lo sketch dell'esempio
// Accendere il LED mentre è premuto il pulsante

#define LED 13
#define BUTTON 7

int val = 0;

void setup() {
pinMode(LED, OUTPUT);
pinMOde(BUTTON, INPUT);
}

void loop() {
val = digitalWrite(BUTTON);

if (val=HIGH) {
digitalWrite(LED, HIGH);
} else {
digitalWrite(LED, LOW);
}
}

ecco il mio sketch

// Accendere il LED mentre è premuto il pulsante

void setup() {
pinMode(13, OUTPUT);
pinMode(7, INPUT);
}

void loop() {
digitalWrite(7);

if (digitalWrite(7)=HIGH) {
digitalWrite(13, HIGH);
} else {
digitalWrite(13, LOW);
}
}

e funziona :slight_smile:

scusate il post kilometrico.

in questo esempio "ad esempio" ( :D) si poteva anche omettere val=0 in quanto prima di utilizzarlo esso viene inizializzato con un val = digitalWrite(BUTTON);

Si vede che il mio reply #2 è passato inosservato :wink:

leo72:
Si vede che il mio reply #2 è passato inosservato :wink:

ops sorry leo errore mio :smiley:

praticamente è un limite che tende a zero.

quindi "val" indica "variabile"? quindi int val=0; significa assegno alla variabile "val" un numero intero pari a "0"?

Devi fare riferimento ad un manuale di programmazione in C che tratti l'argomento in modo Base, molto base.

val poteva anche essere Val, pippo, gino, tino e vino, in quanto si tratta di attribuire un nome ad una variabile.
La scelta del nome è arbitraria, in genere scegli un nome in base al contesto, es nel caso di una variabile che
indica un indice di qualcosa puoi usare index, idx, i o anche specificare a che tipo di indice ti riferisce con productIndex, vendorIndex
ecc.

Il nome che scegli per una variabile serve a te programmatore per poterla usare in seguito, mentre il tipo che specifichi serve
al compilatore per sare quanto spazio in memoria occuperà quella variabile e quanto grande è il dato che potrai assegnare alla variabile. Quindi lo possiamo vedere come un contenitore con nome assegnato dal programmatore che deve scegliere anche
la dimensione di questo. Se vuoi assegnare un dato piĂą grande del contenitore che hai scelto il compilatore molte volte
farà una troncatura del data e se questo può portare problemi di funzionamente al programma deve essere il programmatore
a stabilirlo.

Ciao.

Grazie a tutti :wink:
avete dato tutti risposte molto dettagliate e tecniche il che mi hanno portato un pò fuori strada però grazie lo stesso.
:slight_smile:
ringrazio MauroTec perchè mi ha praticamente illuminato con la spiegazione terra terra :slight_smile:

grazie per i link sul C, credo che prima di procedere con Arduino deva studiare un pò la programmazione.

Grazie ancora. ]:smiley:

leo72:

pablos:
Scusa dove hai preso quell’esempio
Negli if quando fai i controlli dovrebbe esserci == in questo modo l’if assegna un valore invece che confrontarlo, mi sa che devi rivedere in po di cose
Ciao

Esattamente. Il segno di equivalenza è “==”, il simbolo “=” (1 solo segno di uguale) è l’assegnazione. Quindi quegli if saranno sempre veri perché un’operazione di assegnamento darà sempre esito positivo.

no un momento! l’operatore di assegnamento resituisce il valore assegnato alla variabile di sinistra, quindi se si assegna alla variabile di sinistra il valore 0 l’operatore assegnamento “=” restituirà false…questo almeno in C ANSI…

Lui nell'esempio che ha postato ha:

 if (val=HIGH)

HIGH=1=true