Ciao,
premetto che sto iniziando ora con il C, studiando un po', non mi è chiara una cosa:
se devo dichiarare una variabile devo fare così:
int nomevariabile=0;
dove creo una variabile e gli assegno il valore 0, giusto? Però ho visto anche questo esempio per assegnare un pin:
int ledPin=13 oppure:
int inPin=7
dove praticamente assegno il pin a un nome; ma cosa cambia? non potrei aver creato una variabile di nome "ledPin" e avergli assegnato il valore 13??? Cosa non capisco?
Scusate per la banale domanda
Ciao ciao
Prima di tutto ti consiglio di usare il tipo byte al posto di int.
L'uso della variabile per assegnare un pin di Arduino è dovuto al fatto che è più facile ricordare la funzione che svolge quel pin anziché il suo numero.
Ad esempio, readAnalog(A0); mi dice solo che è un ingresso analogico, ma collegato a cosa?
Se invece scrivi:
byte TemperaturaPin = A0;
float Temperatura = 0.0;
...
Temperatura = readAnalog(TemperaturaPin) * 5.0 / 1023;
Direi che ... dovresti prenderti un bel testo di C e cominciare a studiare, poi ti riavvicinerai, sicuramente più produttivo, ai tuoi programmi.
Puoi cominciare con QUESTO e puoi scaricarti QUESTO libro (... tranquillo, è un sito legale, purché per esclusivo uso PERSONALE).
Comunque ...
int nomeMio = 13; ... crea in RAM una variabile di 2 bytes (int) a cui viene assegnato il valore 13.
byte miaVariabile = 13; ... crea in RAM una variabile di 1 byte (byte) a cui viene assegnato il valore 13.
Dato che con un byte puoi memorizzare un numero da 0 a 255, più che sufficiente per memorizzare il numero di un pin, usando byte al posto di int, dimezzi lo spazio occupato in RAM (... che è sempre poca )
la variabile tipo int occupa 2 byte di memoria, ha un range tra -32768 e +32767, mentre la variabile tipo byte ne occupa solo 1 ed ha un range tra 0 e 255: la numerazione dei pin di Arduino non supera mai 255 e, ovviamente, non è mai negativa!
int nomemio = 13; // dichiara una variabile tipo int con nome nomemio ed la inizializza con valore 13
La variabile in questione potrebbe avere un significato generico oppure far riferimento ad un pin di Arduino.
thedrifter:
Quello ok, se gli si da un nome si capisce meglio, ma quello che non mi torna, è che quando faccio:
int nomemio=13;
cosa faccio? assegno il pin 13 alla variabile nomemio? Oppure do il valore 13 alla variabile nomemio?
Questo non capisco
grazie
La seconda. La MCU non è "senziente", il fatto che dentro alla variabile ci sia 13 e poi che quella variabile TU (umano) gli dai il significato di pin è "sconosciuto" alla macchina.
Solo ed esclusivamente con digitalRead() e digitalWrite() usando 13 accedi/scrivi sul pin 13, il fatto che in una variabile ci sia un valore 13 dentro, non stai accedendo a nessun pin.
Grazie Guglielmo, si, sapevo che int occupava 2 byte, ma non sapevo che "byte" creava la variabile con un solo byte, mi ero sempre chiesto come mai sprecarne 2, grazie.
E grazie anche a nid69ita che ha capito cosa volevo dire, era li il dubbio, ma su alcuni esempi ho trovato scritto che in quel modo si impostava il pin di arduino..... Grazie della conferma di quello che sospettavo.
Vorrei farvi un'altra domanda: di solito quando si fa un digitalRead si fa: val=digitalRead(nomepin); quindi si va a dare alla variabile val lo stato del piedino letto, ma si spreca una variabile solo per memorizzare un on/off? Se io devo leggere 8 piedini, utilizzo 8 variabili? quando potrei usarne una sola, utilizzando i bit...
Scusate le domande magari stupide, ma ho sempre programmato in assembler, e il C lo imparo adesso...
ciao e grazie a tutti
Purtroppo si. Il valore letto è tra 0 o 1 e quindi puoi usare variabili byte (che poi sono unsigned char)
Usare un bit sarebbe un pò scomodo, leggere/scrivere un singolo bit non è molto pratico in C. Nulla di mostruoso ma poco pratico.
Inoltre se devi operare su 5 pin, usando un byte "sprecheresti" comunque 3 bit.
Tieni anche conto che su queste MCU in realtà Arduino con il suo codice nasconde molte cose.
La lettura/scrittura dei pin in realtà la si fa attraverso i registri interni della MCU stessa. E li effettivamente lavori sui bit di questi registri. Prova a cercare su internet "manipolare porte logiche arduino" http://www.leonardomiliani.com/2013/manipoliamo-direttamente-le-porte-logiche-di-una-mcu/
Però perdi in "portabilità" tra i vari tipi di Arduino.