Para el siguiente experimento, enviaremos un dato que varía entre 0 a 100 que corresponde de 0 a 100%, que es análogo de los 0 a 255 bits que maneja la salida PWM a través de la función "AnalogWrite()", y que se distingue en la intensidad de luz del led, siendo 0% un led apagado y 100% un led totalmente prendido.
Los únicos pines que pueden usar la función de salida PWM en el caso del Arduino UNO de manera nativa son:
# 11
# 10
# 9
# 6
# 5
# 3
Esta data mencionada, será enviada usando una GUI elaborada en Processing usando la librería ControlP5, el dato será ingresado en un campo de texto y el envío es por medio de un botón.
La conexión es la siguiente:
# PIN D11 : Arduino UNO => Resistencia => LED : Ánodo
# GND : Arduino UNO => LED : Cátodo
El programa en Arduino es el siguiente:
/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL
CONEXION:
Arduino (D11) : Anodo del led (pin positivo)
Arduino (GND): Catodo del led (pin negativo)
El siguiente programa nos ayuda a enviar una trama ingresada por puerto serial para ser leida por el Arduino y
ser convertida en el valor del PWM de 0 a 100% (0 - 255 bits)
NOTA: Los pienes que poseen salida PWM son 3, 5, 6, 9, 10 y 11
Autor: Renato Hurtado
http://beetlecraft.blogspot.pe/
El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera ocasionar el mal
funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor
*/
const int led = 11; // Variable asignada al pin led
int data; // Variable de almacenamiento del dato por puerto serial
void setup() {
pinMode(led, OUTPUT); // Configuracion del pin led como salida
Serial.begin(9600); // Comunicacion serial a 9600 bps
Serial.println("Ingresar un valor de 0 a 100"); // Mensaje inicial
}
void loop() {
if(Serial.available() > 0){ // Lectura del puerto mientras sigue abierto
data = Serial.parseInt(); // Extraccion del integer del dato leido
int pwm = map(data, 0, 100, 0, 255); // Cambio de formato del dato de 0 - 100%, a 0 - 255
// Muestra del dato en pantalla
Serial.print("Porcentaje: "); Serial.print(data); Serial.println(" %");
Serial.print("PWM: "); Serial.println(pwm);
analogWrite(led, pwm); // Salida PWM en el led de 0 a 255
}
}
El programa en Processing es el siguiente:/* PROGRAMA DE PRUEBA DE COMUNICACION SERIAL
El siguiente programa nos ayuda a enviar el valor pwm de 0 a 100% a un Arduino y
recibimos en contraparte la confirmacion del valor del PWM de 0 a 255 y el porcentaje
Autor: Renato Hurtado
http://beetlecraft.blogspot.pe/
El siguiente programa es de uso publico, cualquier modificacion o mal uso del mismo que pudiera
ocasionar el mal funcionamiento de la plataforma de uso de la misma no es responsabilidad del autor
*/
import controlP5.*; // Importacion de la libreria controlP5
ControlP5 cp5; // Creacion del objeto cp5 para el ControlP5
String pwm; // Dato de almacenamiento del cuadro de texto
short LF = 10; // ASCII linefeed
import processing.serial.*; //Inicio de la comunicación serial
Serial puerto; // Crea el puerto serial
void setup() {
size(340, 100); // Porte de la pantalla ancho, alto
String ArduinoPuerto = Serial.list()[0]; // Encuentra el primer puerto serial para iniciar la comunicacion
puerto = new Serial(this, ArduinoPuerto, 9600); // Inicio de la comunicacion con el primer puerto encontrado
PFont fuente = createFont( "arial", 15); // Tamano de la fuente y tipo
cp5 = new ControlP5(this); // Inicializacion de la funcion cp5
cp5.addTextfield("PWM de 0 a 100") // Nombre del cuadro de texto
.setPosition(20, 20) // Ubicacion del boton en la ubicacion x, y
.setSize(200, 40) // Tamano del boton ancho, alto
.setFont(fuente) // Fuente del texto
.setAutoClear(false); // No se limpia el campo de texto con "Enter"
cp5.addBang("Enviar") // Nombre del boton
.setPosition(240, 20) // Ubicacion del boton en la ubicacion x, y
.setSize(80, 40) // Tamano del boton ancho, alto
.setFont(fuente); // Fuente del texto
}
void draw () {
String mensaje = puerto.readStringUntil(LF); // Lee todo el mensaje hasta encontrar el linefeed
if (mensaje != null) { // Si el dato no es null
print(mensaje); // Muestra en pantalla del mensaje original de Arduino
}
background(0); // Color de fondo
}
void Enviar() {
// Lectura del valor obtenido del campo de texto
pwm = cp5.get(Textfield.class, "PWM de 0 a 100").getText();
println("PWM enviado: " + pwm); // Muestra del dato por monitor serial
puerto.write(pwm); // Escritura del valor del PWM
// Borra el cuadro de texto despues de apretar el boton
cp5.get(Textfield.class, "PWM de 0 a 100").clear();
}
Los resultados son los siguientes:Autor:





porque el led no se mantiene encendido , use tu codigo pero me sale ese probelma si puedo variar su intencidad pero no se queda encendido pongo un valor y luego se apaga
ResponderEliminar