//Mosfet IRF520:
/*
V1:
Código mosfet:
*/
const uint8_t pinMosfet = 35;
const bool CERRADO = HIGH;
const bool ABIERTO = LOW;
const uint8_t BYTES_DE_UN_CARACTER = 2;
char Comando;
void setup() {
Serial.begin(115200);
//Pin
pinMode(pinMosfet,OUTPUT);
//Inicialización
digitalWrite(pinMosfet,ABIERTO);
Serial.println("Ingrese un 'C' o 'c' para cerrar el circuito y 'A' o 'a' para abrirlo");
}
void loop() {
if(Serial.available()>0){ //Hay un comando por leer. Siempre se considera 1 caracter más que los enviados por el salto de línea
if(Serial.available() == BYTES_DE_UN_CARACTER){
Comando = Serial.read(); //Se lee un byte, un caracter
if(Comando == 'C' || Comando == 'c'){
Serial.println("Cerrando el circuito");
digitalWrite(pinMosfet,CERRADO);
}else if(Comando == 'A' || Comando == 'a'){
Serial.println("Abriendo el circuito");
digitalWrite(pinMosfet,ABIERTO);
}else{
Serial.println("Comando inválido");
}
LimpiarBuffer();
}else{
Serial.println("Comando inválido");
LimpiarBuffer();
}
}
delay(10);
}
void LimpiarBuffer(){
char Caracter;
while(Serial.available()>0){ //Hay más caracteres para leer
Caracter = Serial.read();
}
}
/*
V2:
const uint8_t pinMosfet = 35;
const uint8_t CERRADO = 0;
const uint8_t LONGITUD_ARREGLO = 3;
char Comando[3]; //Como máximo se puede ingresar 255, 3 cifras
uint8_t valorPWMActual;
uint8_t valorPWMAnterior;
void setup() {
Serial.begin(115200);
analogWrite(pinMosfet,CERRADO);
Serial.println("Ingrese un valor entre 0 y 255 para cambiar el brillo del led");
}
void loop() {
LeerComando();
if(valorPWMActual != valorPWMAnterior){
valorPWMAnterior = valorPWMActual; //Actualización
analogWrite(pinMosfet,valorPWMActual);
}
delay(10);
}
void LimpiarBuffer(){
char Caracter;
while(Serial.available()>0){ //Hay más caracteres para leer
Caracter = Serial.read();
}
}
void LeerComando(){
char Caracter;
uint8_t Contador;
long Valor;
LimpiarArreglo(Comando,LONGITUD_ARREGLO);
Contador = 0;
while(Serial.available() > 0){
Caracter = Serial.read();
if(Caracter != '\n'){
Comando[Contador] = Caracter;
}
if(Caracter == '\n' && Contador > 0 && Contador <= 3){ //El caracter final es un salto de línea y se da en la tercera iteración como máximo
Valor = atoi(Comando);
if(Valor > 255){
Serial.println("Valor fuera del rango. Ingrese un valor entre 0 y 255");
}else{
valorPWMActual = Valor;
//Serial.printf("Comando: %s\n",Comando);
Serial.printf("Cambiando valor PWM: %d\n",valorPWMActual);
break;
}
}else if(Caracter != '\n' && Contador == 3){ //Se ingresó más cifras
Serial.println("Valor inválido");
LimpiarBuffer();
}
Contador++;
}
}
void LimpiarArreglo(char Comando[],uint8_t Longitud){
for(int i = 0; i < Longitud; i++){
Comando[i] = ' ';
}
}
V3:
const uint8_t pinMosfet = 35;
uint8_t valorPWM;
bool Ascendente;
void setup() {
Serial.begin(115200);
analogWrite(pinMosfet,0);
valorPWM = 0;
Ascendente = true;
}
void loop() {
analogWrite(pinMosfet,valorPWM);
if(valorPWM == 255){
Ascendente = false;
}else if(valorPWM == 0){
Ascendente = true;
}
if(Ascendente){
valorPWM++;
}else{
valorPWM--;
}
delay(5);
}
*/
//MAX6675 (Termocupla):
/*
#include <max6675.h>
const int pinCLK = 6;
const int pinCS = 7;
const int pinMISO = 8;
MAX6675 Modulo(pinCLK,pinCS,pinMISO);
float Temperatura;
void setup() {
Serial.begin(115200);
}
void loop() {
Temperatura = Modulo.readCelsius();
Serial.print("Temperatura: ");
Serial.printf("%.2f °C\n",Temperatura);
delay(1000);
}
https://github.com/adafruit/MAX6675-library/blob/master/max6675.cpp
#include <MAX6675.h>
const int pinMISO = 7;
const int pinCLK = 6;
const int pinCS = 5;
const float AJUSTE_TEMPERATURA = 0;
MAX6675 thermoCouple(pinCS, pinMISO, pinCLK);
void setup() {
Serial.begin(115200);
SPI.begin();
thermoCouple.begin();
thermoCouple.setSPIspeed(4000000);
}
void loop() {
int Estado = thermoCouple.read();
float Temperatura = thermoCouple.getTemperature();
//thermoCouple.setOffset(AJUSTE_TEMPERATURA);
if(Estado == 0x00){
Serial.print("Temperatura: ");
Serial.println(Temperatura);
}else if(Estado == 0x04){
Serial.println("Revisar termopar");
}else if(Estado == 0x81){
Serial.println("Sin comunicacion");
}
delay(500);
}
https://github.com/RobTillaart/MAX6675/blob/master/MAX6675.cpp
Recordar la resistencia PULL-UP para el canal MISO en este último caso
*/