Pages: [1]   Go Down
Author Topic: [video] Arduino Morse (led + altavoz)  (Read 1085 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 1
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, hace 3 días que tengo mi placa Audrino y con los pocos materiales de los que dispongo (hasta que abra la tienda de electrónica que tengo cerca) he hecho un par de cosillas ya.

En el vídeo se muestra una placa Audrino que tiene cargado el siguiente código:
Code:
unsigned short int punto = 70; // Duracion del punto
unsigned short int raya = punto * 4; // Duracion de la raya
unsigned short int negro = punto * 3; // Duracion del apagado entre rayas y puntos
unsigned short int letrayletra = punto * 5; // Duracion del apagado entre letras

void playTone(int tone, int duration, int speakerPin) {
  // Sends the signal to the speakerPin
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    delayMicroseconds(tone);
  }
}

void playToneLed(int tone, int duration, int speakerPin, int ledPin) {
  // Sends the signal to speakerPin and ledPin
  for (long i = 0; i < duration * 1000L; i += tone * 2) {
    digitalWrite(speakerPin, HIGH);
    digitalWrite(ledPin, HIGH);
    delayMicroseconds(tone);
    digitalWrite(speakerPin, LOW);
    digitalWrite(ledPin, LOW);
    delayMicroseconds(tone);
  }
}

// ########## CLASE LETRA #########
class letra {
  private:
    char caracter;
    char* codigo;
    int ledPin;
  public:
    letra (char car, char* cad, unsigned short int pin);
    void set (char car, char* cad, unsigned short int pin);
    void mostrar ();
    void sonar ();
    void mostrarYsonar ();
};

letra::letra (char car, char* cad, unsigned short int pin) {
  // Constructor
  caracter = car;
  codigo = cad;
  ledPin = pin;
  pinMode(ledPin, OUTPUT);
}

void letra::set (char car, char* cad, unsigned short int pin) {
  // Setter
  caracter = car;
  codigo = cad;
  ledPin = pin;
}

void letra::mostrar () {
  // Shows the code in in the ledPin
  unsigned short int j = 0;
  while (codigo[j] != 0) {
    if (codigo[j] == '.') {
      digitalWrite (ledPin, HIGH);
      delay (punto);
      digitalWrite (ledPin, LOW);
      delay (negro);
    } else if (codigo[j] == '-') {
      digitalWrite (ledPin, HIGH);
      delay (raya);
      digitalWrite (ledPin, LOW);
      delay (negro);
    }
    j++;
  }
  delay (letrayletra);
}

void letra::sonar () {
  // Sounds the code on the speakerPin
  unsigned short int j = 0;
  while (codigo[j] != 0) {
    if (codigo[j] == '.') {
      playTone (440, 100, 9);
      delay (negro/3);
    } else if (codigo[j] == '-') {
      playTone (440, 100 * 4, 9);
      delay (negro/3);
    }
    j++;
  }
  delay (letrayletra);
}

void letra::mostrarYsonar () {
  // Sounds and shows the code (ledPin + speakerPin)
  unsigned short int j = 0;
  while (codigo[j] != 0) {
    if (codigo[j] == '.') {
      playToneLed (440, 100, 9, ledPin);
      delay (negro/4);
    } else if (codigo[j] == '-') {
      playToneLed (440, 100 * 4, 9, ledPin);
      delay (negro/4);
    }
    j++;
  }
  delay (letrayletra/2);
}
// ##############################

void setup() {
  Serial.begin(9600);
  pinMode(9, OUTPUT);
}

int letraIN = 0;
unsigned short int ledPin = 13;
void loop() {
  digitalWrite(ledPin, LOW);
  letraIN = 0;
  letraIN = Serial.read();
  letra let (0, "", ledPin);
  switch (letraIN) {
    case 'a': let.set ('a', ".-", ledPin);
              break;
    case 'b': let.set ('b', "-...", ledPin);
              break;
    case 'c': let.set ('c', "-.-.", ledPin);
              break;
    case 'd': let.set ('d', "-..", ledPin);
              break;
    case 'e': let.set ('e', ".", ledPin);
              break;
    case 'f': let.set ('f', "..-.", ledPin);
              break;
    case 'g': let.set ('g', "--.", ledPin);
              break;
    case 'h': let.set ('h', "....", ledPin);
              break;
    case 'i': let.set ('i', "..", ledPin);
              break;
    case 'j': let.set ('j', ".---", ledPin);
              break;
    case 'k': let.set ('k', "-.-", ledPin);
              break;
    case 'l': let.set ('l', ".-..", ledPin);
              break;
    case 'm': let.set ('m', "--", ledPin);
              break;
    case 'n': let.set ('n', "-.", ledPin);
              break;
    case 'o': let.set ('o', "---", ledPin);
              break;
    case 'p': let.set ('p', ".--.", ledPin);
              break;
    case 'q': let.set ('q', "--.-", ledPin);
              break;
    case 'r': let.set ('r', ".-.", ledPin);
              break;
    case 's': let.set ('s', "...", ledPin);
              break;
    case 't': let.set ('t', "-", ledPin);
              break;
    case 'u': let.set ('u', "..-", ledPin);
              break;
    case 'v': let.set ('v', "...-", ledPin);
              break;
    case 'w': let.set ('w', ".--", ledPin);
              break;
    case 'x': let.set ('x', "-..-", ledPin);
              break;
    case 'y': let.set ('y', "-.--", ledPin);
              break;
    case 'z': let.set ('z', "--..", ledPin);
              break;
    case '0': let.set ('0', "-----", ledPin);
             break;
    case '1': let.set ('1', ".----", ledPin);
             break;
    case '2': let.set ('2', "..---", ledPin);
             break;
    case '3': let.set ('3', "...--", ledPin);
             break;
    case '4': let.set ('4', "....-", ledPin);
             break;
    case '5': let.set ('5', ".....", ledPin);
             break;
    case '6': let.set ('6', "-....", ledPin);
             break;
    case '7': let.set ('7', "--...", ledPin);
             break;
    case '8': let.set ('8', "---..", ledPin);
             break;
    case '9': let.set ('9', "----.", ledPin);
             break;
    case '.': let.set ('.', ".-.-.-", ledPin);
             break;
    case ',': let.set (',', "--..--", ledPin);
             break;
    case '?': let.set ('?', "..--..", ledPin);
             break;
    case '"': let.set ('"', ".-..-.", ledPin);
             break;
  }
  //let.mostrar();
  //let.sonar();
  let.mostrarYsonar();
}
Este código básicamente lo que hace es recibir caracteres por el puerto COM y los reproduce (luz, sonido o luz + sonido)

Por otro lado tengo un programa escrito en C/C++, en el que utilizando la API de windows (es lo más rápido que he encontrado para ir empezando) envía cadenas de texto, introducidas por el usuario mediante teclado, caracter a caracter.
El código es el siguiente:
Code:
#include <iostream>
#include <windows.h>

using namespace std;


int main() {
/****************************
 CONFIGURACION DEL PUERTO COM
****************************/
HANDLE hSerial;
   hSerial = CreateFile("COM3",
      GENERIC_READ | GENERIC_WRITE,
      0,
      0,
      OPEN_EXISTING,
      FILE_ATTRIBUTE_NORMAL,
      0);
   if(hSerial==INVALID_HANDLE_VALUE){
      if(GetLastError()==ERROR_FILE_NOT_FOUND){
         cout << "The COM port doesn't exist" << endl;
      }
      cout << "Error: Invalid Handle" << endl;
   }

   DCB dcbSerialParams = {0};
   dcbSerialParams.DCBlength=sizeof(dcbSerialParams);  // Esta linea esta mal en el PDF (aqui esta bien)
   if (!GetCommState(hSerial, &dcbSerialParams)) {
      cout << "Error getting state" << endl;
   }
   dcbSerialParams.BaudRate=CBR_9600;
   dcbSerialParams.ByteSize=8;
   dcbSerialParams.StopBits=ONESTOPBIT;
   dcbSerialParams.Parity=NOPARITY;
   if(!SetCommState(hSerial, &dcbSerialParams)){
      cout << "Error setting serial port state" << endl;
   }

   COMMTIMEOUTS timeouts={0};
   timeouts.ReadIntervalTimeout=50;
   timeouts.ReadTotalTimeoutConstant=50;
   timeouts.ReadTotalTimeoutMultiplier=10;
   timeouts.WriteTotalTimeoutConstant=50;
   timeouts.WriteTotalTimeoutMultiplier=10;
   if(!SetCommTimeouts(hSerial, &timeouts)){
      cout << "Error Setting time out" << endl;
   }

/********************
 TRANSMISION DE DATOS
********************/
char szBuff[1] = {0};
DWORD dwBytesRead = 0;
char palabra[64]; // 8 * 8

while (palabra[0] != '!') {
   cout << "Palabra (! para salir): ";
   cin >> palabra;
   cout << endl;
   unsigned short int i = 0;
   while (palabra[i] != 0) {
      szBuff[0] = palabra[i];
      if(!WriteFile(hSerial, szBuff, 1, &dwBytesRead, NULL)){
         cout << "No se pudo" << endl;
         break;
      }
      i++;
   }
}
}
La mayor parte de este código es la configuracion del puerto COM.

Ejeje espero que les guste y/o sirva de ayuda a alguien.

Mi próxima meta es el uso de relés para un sistema "pseduodomótico" smiley-razz y un controlador MIDI para veejeen (vj).
« Last Edit: August 18, 2009, 12:39:54 pm by aladaris » Logged

Madrid, España
Offline Offline
Newbie
*
Karma: 0
Posts: 34
Arduino student
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Felicidades,
Este ejemplo de utilización del Arduino es estupendo.

Un saludo,
Johnny
Logged

Pages: [1]   Go Up
Jump to: