Enrico Aloisi Nardi / Mbed 2 deprecated conversor_dac

Dependencies:   mbed

Committer:
enricoan
Date:
Tue Jun 09 12:45:33 2020 +0000
Revision:
11:d3e72f8d05cd
Parent:
8:20afab089ff8
Child:
12:415818832707
alguns comentarios adicionados

Who changed what in which revision?

UserRevisionLine numberNew contents of line
enricoan 0:f2560180665b 1 #include "mbed.h"
enricoan 1:d05e46c73155 2 #include <math.h>
enricoan 11:d3e72f8d05cd 3 #define PI 3.14159265
amandarm 2:8e9dbb7523e7 4 BusOut saida_digital (D2,D3,D4);
enricoan 11:d3e72f8d05cd 5 InterruptIn botao_usuario(PC_13); //definição do botao do usuário como pino de interrupção para, independentemente do que estiver acontecendo, o programa mudar de um tipo de onda para o outro
amandarm 2:8e9dbb7523e7 6 AnalogIn leitura_an(A0);
enricoan 0:f2560180665b 7
enricoan 0:f2560180665b 8 Serial pc(USBTX, USBRX);
enricoan 0:f2560180665b 9 float valor;
amandarm 5:436b7d88a92d 10 int estado_botao;
enricoan 11:d3e72f8d05cd 11 float tempo = 0.5;
enricoan 11:d3e72f8d05cd 12 //array de valores que será enviado para os pinos "saida digital"
amandarm 2:8e9dbb7523e7 13 int SEQUENCIA[8]={
amandarm 2:8e9dbb7523e7 14 0b000,
amandarm 2:8e9dbb7523e7 15 0b001,
amandarm 2:8e9dbb7523e7 16 0b010,
amandarm 2:8e9dbb7523e7 17 0b011,
amandarm 2:8e9dbb7523e7 18 0b100,
amandarm 2:8e9dbb7523e7 19 0b101,
amandarm 2:8e9dbb7523e7 20 0b110,
amandarm 2:8e9dbb7523e7 21 0b111
amandarm 2:8e9dbb7523e7 22 };
amandarm 7:f69e1333449d 23 void funcao_botao(){
amandarm 7:f69e1333449d 24 if (estado_botao < 4){
amandarm 7:f69e1333449d 25 estado_botao++;
amandarm 7:f69e1333449d 26 }
amandarm 7:f69e1333449d 27 else{
amandarm 7:f69e1333449d 28 estado_botao = 0;
amandarm 7:f69e1333449d 29 }
amandarm 7:f69e1333449d 30 }
amandarm 2:8e9dbb7523e7 31
enricoan 0:f2560180665b 32 int main(){
enricoan 11:d3e72f8d05cd 33 estado_botao=0; //inicialização da variável estado_botao para que o gerador sempre comece como um gerador de onda quadrada
enricoan 11:d3e72f8d05cd 34 pc.baud(9600);//indicação do número de vezes que o canal de leitura do monitor serial poderá mudar de estado até 9600 vezes
enricoan 0:f2560180665b 35 while(1){
enricoan 11:d3e72f8d05cd 36 botao_usuario.fall(&funcao_botao); //chamada da função de interrupção dada uma descida no estado do botão do usuário
enricoan 11:d3e72f8d05cd 37 //Onda quadrada
enricoan 11:d3e72f8d05cd 38 if(estado_botao == 0){//teste do valor da variável estado_botao para determinar qual onda será a saída do gerador
enricoan 11:d3e72f8d05cd 39 for (int i=0; i<8; i++) { //laço para repetir o comando de envio do nível lógico enquanto o contador for menor que 8 (valor atrelado ao fato de que temos um conversor de 3 bits)
amandarm 5:436b7d88a92d 40 saida_digital = 0b111;
amandarm 5:436b7d88a92d 41 valor=leitura_an.read();
amandarm 5:436b7d88a92d 42 pc.printf("\r\t%1.3f\n",valor);
enricoan 11:d3e72f8d05cd 43 wait(tempo);}
enricoan 11:d3e72f8d05cd 44
amandarm 6:e8afe3e31edb 45 for (int i=8; i>0; i--) {
amandarm 5:436b7d88a92d 46 saida_digital = 0b000;
amandarm 6:e8afe3e31edb 47 valor=leitura_an.read();
amandarm 6:e8afe3e31edb 48 pc.printf("\r\t%1.3f\n",valor);
enricoan 11:d3e72f8d05cd 49 wait(tempo);}
enricoan 0:f2560180665b 50 }
enricoan 11:d3e72f8d05cd 51
enricoan 11:d3e72f8d05cd 52 //Onda rampa
enricoan 11:d3e72f8d05cd 53 else if (estado_botao == 1){//teste do valor da variável estado_botao para determinar qual onda será a saída do gerador
amandarm 5:436b7d88a92d 54 for (int i=0; i<8; i++) {
amandarm 5:436b7d88a92d 55 saida_digital = SEQUENCIA[i];
amandarm 5:436b7d88a92d 56 valor=leitura_an.read();
amandarm 5:436b7d88a92d 57 pc.printf("\r\t%1.3f\n",valor);
enricoan 11:d3e72f8d05cd 58 wait(tempo);}
amandarm 5:436b7d88a92d 59 }
enricoan 11:d3e72f8d05cd 60
enricoan 11:d3e72f8d05cd 61 //Onda triangular
enricoan 11:d3e72f8d05cd 62 else if (estado_botao == 2){//teste do valor da variável estado_botao para determinar qual onda será a saída do gerador
amandarm 5:436b7d88a92d 63 for (int i=0; i<8; i++) {
amandarm 5:436b7d88a92d 64 saida_digital = SEQUENCIA[i];
enricoan 11:d3e72f8d05cd 65 wait(tempo);
amandarm 5:436b7d88a92d 66 valor=leitura_an.read();
amandarm 7:f69e1333449d 67 pc.printf("\r\t%1.3f\n",valor);
amandarm 5:436b7d88a92d 68 }
amandarm 8:20afab089ff8 69 for (int i=7; i>0; i--) {
amandarm 5:436b7d88a92d 70 saida_digital = SEQUENCIA[i];
enricoan 11:d3e72f8d05cd 71 wait(tempo);
amandarm 5:436b7d88a92d 72 valor=leitura_an.read();
amandarm 7:f69e1333449d 73 pc.printf("\r\t%1.3f\n",valor);
amandarm 5:436b7d88a92d 74 }
amandarm 5:436b7d88a92d 75 }
enricoan 11:d3e72f8d05cd 76 //Onda senoidal
enricoan 11:d3e72f8d05cd 77 else if (estado_botao == 3){//teste do valor da variável estado_botao para determinar qual onda será a saída do gerador
enricoan 11:d3e72f8d05cd 78 for (int i=0; i<8; i++) {
enricoan 11:d3e72f8d05cd 79 saida_digital = SEQUENCIA[i];
enricoan 11:d3e72f8d05cd 80 wait(tempo);
enricoan 11:d3e72f8d05cd 81 valor=leitura_an.read();
enricoan 11:d3e72f8d05cd 82 pc.printf("\r\t%1.3f\n",valor);
enricoan 11:d3e72f8d05cd 83 }
enricoan 11:d3e72f8d05cd 84 for (int i=7; i>0; i--) {
enricoan 11:d3e72f8d05cd 85 saida_digital = SEQUENCIA[i];
enricoan 11:d3e72f8d05cd 86 wait(tempo);
enricoan 11:d3e72f8d05cd 87 valor=leitura_an.read();
enricoan 11:d3e72f8d05cd 88 pc.printf("\r\t%1.3f\n",valor);
enricoan 11:d3e72f8d05cd 89 }
enricoan 11:d3e72f8d05cd 90 }
enricoan 11:d3e72f8d05cd 91
amandarm 2:8e9dbb7523e7 92
enricoan 11:d3e72f8d05cd 93 }//fim do while(1)
enricoan 11:d3e72f8d05cd 94 }//fim do int main()
enricoan 0:f2560180665b 95