L'objectiu es compendre com funciona la llum mitjançant microcontroladors i progromació i en el meu cas efecte mims a través de leds dediferents colors, vermell, verd, groc i blanc. També leds RGV Neocities.
Els passos a sefuir són els següent:
float sensorValue: //Primer de tot hem dre crear una variable anomenada sensorValue i per crear-la utilitzem la instrucció float sensorValues; //Això creara un espai de memòria gran, capaç d'emmagatzemar un número decimal = "floating point number"= número amb coma flotant. Aquest espai de memòria el puc anomenar com vulgui, si l'anomenes valorSensor en castellà o català només l'entendrien aquí, El possem en anglès en estil camelCase o lletra de camell. Hi han altres estils com Snake_case, kebab-case, PascalCase. És a dir, la variable que emmagatzema els valor del sensor pot anomenar-se en els estils anteriors com el sensorValue(camelcase), Sensor_values(snake_case), sensor-value(kebab-case), SensorValue(PascalCase). Sempre s'ha de fer el mateix estil en un codi, no es pot cambiar, i el més utilitzat és el camelCase. És molt important el punt i coma al final de cada línia perquè indica que la instrucció s'ha acabat. Els microcontroladors petits que tenen molt poca memòria(Arduino UNO 16 KB molt poc comparat amb 512 kB del ESP32-S3) podría gastar menys memòria definint variables més petites que númerols decimals com per exemple números senseres. En aquest darrer cas la instrucció sería int sensorValue; pequè int significa integer number o número sencer i acepta 5 dígits, però només fins al número 64000 o 32000 i 1023 està dintre del marge. Si en comptes d'un sensor fos una sortida analògic que va de 8 bits que és igual a 28 igual a 255. Quína mínima variable utilitzaríes?float sensorValue; sensorValue = analogRead(A0); sensorVoltage = sensorValue/1024*5.0;
Tipus de variable d'Arduino
Primer de tot hem de crear una variable anomenada sensorValue i per crear-la utilitzem la instrucció float sensorValue;
Això crearà un espai de memòria gran capaç d'emmagatzemar un número decimal = "número point number" = número amb coma flotant. Aquest espai de memòria el puc anomenar com vulgi, si l'anomenes valorSensor en castellà o en català només ho entrendriem aquí.
El posem en anglès en estil camelCase o lletra de camell. Hi ha altres estils com snake_case, kebab-case, PascalCase. És a dir, la variable que emmagatzema els valors del sensor pot anomenar-se en els estils anteriors com el sensorValue (camelCase), sensor_value (snake_case), sensor-value (kebab-case) i SensorValue (PascalCase). Sempre s'ha de mantendre el mateix estil. El més utilitzat es el camelCase.
Es important el ; de cada línia perquè indica el final de l'instrucció.
En els microcontroladors petits que tenen molt poca memòria (Arduino UNO 16 KB, molt poc comparat a 512 KB del ESP32 S3) podrien gastar menys memòria definint variables més petites que números decimals com per exemple números sencers. En aquest darrer cas l'instrucció seria int sensorValue; perquè int significa integer number o número sencer i acepta 5 digits (5 espais de memòria) però només fins al número 64000 o 32000 i 1023 està dintre del margue.
Si tenim una variable float, quants digits guadra espai a la petita memòria del microcontrolador?
Com podem veure a la taula, posa que float acepta números de fins a 3.4028235E+38, que vol dir 3.4028235*1038, es a dir 38 espais de memòria disponibles per aquesta variable
Si en comptes d'un sensor fos una sortida analògica de 8 bits que és igual a 28 igual a 255, quina variable utilitzaries?
Si vull utilitzar byte no arribaria a 1023 si no a 255 i no serviria per un sensor que llegeix de 0 a 1023. Aquest de 255 es podria fer servir per una sortida analògica PWM de 8 bits
En el cas de Arduino UNO, la velocitat de mostreig del rellotge inclós el ADC, és 125 kHm que vol dir 125000 cicles per segon. En el cas de ESP32-S3, la seva velocitat màxima és de 2 MHz, (2000000 de mostres per segon) però realment s'aprofita només 1000 per segon, via wifi. Aquests valors tan alts són teòrics.
Codi per manipular una entrada analògica(sensor)
const int uvLEDPin = 9; // Pin digital per al LED UV const int uvSensorPin = A0; // Pin analògic per al sensor UV
Al principi de tot el codi sempre hi ha les contants i variables utilitzarem. En aquest cas totom són constants globals i no hi ha cap biblioteca inivial importada. Una constant global vol dir que afecta totes les funcions de tot el codi. En canvi una variable local està definida dins d'una funció i no la podem cridar fora de la funció. Les constants signifiquen que jo en comptes d'escriure el nombre 5 he d'escriure uvLEDpin, i en comptes d'escriure 11 escic uvSensorPin, fent el codi molt més llarg, però més comprensible per humà, perquè s'enten mol millo si un sensor o un led ultraviolat que jo connecto. Normalment en posa en anglès camelCase.
void setup() { pinMode(uvLEDPin, OUTPUT); Serial.begin(9600); }
El void setup és una funció obligatoria del programa arduino i significa la configuració de har
Altres tipus de variables que consumeixen molt poca memòria es . Boolean ve del nom d'un senyor Boole que va inventar àlgebra basada en 0 i 1, o en el seu equivalent false i true. Es pot fer servir per començar un moviment. Primer es false i després es true si es compleix una condició com per exemple pressionar una tecla.
Char es un altre tipus de variable, que vol dir caràcter i és compatible amb arduino, i que inclou els caràcters ASCII , on podem veure que els caràcters són números tant decimals com binaris. Per exemple la lletra a és el número decimal 97 i el número binari 01100001. Perquè 0*27+1*26+1*25+0*24+0*23+0*22+0*21+1*20= 0+64+32+0+0+0+0+1 = 97
Un cop que hem entés els tipus de variables d'Arduino parlem del ADC i com una senyal totalment continua la transformem en 1 i 0