miércoles, 5 de octubre de 2016

Sistema de Radar con MicroControlador Arduino

He diseñado un Sistema de Radar que permite a los docentes y estudiantes entender el funcionamiento de los radares, sonares y eco localizadores. El sistema se fundamenta en el uso de los micros controladores. El  funcionamiento del sistema y los  respectivos códigos se pueden observar en el siguiente vídeo…..  




Código para la programación del Arduino

#include <Servo.h>.
#include <Adafruit_GFX.h>    // Core graphics library
#include <Adafruit_TFTLCD.h> // Hardware-specific library
#include <TouchScreen.h>

#define LCD_CS A3 // Chip Select goes to Analog 3
#define LCD_CD A2 // Command/Data goes to Analog 2
#define LCD_WR A1 // LCD Write goes to Analog 1
#define LCD_RD A0 // LCD Read goes to Analog 0
#define LCD_RESET A4 // Can alternately just connect to Arduino's reset pin


#define YP A3  // must be an analog pin, use "An" notation!
#define XM A2  // must be an analog pin, use "An" notation!
#define YM 9   // can be a digital pin
#define XP 8   // can be a digital pin

#define TS_MINX 150
#define TS_MINY 120
#define TS_MAXX 920
#define TS_MAXY 940
#define MINPRESSURE 10
#define MAXPRESSURE 1000
TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300);

// Assign human-readable names to some common 16-bit color values:
#define  BLACK   0x0000
#define BLUE    0x001F
#define RED     0xF800
#define GREEN   0x07E0
#define CYAN    0x07FF
#define MAGENTA 0xF81F
#define YELLOW  0xFFE0
#define WHITE   0xFFFF
Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET);

Servo myServo; // Creates a servo object for controlling the servo motor
const int trigPin = 26;
const int echoPin = 24;
// Variables for the duration and the distance

long duration;
int distance,xpos,ypos,iOld;
float sx = 0, sy = 1, mx = 1, my = 0, hx = -1, hy = 0;
int16_t x0 = 0, x1 = 0, yy0 = 0, yy1 = 0, x00 = 0, yy00 = 0,ang,iTemp;
String tmp="";

void setup() {
  Serial.begin(9600);
   tft.reset();
  uint16_t identifier = tft.readID();
  tft.begin(identifier);
  tft.setRotation(0);
  tft.fillScreen(BLACK);
  tft.fillScreen(RED);
  tft.fillScreen(GREEN);
  tft.fillScreen(BLUE);
  tft.fillScreen(BLACK);
  delay(100);

  //tft.setRotation(0);
 // put your setup code here, to run once:
 myServo.attach(52); // Defines on which pin is the servo motor attached 
pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output
  pinMode(echoPin, INPUT); // Sets the echoPin as an Input
  
  tft.setRotation(1);
  radar();
}

void loop() {
   
  // put your main code here, to run repeatedly:
 for(int i=15;i<=165;i=i+2)
 {  
  myServo.write(i);
   //angulo(iOld,BLACK);
   if (distance>30)
    angulo(i,GREEN);
    else
    angulo(i,RED);
   tmp=i;
 tft.fillRect(125,141,40,16,BLACK);
  texto( tmp,125,141,2,GREEN);  
  iOld=i;

  //delay(10);
   distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
   Serial.print(i); // Sends the current degree into the Serial Port
  Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  Serial.print(distance); // Sends the distance value into the Serial Port
  Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  tmp=distance;
 tft.fillRect(125,161,40,16,BLACK);
  texto( tmp,125,161,2,GREEN);  
 }
radar();
 for(int i=165;i>15;i=i-2){  
  myServo.write(i);
  //angulo(iOld,BLACK);
   if (distance>30)
    angulo(i,GREEN);
    else
    angulo(i,RED);
   tmp=i;
 tft.fillRect(125,141,40,16,BLACK);
  texto( tmp,125,141,2,GREEN);  
  iOld=i;

  //delay(10);
   distance = calculateDistance();// Calls a function for calculating the distance measured by the Ultrasonic sensor for each degree
  Serial.print(i); // Sends the current degree into the Serial Port
  Serial.print(","); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  Serial.print(distance); // Sends the distance value into the Serial Port
  Serial.print("."); // Sends addition character right next to the previous value needed later in the Processing IDE for indexing
  tmp=distance;
 tft.fillRect(125,161,40,16,BLACK);
  texto( tmp,125,161,2,GREEN);  
}
radar();
}
int calculateDistance(){ 
  
  digitalWrite(trigPin, LOW); 
  delayMicroseconds(2);
  // Sets the trigPin on HIGH state for 10 micro seconds
  digitalWrite(trigPin, HIGH); 
  delayMicroseconds(10);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH); // Reads the echoPin, returns the sound wave travel time in microseconds
  distance= duration*0.034/2;
  return distance;
}

void radar()
{
   
   tft.fillRect(0,0,tft.width(),tft.height(),BLACK);
   texto( "Radar Posicion",75,125,2,WHITE);
   texto( "Ang=",75,141,2,GREEN);
   texto( "Dis=",75,161,2,YELLOW);
   
   xpos = tft.width() / 2; 
   ypos = tft.height() / 2; 
  tft.drawCircle(xpos, ypos, 120, YELLOW);
  for ( ang=0;ang<=180;ang=ang+30)
  {
  
  angulo ( ang, BLUE);
}
}

void texto(String texto,int x,int y,int Size,int color)
{
    tft.setTextColor(color);
     tft.setCursor(x, y);
     tft.setTextSize(Size);
     tft.println(texto);
}

void angulo (int16_t ang, int color)
{


sx = cos(( - ang) * 0.0174532925);
    sy = sin(( - ang) * 0.0174532925);
    x0 = sx * 114 + xpos;
    yy0 = sy * 114 + 120;
    x1 = sx * 100 + xpos;
    yy1 = sy * 100 + 120;

    tft.drawLine(x0, yy0, xpos, ypos, color);
   
}

void coordenadas()
{
  for ( ang=0;ang<=180;ang=ang+30)
  {
  
  angulo ( ang,BLUE);
}
  
}


martes, 31 de mayo de 2016

Sistema de Control Inalámbrico mediante uso de Arduino y Bluetooth Pro

Sistema de Control Inalámbrico mediante uso de Arduino y Bluetooth Pro para dispositivos Android que controlan los movimientos de un objeto gráfico (cuadrado) dibujado en la computadora. El control se realiza de manera alámbrica conectado directamente  el sistema Arduino al puerto USB de la computadora y se controla de manera remota a través del Bluetooth mediante el uso de un dispositivo Android.
Puedes descargar los códigos de los programas utilizados directamente de la página web:



Puedes descargar gratis la aplicación Bluetooth Pro desde Google  Play:




domingo, 24 de abril de 2016

Electric Circuits Pro 2016



He diseñado la aplicación Circuitos Eléctricos PRO las cuales pueden descargar de manera Gratuita en la Play Store de Google:
Mediante la aplicación Circuitos Eléctricos Pro pueden aprender los conceptos fundamentales de circuitos eléctricos: resistencias, condensadores, bobinas, circuitos en serie, circuitos en paralelo. es una aplicación diseñada en el idioma Español e Ingles...Muy útil para los estudiantes de bachillerato, escuelas técnicas, técnicos superiores y estudiantes de ingeniería... Dispone de materiales de teoría sobre los fundamentos de la electricidad, simuladores de circuitos eléctricos y un sin fin de recursos...quieres ver como funciona...

viernes, 18 de marzo de 2016

Aprendiendo el Alfabeto con Alejandro


Aprendiendo el Alfabeto con Alejandro es una forma sencilla y entretenida para que los niños aprendan el alfabeto en español. Mediante esta aplicación se desarrolla el pensamiento ubicuo en los niños.
Aprendiendo el Alfabeto con Alejandro es una forma entretenida de aprender las letras del alfabeto en español, mediante la pronunciación de cada una de las letras asociadas a una palabra y a una figura que atrae la atención de los niños. Mediante esta aplicación los niños aprenden a pronunciar las letras del alfabeto escuchando como lo pronuncia correctamente otro niño.
Es una aplicación colorida con una ambiente musical que motiva el aprendizaje en los niños…



La puedes descargar desde Google Play:


La puedes descargar desde  Amazon:

Bluetooth Pro


Bluetooth pro es una nueva aplicación que permite la comunicación de su dispositivo Android con cualquier microcontrolador o dispositivo electrónico.
Recibe y transmite mensaje como un Chat entre su dispositivo Android y su dispositivo electrónico. Bluetooth Pro puede leer los mensajes que envías. Bluetooth pro permite enviar y recibir caracteres alfabéticos y numéricos para realizar el control de su dispositivo electrónicos y microcontroladores a través de la comunicación Bluetooth. 
Los mensajes enviados desde el microcontrolador deben terminar con salto de línea ’\n’. La aplicación Bluetooth Pro es muy fácil de utilizar.



La puedes descargar desde Google Play:


La puedes descargar desde  Amazon:



para probarla utilizando un sistema arduino puedes probar el siguiente código:

#include <LiquidCrystal.h>
//String mensaje,mensaje3;
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 12); // RX, TX
LiquidCrystal lcd(8, 9, 4,5, 6,7);
char inChar;
String dato="";
boolean sw=false;
int ranNum;
 int sw2=100;
void setup()
{
  
  // put your setup code here, to run once:
  lcd.begin(20, 4);
  // Print a message to the LCD.
  lcd.setCursor(0,0);
  lcd.print("RX/TX Bluetooth");
   mySerial.begin(9600);
  


}

void loop ()
{
   while (mySerial.available() > 0)
    {
   inChar= mySerial.read();
   dato=dato+inChar;
   lcd.setCursor(0,1);
   //lcd.print("Recibiendo=");
   //lcd.setCursor(13,1);
    lcd.print(dato);
    sw=true;
    
    
    }
    if (sw==true)
    {
     
      
      randomSeed(millis());
      sw2=random(0,5);
   
      
      sw=false;
      mySerial.println("excelente Comunicacion con Arduino");
      delay(200);
    }
    dato="";
}





miércoles, 24 de febrero de 2016

Micro Controladores PIC. Modulación PWM. Control Remoto de Motor

Control de Velocidad  y de Giro de un Motor de manera remota mediante el uso de un Micro controlador PIC  haciendo uso de la modulación PWM



Para controlar el Motor de manera remota pueden descargar la aplicaron  RC Bluetooth Control desde:

Google PLay:


Amazon:


Para realizar el control del motor mediante comando de voz pueden descargar  la aplicación RC Bluetooth PRO desde :

Google Play:


Amazon:


Pueden Descargar el código para programar el PIC :


//#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen

// CONFIGURACIÓN DE LOS FUSES PAR EL ROGAMADO Y VELOCIDAD DEL CRISRTAL
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT

// CONFIGURACIÒN VELOCIDAD DL RELOJ DEL MICROCONTROLADO
#use delay (clock = 20M )
#use fast_io(c)
// CONFIGURACIÓN VELOCIDAD DE TRANSMISIÓN SRAL Y OS PINESD TXXXY RX
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)

// PRIORIDAD A LAS INTERRUPCIONES
#priority rda,timer1,ad
// BIBLOTECA MODIFCADA DE LCD.H PARA QUE TRABAJE CONEL PUERTO D
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>

// CONFIGURACION DE LOS PUERTOS
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84

// VARIABLE QUE CAPTURA EL CARACTER QUE SE ENVÍA POR TRANSMISION SERIAL DESDE EL TELEFONO O TABLET
char valor='$';
// VARIABLE QUE INDICA SI SE RECIBIO UN CARACTER SW=1 Y SI NO SE RECIBIO CARACTERES SW=0
int sw=0;
// STRING DEL MENSAJE DEL PIC
char dato[30]="PIC Rx=";
// STRING DEL MENSAJE DEL PIC QUE SE TRANSMITEPOR EL PUERTO SERIAL
char mensajeTx [12];
// VARIABLE PARA LA VELOCIDAD DEL MOTOR
INT velMotor=255;
// VARIABLES SENTIDO DEL GIRO
int izqMotor=0,derMotor=0;

//INTERRUPCION SI SE RECIBE POR EL PUERTO SERIAL

#INT_RDA //RS232 receive data available
void  recibido()
{
// CAPTURA EL CARATCTER QUE SE RECIBE POR TRANSMISION SERIAL
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;

}
}

void main ()

{
int i;
  Setup_adc_ports(NO_ANALOGS);
  lcd_init();
  set_tris_a(0b00000000);
  set_tris_b(0b00000000);
  set_tris_c(0b10000000);
  set_tris_d(0b00000000);
  output_low(PIN_C2); //CCP1
  setup_ccp1(CCP_PWM);
  setup_ccp2(CCP_PWM);
  setup_timer_2(T2_DIV_BY_1, 255, 1);
  lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc,"Modulacion PWM");
 output_a(0xFF);
 enable_interrupts(GLOBAL);
  enable_interrupts(INT_RDA);
 
  // Apago los LED conevatados al Puerto A
  output_a (255);
while(true)
{



switch(valor)
{
//SELECCIONAMOS LA VELOCIDAD DE GIRO DEL MOTOR

           case '9': velMotor=255;
           break;
           case '8': velMotor=226;
           break;
           case '7': velMotor=199;
           break;
           case '6': velMotor=170;
           break;
           case '5': velMotor=142;
           break;
           case '4': velMotor=114;
           break;
           case '3': velMotor=85;
           break;
           case '2': velMotor=57;
           break;
           case '1': velMotor=28;
           break;
           case '0': velMotor=0;
           break;
           // SELECCIONAMOS EL SENTIDO DE GIRO
case 'R': izqMotor=0;
         derMotor=velMotor;
         output_bit(PIN_A1,0);
         output_bit(PIN_A2,255);
         output_bit(PIN_A3,255);
           break;

case 'L': izqMotor=velMotor;
         derMotor=0;
         output_bit(PIN_A1,255);
         output_bit(PIN_A2,0);
         output_bit(PIN_A3,255);
           break;
           // SELECCIONAMOS APAGAR EL MOTOR
case 'X': izqMotor=0;
         derMotor=0;
         output_bit(PIN_A1,255);
         output_bit(PIN_A2,255);
         output_bit(PIN_A3,0);
           break;
case 'x': izqMotor=0;
         derMotor=0;
         output_bit(PIN_A1,255);
         output_bit(PIN_A2,255);
         output_bit(PIN_A3,0);
           break;
}


//EL MOTOE GIRA EN FUNCION DEL CARACTER RECIBIDO    
set_pwm2_duty(izqMotor);
set_pwm1_duty(derMotor);

// SE IMPRIME EL CARACTER RECIBIDO EN PANTALLA Y SE TRANSMITE UN MENSAJE POR EL PUERTO SERIAL

if (sw==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"%S %c","Recibido=",valor);
sprintf(mensajeTX,"%s %c",dato,valor);
puts(mensajeTx);
sw=0;
//valor='$';
}



 // SE INICIALIZA LA VARIABLE RECIBIDA    

     
     

}


}

jueves, 18 de febrero de 2016

Osciloscopio Digital con Micro Controladores PIC

Diseño de un Osciloscopio Digital Bluetooth mediante el uso de Micro Controladores PIC y el uso de dispositivos móviles Teléfonos y Tabletas como un osciloscopio Digital remoto que nos permite visualizar los procesos que realizamos con nuestro sistemas de micro controladores. Mediante este diseño transformamos nuestro teléfono y tableta electrónica en un osciloscopio digital.



El programa que requerimos instalar en nuestros dispositivos móviles es gratuito y lo podemos descargar desde:

OSCILOSCOPIO BLUETOOTH  GOOGLE PLAY:



OSCILOSCOPIO BLUETOOTH AMAZON:


Pueden descargar el cogido fuente para programar el PIC :


//#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock = 20M )
#use fast_io(c)
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)
#priority rda,timer1,ad
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84


char valor,car1='$',car2='#';
int sw=0;
char dato[30]="";
char mensajeTx [12];
float conversion,conv=0.00;
#int_rda
recibir()
{
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;

}
}

#INT_AD
ver()
{


}



void main ()

{

  //Setup_adc_ports(NO_ANALOGS);
  lcd_init();
  set_tris_a(0b00000001);
  set_tris_b(0b00000000);
  set_tris_c(0b10000000);
  set_tris_d(0b00000000);

  lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc,"Osciloscopio BTH");
 output_a(0xFF);
 setup_adc_ports(AN0_ANALOG);
 setup_adc(ADC_CLOCK_DIV_8);
 enable_interrupts(INT_AD);
 enable_interrupts(int_rda);
 enable_interrupts(global);
while(true)
{

set_adc_channel (0);
delay_us (10);
conversion=read_ADC();
conversion=conversion*0.0196;
delay_us (10);
sprintf(dato,"%c%1.2f%1.2f%c",car1,conversion,conv,car2);
puts(dato);
lcd_gotoxy(0,2);
 printf(lcd_putc,dato);
 delay_us(100);
 strcpy(dato,"");
}


}


sábado, 6 de febrero de 2016

Microcontroladores PIC Comunicación Bluetooth Bi direcional

Vídeo que nos enseña como realizar comunicaciones inalambricas  con los microcontroladores PIC mediante el uso de la tecnología  Bluetooth. En el vídeo se enseña el control del microcontroldor mediante el uso de dispositivos móviles .teléfonos y tabletas electrónicas.

Para el control del microconttolador deben descargar las aplicaciones:

RC Bluetooth Control desde Google PLay:



Desde Amazon:


Deben descargar la aplicación Chat Bluetooth:

Desde Google Play:


Desde Amazon:


En el siguiente  vídeo se explica como realizar la programación del microcontrolador PIC:



 El código para programar el PIC es el siguiente:


 //#include <16f877A.h>
#include <18F4550.h>
#device ADC=8
//#fuses HS,nowdt,noprotect,nolvp,nodebug,usbdiv,pll5,cpudiv2,vregen
#fuses HS,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
//#fuses NOWDT,XT, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#use delay (clock = 20M )
#use fast_io(c)
#use rs232(baud=9600,bits=8,parity=n,xmit=pin_c6,rcv=pin_c7)
#priority rda,timer1,ad
#include <LCD4x16_2016.c>
//#include <LCD4x16_877A.c>
#byte PUERTO_A=0xf80
#byte PUERTO_B=0xf81
#byte PUERTO_C=0xf82
#byte PUERTO_D=0xf83
#byte PUERTO_E=0xf84


char valor;
int sw=0;
char dato[30]="PIC Rx=";
char mensajeTx [12];


void main ()

{

  Setup_adc_ports(NO_ANALOGS);
  lcd_init();
  set_tris_a(0b00000000);
  set_tris_b(0b00000000);
  set_tris_c(0b10000000);
  set_tris_d(0b00000000);
 
  lcd_init();
 lcd_gotoxy(1,1);
 printf(lcd_putc,"TX/RX Bluetooth");
 output_a(0xFF);
while(true)
{
while ( kbhit())
{
valor=getc();//recibe el dato del pc y lo guarda en valor
sw=1;

}

switch (valor)
{

case 'R':output_bit(PIN_A0,0);
output_bit(PIN_A1,1);
output_bit(PIN_A2,1);

break;
case 'U':output_bit(PIN_A0,1);
output_bit(PIN_A1,0);
output_bit(PIN_A2,1);
break;
case 'L':output_bit(PIN_A0,1);
output_bit(PIN_A1,1);
output_bit(PIN_A2,0);
break;
case 'X':output_bit(PIN_A0,1);
output_bit(PIN_A1,1);
output_bit(PIN_A2,1);
break;


}

if (sw==1)
{
lcd_gotoxy(1,2);
printf(lcd_putc,"%S %c","Recibido=",valor);
sprintf(mensajeTX,"%s %c",dato,valor);
puts(mensajeTx);
sw=0;
}


}


}


miércoles, 27 de enero de 2016

Transmisión Bluetooth Con Micro Controladores

En el siguiente vídeo se  explica como realizar transmisiones remotas desde nuestro teléfono o tablet  hacia un micro controlador mediante el uso de Bluetooth. Para ello debemos descargar la aplicaciòn gratuita RC Bluetooth desde Google Play o Amazon.




Para observar como debemos programar nuestro micro controlador debemos visualizar el siguiente vídeo


Diseño de Generador de Funciones con Micro Controlador

En este tutorial aprenderemos a diseñar un Generado de Funciones mediante el uso de un  micro controlador. El micro controlador a utilizar será el Arduino pero puede ser usado cualquier micro controlador.  Las aplicaciones que se requieren para el proyecto la pueden descargar gratuitamente desde Google Play y Amazon.

Para controlar remotamente el generador de funciones desde nuestro teléfono o tablet  debemos descargar la  aplicación RC Bluetooth Control la cual descargamos desde Google Play:


  La podemos descargar desde Amazon:


Para visualizar las señales generadas podemos usar un osciloscopio, sino lo tenemos podemos convertir nuestra tablet o teléfono en un osciloscopio . Para ello debemos descargar de manera gratuita la aplicación Osciloscopio  desde Google Play:


La podemos descargar desde Amazon:


Una vez que hemos descargado las aplicaciones  e instaladas en nuestros teléfonos y Tablet, podemos visualizar el siguiente vídeo, donde se explica detalladamente el diseño del Generador de Funciones:


El programa para ser cargado en nuestro arduino es el siguiente:

// include the library code:
#include <LiquidCrystal.h>
#include <TinyGPS.h>
//String mensaje,mensaje3;
#include <SoftwareSerial.h>
SoftwareSerial mySerial(11, 12); // RX, TX
char inChar;
int sw=0;
int sine[255];


void setup() {

  
  //Serial.begin(9600);

     pinMode(0, OUTPUT); 
     pinMode(1, OUTPUT); 
     pinMode(2, OUTPUT); 
     pinMode(3, OUTPUT); 
     pinMode(4, OUTPUT);
     pinMode(5, OUTPUT);
     pinMode(6, OUTPUT); 
     pinMode(7, OUTPUT);
     float x; 
     float y; 
     for(int i=0;i<255;i++)
     {
          x=(float)i;
          y=sin((x/255)*2*PI);
          sine[i]=int(y*128)+128;
     }
  mySerial.begin(9600);

}

void loop() { 
  
    while (mySerial.available() > 0)
    {
       inChar =mySerial.read();
       //Serial.println(inChar);
       switch (inChar)
       {
        //Onda Tiangular
        case 'U' :sw=1;
        break;
        //Onda Rampa Poitiva
        case 'E' :sw=2;
        break;
        //Onda Negativa
        case 'R': sw=3;
        break; 
        // OndaSeno
        case 'C': sw=4;
        break;       
       }
       //Serial.println(sw);       
     }

     switch (sw)
     {
       case 1:for (int i=0;i<255;i++) 
     { 
          PORTD=i;
     } 
     for (int i=255;i>0;i--) 
     { 
          PORTD=i;
     }
       break;
       case 2:for (int i=0;i<255;i++) 
     { 
          PORTD=i;
     } 
       break; 
       case 3: for (int i=255;i>0;i--) 
     { 
          PORTD=i;
     }
       break;
        case 4:for (int i=0;i<255;i++) 
     { 
          PORTD=sine[i]; 
          delayMicroseconds(10); 
     }
       break;
       
      
     
     }

}