programacion guardar español ejemplos dev codigos c++ arduino microcontroller

c++ - guardar - ¿Qué hace este código Arduino?



programacion arduino pdf (3)

DigitalRead

Lee el valor de un pin digital especificado, ya sea ALTO o BAJO.

MISO (Master In Slave Out): la entrada del registro de desplazamiento del Maestro y la salida del registro de desplazamiento del Esclavo.

Visión general de SPI

| es el operador O bit a bit.

d |= 1 es la notación abreviada de

d = d | 1

Este código establece el último bit de d en 1 si la condición es verdadera.

Entonces, lo que estás haciendo es leer la salida del registro esclavo, y si es 1, está ajustando el último bit de d a 1. Justo antes de esa línea, cambia d izquierda por un bit con d <<= 1; . Y lo hace en un bucle:

  • Shift d dejó 1 bit
  • Lea miso, si es 1 , establezca el bit menos significativo de d en 1 .
  • repetir

Entiendo lo que la mayoría de esto está haciendo, sin embargo, el

if (digitalRead(miso)) { d |= 1; }

Es una frase que no entiendo Este código es de la biblioteca Adafruit MAX31855 que se utiliza para las placas Arduino. Estoy tratando de portar el código a mi MCU C8051F020 en c. Este código se lee desde un termopar y el MAX31855 es la interfaz digital de la MCU. aquí está el código completo para este archivo. No estoy familiarizado con digitalRead() . La declaración if publicada arriba es donde no puedo interpretar. Esta instrucción if está en la función uint32_t Adafruit_MAX31855::spiread32(void) .

/*************************************************** This is a library for the Adafruit Thermocouple Sensor w/MAX31855K Designed specifically to work with the Adafruit Thermocouple Sensor ----> https://www.adafruit.com/products/269 These displays use SPI to communicate, 3 pins are required to interface Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Limor Fried/Ladyada for Adafruit Industries. BSD license, all text above must be included in any redistribution ****************************************************/ #include "Adafruit_MAX31855.h" #include <avr/pgmspace.h> #include <util/delay.h> #include <stdlib.h> Adafruit_MAX31855::Adafruit_MAX31855(int8_t SCLK, int8_t CS, int8_t MISO) { sclk = SCLK; cs = CS; miso = MISO; //define pin modes pinMode(cs, OUTPUT); pinMode(sclk, OUTPUT); pinMode(miso, INPUT); digitalWrite(cs, HIGH); } double Adafruit_MAX31855::readInternal(void) { uint32_t v; v = spiread32(); // ignore bottom 4 bits - they''re just thermocouple data v >>= 4; // pull the bottom 11 bits off float internal = v & 0x7FF; internal *= 0.0625; // LSB = 0.0625 degrees // check sign bit! if (v & 0x800) internal *= -1; //Serial.print("/tInternal Temp: "); Serial.println(internal); return internal; } double Adafruit_MAX31855::readCelsius(void) { int32_t v; v = spiread32(); //Serial.print("0x"); Serial.println(v, HEX); /* float internal = (v >> 4) & 0x7FF; internal *= 0.0625; if ((v >> 4) & 0x800) internal *= -1; Serial.print("/tInternal Temp: "); Serial.println(internal); */ if (v & 0x7) { // uh oh, a serious problem! return NAN; } // get rid of internal temp data, and any fault bits v >>= 18; //Serial.println(v, HEX); // pull the bottom 13 bits off int16_t temp = v & 0x3FFF; // check sign bit if (v & 0x2000) temp |= 0xC000; //Serial.println(temp); double centigrade = v; // LSB = 0.25 degrees C centigrade *= 0.25; return centigrade; } uint8_t Adafruit_MAX31855::readError() { return spiread32() & 0x7; } double Adafruit_MAX31855::readFarenheit(void) { float f = readCelsius(); f *= 9.0; f /= 5.0; f += 32; return f; } uint32_t Adafruit_MAX31855::spiread32(void) { int i; uint32_t d = 0; digitalWrite(sclk, LOW); _delay_ms(1); digitalWrite(cs, LOW); _delay_ms(1); for (i=31; i>=0; i--) { digitalWrite(sclk, LOW); _delay_ms(1); d <<= 1; if (digitalRead(miso)) { d |= 1; } digitalWrite(sclk, HIGH); _delay_ms(1); } digitalWrite(cs, HIGH); //Serial.println(d, HEX); return d; }


MISO es el pin Master In / Slave Out en un bus SPI. En este código, usted está jugando la parte del Master, entonces ese es el pin donde lee la entrada del esclavo. d | = 1 simplemente ajusta el último bit en d a 1 si lee un 1 del esclavo (y todos los otros bits no se verán afectados). Cada iteración establece el último bit (LSB) de d en 1 si lee un 1, y luego, al comienzo de la siguiente iteración, cambia d a la izquierda.


No tengo experiencia en absoluto con esta API, sin embargo ...

Si ve la documentación de digitalRead () , toda la función lo hace es leer el bit en el pin que proporciona como argumento. Devuelve HIGH o LOW .

Entonces, básicamente, lo que veo: si el miso bit está miso , haga el primer bit en d on.