Este programa se usa en recepcion de cadenas de caracteres, util para probar programas de conexion bluetooth en APPINVENTOR

Dependencies:   mbed

main.cpp

Committer:
tony63
Date:
2019-06-08
Revision:
2:7dcf65d8c0d1
Parent:
1:bf58c37db6af

File content as of revision 2:7dcf65d8c0d1:

//PROGRAMA PARA RECIBIR CARACTERES DESDE EL PC Y ACTIVAR 3 LEDS
//UTIL EN LECTURA DE CADENAS PARA APP INVENTOR
#include "mbed.h"
#include "stdio.h"
#include "string.h"
#include "stdlib.h"

 
Serial GSM(PTE0,PTE1);  //puertos del FRDM para el modem
Serial pc(USBTX,USBRX); //puertos del PC
char buffer[5];// TAMAÑO DEL BUFER
Timer t;   //VALOR DEL TIEMPO
int count;
int i = 0;
int c=0;
char r[]=""; 
char Qr[]="qmAIzQGtSK";
DigitalOut LedRojo(LED1);
DigitalOut LedVerde(LED2);
char s2[4];
char s1[4];
DigitalOut LedAzul(LED3);
PwmOut led(PTA13);
AnalogOut aout(PTE30);
char *cadena = "";
float pm; 
int readBuffer(char *buffer,int count)   //esta funcion lee un bufer de datos
{
    int i=0; 
    t.start();    //CUENTA EL TIEMPO DE CONEXION E INICIA
    while(1) {
        while (GSM.readable()) {
            char c = GSM.getc();
            if (c == '\r' || c == '\n') c = '$';//si se envia fin de linea o de caracter inserta $
            buffer[i++] = c;//mete al bufer el caracter leido
            if(i > count)break;//sale del loop si ya detecto terminacion
        }
        if(i > count)break;
        if(t.read() > 1) {  //MAS DE UN SEGUNDO DE ESPERA SE SALE Y REINICA EL RELOJ Y SE SALE
            t.stop();
            t.reset();
            break;
        }
    }
     return 0;
}

void cleanBuffer(char *buffer, int count)  //esta funcion limpia el bufer
{
    for(int i=0; i < count; i++) {
        buffer[i] = '\0';
    }
}

   
int main(void)
       { 
       LedVerde=1;
       LedRojo=1;
       LedAzul=1;
       LedVerde=0;
       wait(2);   //PRENDE EL LED VERDE POR 2 SEGUNDOS
       LedVerde=1;
       GSM.baud(9600);
       GSM.format(8,Serial::None,1);
       led.period(0.005f);      // 4 second period
       led.write(0.40f);      // 50% duty cycle, relative to period 
               
       while(1){ 
       if (GSM.readable()) {
          readBuffer(buffer,5);
          pc.printf("buffer= %s\n\r ",buffer);  //imprime el bufer
          pc.printf("buffer= %c  %c\n\r ",buffer[0],buffer[1]);//imprime el cero y el uno
          
          if(buffer[0]=='O' && buffer[1]=='N' && buffer[2]=='A' ){LedAzul=0;}  //PRENDE EL LED AZUL
          if(buffer[0]=='O' && buffer[1]=='F'&& buffer[2]=='A'){LedAzul=1;}  //APAGA EL LED AZUL
          
          if(buffer[0]=='O' && buffer[1]=='N' && buffer[2]=='V' ){LedVerde=0;}//PRENDE EL LED VERDE
          if(buffer[0]=='O' && buffer[1]=='F'&& buffer[2]=='V'){LedVerde=1;}  //APAGA EL LED VERDE
          
          if(buffer[0]=='O' && buffer[1]=='N' && buffer[2]=='R' ){LedRojo=0;}  //PRENDE EL LED ROJO
          if(buffer[0]=='O' && buffer[1]=='F'&& buffer[2]=='R'){LedRojo=1;}  //APAGA EL LED ROJO
          char *s2 = buffer;
          strcpy( s1, s2 );
          int num = atoi(s1);
          pm=num/100.0;
          led.write(pm);
          aout=pm;
          pc.printf("num= %d\n\r ",num);  //imprime el bufer
          pc.printf("pm= %f\n\r ",pm);  //imprime el bufer 
          cleanBuffer(buffer,5);   
          } 
          cleanBuffer(buffer,5);           
}
}

/*
char *cadena = "4856"; 
int num = atoi(cadena);

PwmOut led(PTA13);
DigitalOut myled(LED2);

int main() {
led.period(0.005f);  // 4 second period
led.write(0.40f);   


PwmOut led(LED1);
 
int main() {
    // specify period first
    led.period(4.0f);      // 4 second period
    led.write(0.50f);      // 50% duty cycle, relative to period
    
     stdlib.h
     char *str = "12345.67"; 

n = atoi(str); 
printf("string = %s integer = %d\n", str, n); 
 strcpy( s1, s2 );
    
*/