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: IOTON-API QEI USBDevice mbed-ton ton-bot
Fork of ton-bot_seguidor_linha by
main.cpp
00001 /** 00002 ****************************************************************************** 00003 * @file main.cpp 00004 * @author Kleber Lima da Silva (kleber@ioton.cc) 00005 * @version V0.0.1 00006 * @date 05-Julho-2017 00007 * @brief Programa de exemplo do Robô TON-BOT no modo seguidor de parede. 00008 ****************************************************************************** 00009 * @attention 00010 * 00011 * COPYRIGHT(c) 2017 IOTON Technology 00012 * 00013 * Licensed under the Apache License, Version 2.0 (the "License"); 00014 * you may not use this file except in compliance with the License. 00015 * You may obtain a copy of the License at 00016 * 00017 * http://www.apache.org/licenses/LICENSE-2.0 00018 * 00019 * Unless required by applicable law or agreed to in writing, software 00020 * distributed under the License is distributed on an "AS IS" BASIS, 00021 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 00022 * See the License for the specific language governing permissions and 00023 * limitations under the License. 00024 ****************************************************************************** 00025 */ 00026 00027 /* Includes ------------------------------------------------------------------*/ 00028 #include "main.h" 00029 00030 /** @addtogroup Seguidor de parede TON-BOT 00031 * @{ 00032 */ 00033 /* Constantes ----------------------------------------------------------------*/ 00034 #define ESQUERDA 1 00035 #define DIREITA 2 00036 00037 /* Variáveis privadas --------------------------------------------------------*/ 00038 Ticker timer1; 00039 bool bRodarControle = false; 00040 uint8_t seguidor = 0; 00041 uint8_t paredes = 0; 00042 float lf = 0, l = 0, r = 0, rf = 0; 00043 00044 /* Funções Privadas ----------------------------------------------------------*/ 00045 /* Callback do Timer 1 - Controle de Velocidade */ 00046 void callbackTimer1(void) 00047 { 00048 if (bRodarControle == true) 00049 { 00050 /* Realiza a leitura dos sensores */ 00051 paredes = getSensoresParede(&lf, &l, &r, &rf); 00052 00053 /* Realiza o controle de velocidade */ 00054 controleVelocidade(); 00055 } 00056 } 00057 00058 /** 00059 * @brief Programa Principal 00060 * @param Nenhum 00061 * @retval Nenhum 00062 */ 00063 int main(void) 00064 { 00065 /* Ligue o TON com o botão USER pressionado para indicar o estado da bateria */ 00066 if (ton.USERisPressed()) 00067 { 00068 /* Necessário pressionar o botão RESET voltar ao modo normal */ 00069 ton.batteryStatus(); 00070 } 00071 00072 /* Inicialização do robô... */ 00073 /* Calibrar os valores FRONTAL_TH e LATERAL_TH usando o ton-bot_teste, 00074 depois atualizar os valores no arquivo controlador.h */ 00075 ton.setLED(GREEN); 00076 initTonBot(PRETA, FRONTAL_TH, LATERAL_TH); 00077 00078 /* Inicio do programa ------------------------------------------------------*/ 00079 /* Será habilitado seguidor de parede esquerda ou direita de acordo com o 00080 respectivo sensor frontal acionado */ 00081 while ((getSensoresParede(&lf, &l, &r, &rf) & 0b010) == 0) 00082 { 00083 wait_ms(100); 00084 ton.toggleLED(RED); 00085 } 00086 seguidor = (lf > rf) ? ESQUERDA : DIREITA; 00087 wait(2); // Aguarda um tempo para a partida do micromouse 00088 ton.setLED(BLUE); 00089 beeps(3, 100, 50); 00090 00091 /* Inicia o Timer do controle de velocidade */ 00092 timer1.attach(&callbackTimer1, (float)TS / 1000.0f); 00093 bRodarControle = true; 00094 00095 /* Ao iniciar, o micromouse deve estar no centro da primeira célula... 00096 Com isso, deve se deslocar meia célula até a FRONTEIRA da próxima célula 00097 (local IDEAL para realizar a leitura dos sensores) */ 00098 frente(CELULA / 2); 00099 00100 00101 /* LOOP principal ----------------------------------------------------------*/ 00102 while (1) 00103 { 00104 /* Realiza a máquina de estados de acordo com o que foi selecionado */ 00105 if (seguidor == DIREITA) 00106 { 00107 /* Máquina de Estados - Seguidor de Parede DIREITA */ 00108 switch (paredes) 00109 { 00110 /* Sem paredes */ 00111 case 0b000: 00112 curva(-90); // Vira para a direita 00113 break; 00114 00115 /* Apenas parede da direita */ 00116 case 0b001: 00117 frente(CELULA); // Anda uma célula para frente 00118 break; 00119 00120 /* Apenas parede da esquerda */ 00121 case 0b100: 00122 curva(-90); // Vira para a direita 00123 break; 00124 00125 /* Ambas paredes laterais */ 00126 case 0b101: 00127 frente(CELULA); // Anda uma célula para frente 00128 break; 00129 00130 /* Apenas parede frontal */ 00131 case 0b010: 00132 curva(-90); // Vira para a direita 00133 break; 00134 00135 /* Parede frontal e direita */ 00136 case 0b011: 00137 curva(90); // Vira para a esquerda 00138 break; 00139 00140 /* Parede frontal e esquerda */ 00141 case 0b110: 00142 curva(-90); // Vira para a direita 00143 break; 00144 00145 /* Todas as paredes */ 00146 case 0b111: 00147 curva(180); // Meia volta 00148 break; 00149 } 00150 } // fim da maquina de estados para seguidor de parede direita 00151 else if (seguidor == ESQUERDA) 00152 { 00153 /* Máquina de Estados - Seguidor de Parede ESQUERDA */ 00154 switch (paredes) 00155 { 00156 /* Sem paredes */ 00157 case 0b000: 00158 curva(90); // Vira para esquerda 00159 break; 00160 00161 /* Apenas parede da direita */ 00162 case 0b001: 00163 curva(90); // Vira para esquerda 00164 break; 00165 00166 /* Apenas parede da esquerda */ 00167 case 0b100: 00168 frente(CELULA); // Anda uma célula para frente 00169 break; 00170 00171 /* Ambas paredes laterais */ 00172 case 0b101: 00173 frente(CELULA); // Anda uma célula para frente 00174 break; 00175 00176 /* Apenas parede frontal */ 00177 case 0b010: 00178 curva(90); // Vira para esquerda 00179 break; 00180 00181 /* Parede frontal e direita */ 00182 case 0b011: 00183 curva(90); // Vira para a esquerda 00184 break; 00185 00186 /* Parede frontal e esquerda */ 00187 case 0b110: 00188 curva(-90); // Vira para direita 00189 break; 00190 00191 /* Todas as paredes */ 00192 case 0b111: 00193 curva(-180); // Meia volta 00194 break; 00195 } 00196 } // fim da maquina de estados para seguidor de parede esquerda 00197 } // fim do loop principal 00198 } // fim da função principal 00199 00200 00201 /** 00202 * @} 00203 */ 00204 00205 /************************ (C) COPYRIGHT IOTON Technology **********************/ 00206 /***********************************END OF FILE********************************/
Generated on Thu Jul 14 2022 06:11:42 by
1.7.2