Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
main.cpp@3:7eb93419c1e8, 2020-02-22 (annotated)
- Committer:
- rperoba
- Date:
- Sat Feb 22 12:53:47 2020 +0000
- Revision:
- 3:7eb93419c1e8
- Parent:
- 2:e66266d2c51f
- Child:
- 4:4e2761eb8b22
Mudei o mode pra none , o que conseguimos fazer rodar encostando o dedo no sensor, e esta com o print de todos os sensores;
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| rperoba | 0:3af2fc20e7c1 | 1 | #include "mbed.h" |
| rperoba | 0:3af2fc20e7c1 | 2 | |
| rperoba | 0:3af2fc20e7c1 | 3 | // Código para testar os sensores de linha,lendo através do tempo de decaimento do sensor e utilizando o multiplexador |
| rperoba | 3:7eb93419c1e8 | 4 | #define threshold 30000 // parametro que diferencia a leitura do branco pro preto |
| rperoba | 1:d45444439ccb | 5 | Serial bt (USBTX,USBRX); |
| rperoba | 0:3af2fc20e7c1 | 6 | |
| rperoba | 1:d45444439ccb | 7 | PwmOut pwm(p25); |
| rperoba | 1:d45444439ccb | 8 | DigitalOut dir (p26); |
| rperoba | 1:d45444439ccb | 9 | PwmOut pwm1(p24); |
| rperoba | 1:d45444439ccb | 10 | DigitalOut dir1 (p23); |
| rperoba | 3:7eb93419c1e8 | 11 | |
| rperoba | 0:3af2fc20e7c1 | 12 | DigitalOut multiplexador1(p5); // portas do multiplexador que selecionam o sensor de linha |
| rperoba | 0:3af2fc20e7c1 | 13 | DigitalOut multiplexador2(p6); |
| rperoba | 3:7eb93419c1e8 | 14 | DigitalOut multiplexador3(p8); // PRECISA AJUSTAR OS PINOS |
| rperoba | 3:7eb93419c1e8 | 15 | DigitalOut multiplexador4(p7); |
| rperoba | 1:d45444439ccb | 16 | //DigitalOut multiplexador5(p9);// Enable do multiplexador |
| rperoba | 3:7eb93419c1e8 | 17 | DigitalInOut multiplexadorInOut(p12); // In/Out do multiplexador |
| rperoba | 1:d45444439ccb | 18 | |
| rperoba | 0:3af2fc20e7c1 | 19 | int tabelaVerdade1[16] = {0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1}; // Arrays para selecionar o sensor de linha na função sensorCheck |
| rperoba | 0:3af2fc20e7c1 | 20 | int tabelaVerdade2[16] = {0,0,1,1,0,0,1,1,0,0,1,1,0,0,1,1}; |
| rperoba | 0:3af2fc20e7c1 | 21 | int tabelaVerdade3[16] = {0,0,0,0,1,1,1,1,0,0,0,0,1,1,1,1}; |
| rperoba | 0:3af2fc20e7c1 | 22 | int tabelaVerdade4[16] = {0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1}; |
| rperoba | 1:d45444439ccb | 23 | |
| rperoba | 0:3af2fc20e7c1 | 24 | Timer tempoDoSensor; // timer para leitura do sensor de linha |
| rperoba | 0:3af2fc20e7c1 | 25 | |
| rperoba | 3:7eb93419c1e8 | 26 | void Setup_Sensores (void){ //Define o modo de cada sensor |
| rperoba | 3:7eb93419c1e8 | 27 | |
| rperoba | 1:d45444439ccb | 28 | |
| rperoba | 3:7eb93419c1e8 | 29 | multiplexadorInOut.mode(PullNone); |
| rperoba | 3:7eb93419c1e8 | 30 | multiplexadorInOut.input(); |
| rperoba | 3:7eb93419c1e8 | 31 | bt.printf("Status do Sensor iniciando: %d ", multiplexadorInOut.read()); |
| rperoba | 3:7eb93419c1e8 | 32 | multiplexadorInOut.output(); |
| rperoba | 3:7eb93419c1e8 | 33 | multiplexadorInOut = 0; |
| rperoba | 3:7eb93419c1e8 | 34 | wait_ms(10); |
| rperoba | 3:7eb93419c1e8 | 35 | multiplexadorInOut.input(); |
| rperoba | 3:7eb93419c1e8 | 36 | bt.printf("Status do SensorLOW: %d ", multiplexadorInOut.read()); |
| rperoba | 3:7eb93419c1e8 | 37 | multiplexadorInOut.output(); |
| rperoba | 3:7eb93419c1e8 | 38 | multiplexadorInOut = 1; |
| rperoba | 3:7eb93419c1e8 | 39 | wait_ms(10); |
| rperoba | 3:7eb93419c1e8 | 40 | multiplexadorInOut.input(); |
| rperoba | 3:7eb93419c1e8 | 41 | bt.printf("Status do SensorHIGH: %d ", multiplexadorInOut.read()); |
| rperoba | 3:7eb93419c1e8 | 42 | multiplexadorInOut.output(); |
| rperoba | 3:7eb93419c1e8 | 43 | multiplexadorInOut = 0; |
| rperoba | 3:7eb93419c1e8 | 44 | wait_ms(10); |
| rperoba | 3:7eb93419c1e8 | 45 | multiplexadorInOut.input(); |
| rperoba | 3:7eb93419c1e8 | 46 | bt.printf("Status do SensorLOW: %d ", multiplexadorInOut.read()); |
| rperoba | 1:d45444439ccb | 47 | } |
| rperoba | 1:d45444439ccb | 48 | |
| rperoba | 1:d45444439ccb | 49 | |
| rperoba | 1:d45444439ccb | 50 | |
| rperoba | 0:3af2fc20e7c1 | 51 | bool sensorCheck(int sensor){// int sensor é qual sensor se deseja ler,entre 0 a 15 |
| rperoba | 0:3af2fc20e7c1 | 52 | // função para ler os motores,retorna true se for branco e false se for preto |
| rperoba | 1:d45444439ccb | 53 | |
| rperoba | 0:3af2fc20e7c1 | 54 | multiplexador1.write(tabelaVerdade1[sensor]); // selecionando o sensor |
| rperoba | 0:3af2fc20e7c1 | 55 | multiplexador2.write(tabelaVerdade2[sensor]); |
| rperoba | 0:3af2fc20e7c1 | 56 | multiplexador3.write(tabelaVerdade3[sensor]); |
| rperoba | 0:3af2fc20e7c1 | 57 | multiplexador4.write(tabelaVerdade4[sensor]); |
| rperoba | 3:7eb93419c1e8 | 58 | //bt.printf("Status do Sensor entrando no check: %d ", multiplexadorInOut.read()); |
| rperoba | 0:3af2fc20e7c1 | 59 | multiplexadorInOut.output(); // colocando o InOut como Out |
| rperoba | 3:7eb93419c1e8 | 60 | multiplexadorInOut = 1; // levando ele a high por pelo menos 10 microssegundos |
| rperoba | 0:3af2fc20e7c1 | 61 | |
| rperoba | 0:3af2fc20e7c1 | 62 | tempoDoSensor.start(); // iniciando o contador |
| rperoba | 3:7eb93419c1e8 | 63 | |
| rperoba | 3:7eb93419c1e8 | 64 | wait_ms(10); // tempo para o output ir para high |
| rperoba | 3:7eb93419c1e8 | 65 | |
| rperoba | 0:3af2fc20e7c1 | 66 | multiplexadorInOut.input(); // colocando o InOut como In |
| rperoba | 3:7eb93419c1e8 | 67 | //bt.printf("Status do Sensor supostamente em HIGH: %d ", multiplexadorInOut.read()); |
| rperoba | 3:7eb93419c1e8 | 68 | |
| rperoba | 3:7eb93419c1e8 | 69 | while(multiplexadorInOut == 1){// enrolando enquanto o sensor esta lendo |
| rperoba | 3:7eb93419c1e8 | 70 | //bt.printf("To no loop ->"); |
| rperoba | 3:7eb93419c1e8 | 71 | //bt.printf("Status do Sensor: %d ", multiplexadorInOut.read()); |
| rperoba | 3:7eb93419c1e8 | 72 | |
| rperoba | 3:7eb93419c1e8 | 73 | if (tempoDoSensor.read_us() >= threshold){// termina o while se o tempo for maior que o threshold,agilizando o processo de leitura |
| rperoba | 0:3af2fc20e7c1 | 74 | tempoDoSensor.stop(); |
| rperoba | 3:7eb93419c1e8 | 75 | bt.printf("To no if ->"); |
| rperoba | 3:7eb93419c1e8 | 76 | float tempoDeLeitura = tempoDoSensor.read_us(); |
| rperoba | 1:d45444439ccb | 77 | bt.printf ("Tempo de leitura :%f \n\r ",tempoDeLeitura); // debug |
| rperoba | 1:d45444439ccb | 78 | tempoDoSensor.reset(); |
| rperoba | 3:7eb93419c1e8 | 79 | multiplexadorInOut.output(); |
| rperoba | 3:7eb93419c1e8 | 80 | multiplexadorInOut = 0; |
| rperoba | 0:3af2fc20e7c1 | 81 | return false; // retorna quando for preto |
| rperoba | 2:e66266d2c51f | 82 | } |
| rperoba | 2:e66266d2c51f | 83 | |
| rperoba | 0:3af2fc20e7c1 | 84 | } |
| rperoba | 0:3af2fc20e7c1 | 85 | tempoDoSensor.stop(); |
| rperoba | 1:d45444439ccb | 86 | float tempoDeLeitura = tempoDoSensor.read_us(); |
| rperoba | 1:d45444439ccb | 87 | bt.printf ("Tempo de leitura :%f \n\r ",tempoDeLeitura); // debug |
| rperoba | 0:3af2fc20e7c1 | 88 | tempoDoSensor.reset(); |
| rperoba | 3:7eb93419c1e8 | 89 | multiplexadorInOut.output(); |
| rperoba | 3:7eb93419c1e8 | 90 | multiplexadorInOut = 0; |
| rperoba | 0:3af2fc20e7c1 | 91 | return true;// retorna quando for branco |
| rperoba | 0:3af2fc20e7c1 | 92 | } |
| rperoba | 1:d45444439ccb | 93 | void Final_Stop(){ dir = 0; dir1 = 0; pwm.write(0); pwm1.write(0); } //Função de parada do LF depois do percurso |
| rperoba | 0:3af2fc20e7c1 | 94 | |
| rperoba | 0:3af2fc20e7c1 | 95 | int main() { |
| rperoba | 1:d45444439ccb | 96 | Setup_Sensores(); |
| rperoba | 1:d45444439ccb | 97 | while(1){ |
| rperoba | 1:d45444439ccb | 98 | Final_Stop(); |
| rperoba | 3:7eb93419c1e8 | 99 | //bt.printf("Iniciando a leitura de sensores: "); |
| rperoba | 3:7eb93419c1e8 | 100 | bool tempoSensor0 = sensorCheck(0); // le e printa sensor 0 |
| rperoba | 3:7eb93419c1e8 | 101 | bt.printf("Sensor 0:%d -> ",tempoSensor0); |
| rperoba | 3:7eb93419c1e8 | 102 | bool tempoSensor1 = sensorCheck(1); // le e printa sensor 1 |
| rperoba | 3:7eb93419c1e8 | 103 | bt.printf("Sensor 1:%d\n\r",tempoSensor1); |
| rperoba | 3:7eb93419c1e8 | 104 | bool tempoSensor2 = sensorCheck(2); // le e printa sensor 2 |
| rperoba | 3:7eb93419c1e8 | 105 | bt.printf("Sensor 2:%d\n\r",tempoSensor2); |
| rperoba | 3:7eb93419c1e8 | 106 | bool tempoSensor3 = sensorCheck(3); // le e printa sensor 3 |
| rperoba | 3:7eb93419c1e8 | 107 | bt.printf("Sensor 3:%d\n\r",tempoSensor3); |
| rperoba | 1:d45444439ccb | 108 | bool tempoSensor4 = sensorCheck(4); // le e printa sensor 4 |
| rperoba | 1:d45444439ccb | 109 | bt.printf("Sensor 4:%d\n\r",tempoSensor4); |
| rperoba | 1:d45444439ccb | 110 | bool tempoSensor5 = sensorCheck(5); // le e printa sensor 5 |
| rperoba | 1:d45444439ccb | 111 | bt.printf("Sensor 5:%d\n\r",tempoSensor5); |
| rperoba | 1:d45444439ccb | 112 | bool tempoSensor6 = sensorCheck(6); // le e printa sensor 6 |
| rperoba | 3:7eb93419c1e8 | 113 | bt.printf("Sensor 6:%d\n\r",tempoSensor6); |
| rperoba | 1:d45444439ccb | 114 | bool tempoSensor7 = sensorCheck(7); // le e printa sensor 7 |
| rperoba | 1:d45444439ccb | 115 | bt.printf("Sensor 7:%d\n\r",tempoSensor7); |
| rperoba | 3:7eb93419c1e8 | 116 | |
| rperoba | 1:d45444439ccb | 117 | } |
| rperoba | 1:d45444439ccb | 118 | |
| rperoba | 0:3af2fc20e7c1 | 119 | } |