Programas con Arduino UNO y Ethernet Shield.
En esta entrada se colocaron tres versiones de un ejercicio que emplea tres LEDs enviándoles pulsos de duración pre-establecida. El código del cuarto programa muestra la lectura de un archivo contenido en la tarjeta micro SD de la Ethernet Shield. Por último, el programa cinco borra el archivo contenido en la tarjeta micro SD de la Ethernet Shield.
Los primeros tres programas hacen parpadear tres LEDs colocados en una placa de prototipos (protoboard) con una resistencia de 470 Ohms en el polo positivo del LED conectadas a las salidas digitales 2, 3 y 4 de la Arduino UNO / Ethernet Shield. El polo negativo va conectado a tierra. En el tercer programa se muestra el empleo de una función con atributos para ahorrar en el tamaño del código (C/C++).
Los códigos de los primeros tres programas (con LEDs) son como sigue:
/*
Programa3leds03Se utiliza la instrucción #define en la declaración de la salida
digital (asignación) en lugar de utilizar int ledPin=13;,
con lo que se ahorra en espacio de memoria
El programa hace parpadear tres LED sucesivamente
con pulsos de 250 milisegundos (con delay de 250 milisegundos)
Tamaño del sketch=1308 bytes de 32256 bytes disponibles
El formato de estos problemas tiene la ventaja de que la
inicializacion de las variables esta definida claramente y no se
modifica, por eso se facilita cambiar el pin que se utiliza
como salida y el cambio del tiempo de duracion del pulso
y la pausa
En este programa se utilizó una funcion para abreviar el codigo
dentro del void loop ()
*/
# define ledPin1 2
# define ledPin2 3
# define ledPin3 4
int delayPeriod = 250;
void setup () {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT); }
void loop () {
digitalWrite(ledPin1, HIGH);
delay(delayPeriod);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
delay(delayPeriod);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
delay(delayPeriod);
digitalWrite(ledPin3, LOW); }
El código para el segundo programa es como sigue:
# define ledPin1 2
# define ledPin2 3
# define ledPin3 4
int delayPeriod = 250;
void setup () {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT); }
void loop () {
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, HIGH);
delay(delayPeriod);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(delayPeriod);
digitalWrite(ledPin1, HIGH);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(delayPeriod);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, HIGH);
digitalWrite(ledPin3, LOW);
delay(delayPeriod);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, HIGH);
delay(delayPeriod);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(delayPeriod); }
A continuación, el código para el tercer programa:
# define ledPin1 2
# define ledPin2 3
# define ledPin3 4
void setup () {
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT); }
void loop () {
flash3Led(250, 300);
flash3Led(100, 300);
flash3Led(50, 300);
flash3Led(25, 300);
flash3Led(15, 300);
flash3Led(10, 300);
flash3Led(5, 300);
digitalWrite(ledPin1, LOW);
digitalWrite(ledPin2, LOW);
digitalWrite(ledPin3, LOW);
delay(2000); }
void flash3Led (int delayPeriod, int delayFinal) {
digitalWrite(ledPin1, HIGH);
delay(delayPeriod);
digitalWrite(ledPin2, HIGH);
delay(delayPeriod);
digitalWrite(ledPin3, HIGH);
delay(delayPeriod);
digitalWrite(ledPin1, LOW);
delay(delayPeriod);
digitalWrite(ledPin2, LOW);
delay(delayPeriod);
digitalWrite(ledPin3, LOW);
delay(delayPeriod);
delay(3000); }
El cuarto programa despliega el contenido del archivo pulsedat.txt en el monitor serial. El archivo pulsedat.txt se genera con el programa ‘generador de pulsos’, que les compartiré más adelante.
El código es el siguiente:
/*
LeerArchivo01El programa lee un archivo de texto de la SD card y lo
despliega en el monitor serial
*/
#include <SD.h>
const int chipSelect = 4;
void setup() {
Serial.begin(9600);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!...");
return; }
Serial.println("initialization done!...");
File dataFile = SD.open("pulsedat.txt", FILE_READ);
if (dataFile) {
Serial.println("pulsedat.txt");
while (dataFile.available()) {
Serial.write(dataFile.read()); }
dataFile.close(); }
else {
Serial.println("error opening pulsedat.txt..."); } }
void loop () { }
Por último, el programa cinco de esta entrada borra el archivo pulsedat.txt, contenido en la tarjeta micro SD del Ethernet Shield. Si deseas conservar los datos, debes copiar el archivo a otra ubicación antes de borrarlo.
El código es el siguiente:
/*
BorrarArchivo01El programa lee un archivo de texto de la SD card y lo
despliega en el monitor serial
*/
#include <SD.h>
const int chipSelect = 4;
void setup() {
Serial.begin(9600);
Serial.print("Initializing SD card...");
if (!SD.begin(chipSelect)) {
Serial.println("initialization failed!...");
return; }
Serial.println("initialization done!...");
if (SD.exists("pulsedat.txt")) {
Serial.println("pulsedat.txt exists..."); }
else {
Serial.println("pulsedat.txt doesn't exist..."); }
Serial.println("removing pulsedat.txt...");
SD.remove("pulsedat.txt");
if (SD.exists("pulsedat.txt")) {
Serial.println("pulsedat.txt exists..."); }
else {
Serial.println("pulsedat.txt doesn't exist.."); } }
void loop () { }
Los últimos dos ejercicios no requieren de hardware adicional a las tarjetas electrónicas Arduino. Por el momento es todo. Saludos.
Bibliografía.
Arduino. Sitio web: http://www.arduino.cc/. Consulta el 31 de julio de 2012.