Raspberry

Dependencies:   mbed Servo TextLCD FastPWM

main.cpp

Committer:
20172573007
Date:
2020-07-22
Revision:
0:c3f67c2fe92d

File content as of revision 0:c3f67c2fe92d:

/* mbed Microcontroller Library
 * Copyright (c) 2018 ARM Limited
 * SPDX-License-Identifier: Apache-2.0
 */
//librerias
#include "mbed.h"
#include "Servo.h"
#include "TextLCD.h"
#include <FastPWM.h>

//pines
Servo myservo(PTE20);
PwmOut mypwm(PTA5);
Serial pc(USBTX, USBRX);
TextLCD lcd(PTB8,PTB9,PTB10,PTB11,PTE2,PTE3,TextLCD::LCD16x2);
//algunas variables
int l=0;
float range = 0.0005;
float position = 0.5;
int dato6,dato3,dato4,dato5,dato;
char dato1,dato2;
int flag=0;

void servo()
{
    switch(pc.getc()) {
         case 'l':
           // dato1=pc.getc();//datos char
    dato2=pc.getc();//datos char
    dato3=pc.getc();//datos enteros recibidos en codigo ASCII
    dato4=pc.getc();//datos enteros recibidos en codigo ASCII
    dato5=pc.getc();//datos enteros recibidos en codigo ASCII
    dato6=pc.getc();//datos enteros recibidos en codigo ASCII
    if(dato2=='A'){//numero de dos digitos
                    dato=(dato3-48)*10+dato4-48;
                }else{//numero de tres digitos(recomendacion enviar @ ).
                    dato=(dato3-48)*100+(dato4-48)*10+dato5-48;
                }
                l=dato;
            break;
        case 'c':
           // dato1=pc.getc();//datos char
    dato2=pc.getc();//datos char
    dato3=pc.getc();//datos enteros recibidos en codigo ASCII
    dato4=pc.getc();//datos enteros recibidos en codigo ASCII
    dato5=pc.getc();//datos enteros recibidos en codigo ASCII
    dato6=pc.getc();//datos enteros recibidos en codigo ASCII
    if(dato2=='A'){//numero de dos digitos
                    dato=(dato3-48)*10+dato4-48;
                }else{//numero de tres digitos(recomendacion enviar @ ).
                    dato=(dato3-48)*100+(dato4-48)*10+dato5-48;
                }
                lcd.cls();// borrar antes de mostrar el dato. 
                 lcd.locate(0,1); //(columna, fila)
                lcd.printf("slider %d ",dato);//se imprime el dato de la comunicacion serial.
              
            break;
        case 'd':
            position = 0.0;
            break;
        case 'w':
            position = 0.5;
            break;
        case 'a':
            position = 1.0;
            break;
        case 'e':
            range += 0.0001;
            break;
        case 'q':
            range -= 0.0001;
            break;
    }
    printf("position = %.1f, range = +/-%0.4f\n", position, range);
    myservo.calibrate(range, 45.0);
    myservo = position;
    lcd.locate(3,0);
    
}


void led ()
{
   
   mypwm.period_us(5000); //20khz (estandar)
  mypwm.write(l*0.01); 
 // mypwm.pulsewidth(1);
    //  mypwm.write(i); //duty cycle entre cero y uno
   // mypwm.write(100/100); //(entrada%*0.01) duty cycle is sense in percentage since 0 to 100  
}
int main()
{
    
    printf("Servo Calibration Controls:\n");
    printf("1,2,3 - Position Servo (full left, middle, full right)\n");
    printf("4,5 - Decrease or Increase range\n");
    while(1) {
           
          led();
       servo();
    }
}