// apresentacaom2 - 01.c - Criado pelo Studio UNO 2.13
// 16 October 2013 9:38:53 am
#include <uno.h>
// Declaracao das Variaveis
unsigned int LigaDes;
unsigned char dire;
unsigned int distancia;
unsigned char endereco;
unsigned char esqu;
unsigned int garra;
unsigned char lado;
unsigned char meio;
unsigned char passo;
unsigned char programa;
unsigned int tempo;
// Prototipos
void NonaSinfonia(void);
void Tela_01(void);
void Padrao_seguidor(void);
void esquerda(void);
void direita(void);
void frente(void);
void sequencia(void);
void Seguidor_com_obstaculo(void);
void Gravador_de_percurso(void);
void obstaculo(void);
void Seguidor_de_linha(void);
void Ligado(void);
void Tela_04(void);
void Tela_03(void);
void Tela_02(void);
void Resgate_objeto(void);
void tras(void);
void SensorUltrassom(void);
void Atualiza_tela_inicial(void);
//Funcoes do Usuario
void NonaSinfonia(void)
{
__backlight(__ON);
__lcd_goto(0x7f, 2);
__lcd_puts("Nona Sinfonia");
__lcd_goto(0xbf, 4);
__lcd_puts("Beethoven!");
while(TRUE) {
sequencia();
__buzzer(59, 500);
__delay(10);
__buzzer(59, 500);
__delay(200);
__buzzer(57, 300);
__delay(10);
__buzzer(57, 500);
__delay(400);
sequencia();
__buzzer(59, 500);
__buzzer(57, 500);
__delay(200);
__buzzer(55, 300);
__delay(10);
__buzzer(55, 500);
while(!__ENTER_KEY) { __delay(10); }
}
}
void Tela_01(void)
{
__lcd_goto(0xbf, 1);
__lcd_puts(" Parado ");
}
void Padrao_seguidor(void)
{
esqu = __SeguidorGetDigital(1, 2);
meio = __SeguidorGetDigital(1, 3);
dire = __SeguidorGetDigital(1, 4);
if (((esqu == 255) && ((meio == 0) && (dire == 255)))) {
__motor_curso(__FORWARD);
}
if (((esqu == 0) && ((meio == 255) && (dire == 255)))) {
__motor_curso(__LEFT_TURN);
lado = 0;
}
if (((esqu == 255) && ((meio == 255) && (dire == 0)))) {
__motor_curso(__RIGHT_TURN);
lado = 1;
}
if (((esqu == 0) && ((meio == 0) && (dire == 255)))) {
__motor(1, 900);
__motor(2, 1023);
lado = 0;
}
if (((esqu == 255) && ((meio == 0) && (dire == 0)))) {
__motor(1, 1023);
__motor(2, 900);
lado = 1;
}
if (((esqu == 255) && ((meio == 255) && (dire == 255)))) {
if ((lado == 0)) {
__motor_curso(__LEFT_ROTATE);
}
else {
__motor_curso(__RIGHT_ROTATE);
}
}
}
void esquerda(void)
{
__motor_curso(__LEFT_ROTATE);
__delay(750);
__motor_curso(__STOP);
eeprom_write(passo, 2);
passo++;
}
void direita(void)
{
__motor_curso(__RIGHT_ROTATE);
__delay(750);
__motor_curso(__STOP);
eeprom_write(passo, 3);
passo++;
}
void frente(void)
{
__motor_curso(__FORWARD);
__delay(2000);
__motor_curso(__STOP);
eeprom_write(passo, 0);
passo++;
}
void sequencia(void)
{
__buzzer(59, 500);
__delay(10);
__buzzer(59, 500);
__buzzer(60, 500);
__buzzer(62, 500);
__delay(10);
__buzzer(62, 500);
__buzzer(60, 500);
__buzzer(59, 500);
__buzzer(57, 500);
__buzzer(55, 500);
__delay(10);
__buzzer(55, 500);
__buzzer(57, 500);
}
void Seguidor_com_obstaculo(void)
{
__lcd_goto(0x7f, 3);
__lcd_puts("Seguidor com");
__lcd_goto(0xbf, 4);
__lcd_puts("obstaculo.");
__SmartSensorCmd(2, 1, 14, 0);
while(TRUE) {
if ((__UltrasonicGetValueMM(1) > 250)) {
Padrao_seguidor();
}
else {
obstaculo();
}
}
}
void Gravador_de_percurso(void)
{
while(TRUE) {
__lcd_clear();
__backlight(__ON);
__lcd_goto(0x7f, 3);
__lcd_puts("Repetindo os");
__lcd_goto(0xbf, 4);
__lcd_puts("movimentos");
passo = 0;
endereco = 0;
for (int __i1 = 0; __i1 < 5; ++__i1) {
if ((eeprom_read(endereco) == 0)) {
frente();
}
if ((eeprom_read(endereco) == 1)) {
tras();
}
if ((eeprom_read(endereco) == 2)) {
esquerda();
}
if ((eeprom_read(endereco) == 3)) {
direita();
}
endereco++;
}
__lcd_clear();
__lcd_goto(0x7f, 3);
__lcd_puts("Entre com os");
__lcd_goto(0xbf, 4);
__lcd_puts("5 comandos");
passo = 0;
while(((passo < 5) && !(__ENTER_KEY))) {
if (__UP_KEY) {
frente();
}
if (__BOTTOM_KEY) {
tras();
}
if (__LEFT_KEY) {
esquerda();
}
if (__RIGHT_KEY) {
direita();
}
}
__lcd_clear();
__lcd_goto(0x7f, 2);
__lcd_puts("Clique <enter>");
__lcd_goto(0xbf, 3);
__lcd_puts("para repetir");
while(!__ENTER_KEY) { __delay(10); }
__delay_us(50); while (__ENTER_KEY) { }; __delay_us(50);
}
}
void obstaculo(void)
{
__motor_curso(__RIGHT_ROTATE);
__delay(300);
__motor_curso(__FORWARD);
__delay(1000);
__motor_curso(__LEFT_ROTATE);
__delay(300);
__motor_curso(__FORWARD);
__delay(1500);
__motor_curso(__LEFT_TURN);
__delay(500);
__motor_curso(__FORWARD);
while(!!(__SeguidorGetDigital(1, 2))) { __delay(10); }
}
void Seguidor_de_linha(void)
{
__lcd_goto(0x7f, 3);
__lcd_puts("Seguidor de");
__lcd_goto(0xbf, 3);
__lcd_puts("linha padrao");
__SmartSensorCmd(2, 1, 14, 0);
while(TRUE) {
Padrao_seguidor();
}
}
void Ligado(void)
{
__motor_curso(__FORWARD);
if ((__analog_in(0) > garra)) {
tempo = __timer_sistema;
__motor_curso(__BACKWARD);
__delay(50);
__motor_curso(__STOP);
if ((tempo < 750)) {
tempo = 0;
}
else {
tempo = (tempo - 750);
}
Tela_03();
__delay(500);
bitset(__TRIS_PWM, __DIGITAL1);
__PWM1 = 50;
__delay(1000);
__motor_curso(__RIGHT_ROTATE);
__delay(1000);
__motor_curso(__FORWARD);
__delay(tempo);
__motor_curso(__STOP);
__delay(500);
__PWM1 = 180;
__delay(1000);
bitclr(__TRIS_PWM, __DIGITAL1);
Tela_04();
__motor_curso(__BACKWARD);
__delay(750);
__motor_curso(__STOP);
__beep();
LigaDes = 0;
Tela_01();
}
}
void Tela_04(void)
{
__lcd_goto(0xbf, 1);
__lcd_puts(" Pegue, Humano! ");
}
void Tela_03(void)
{
__lcd_goto(0xbf, 1);
__lcd_puts(" Encontrado ");
}
void Tela_02(void)
{
__lcd_goto(0xbf, 1);
__lcd_puts(" Em andamento ");
}
void Resgate_objeto(void)
{
__backlight(__ON);
__lcd_goto(0x7f, 5);
__lcd_puts("Resgate!");
Tela_01();
bitset(__TRIS_PWM, __DIGITAL1);
__PWM1 = 180;
__delay(1000);
bitclr(__TRIS_PWM, __DIGITAL1);
garra = (__analog_in(0) + 30);
LigaDes = 0;
while(TRUE) {
if ((LigaDes == 1)) {
Ligado();
}
else {
__motor_curso(__STOP);
}
if (__ENTER_KEY) {
if ((LigaDes == 0)) {
LigaDes = 1;
Tela_02();
}
else {
LigaDes = 0;
Tela_01();
}
__delay_us(50); while (__ENTER_KEY) { }; __delay_us(50);
if ((LigaDes == 1)) {
__timer_sistema = 0;
}
}
}
}
void tras(void)
{
__motor_curso(__BACKWARD);
__delay(2000);
__motor_curso(__STOP);
eeprom_write(passo, 1);
passo++;
}
void SensorUltrassom(void)
{
__backlight(__ON);
__lcd_goto(0x7f, 1);
__lcd_puts("Sensor ultrassom");
__lcd_goto(0xbf, 1);
__lcd_puts("Simulacao carro");
while(TRUE) {
distancia = __UltrasonicGetValueMM(1);
if ((distancia < 2000)) {
__buzzer(72, (distancia / 3));
__delay((distancia / 3));
}
}
}
void Atualiza_tela_inicial(void)
{
if ((programa == 0)) {
__lcd_goto(0xbf, 1);
__lcd_puts(" Resgata objeto ");
}
if ((programa == 1)) {
__lcd_goto(0xbf, 1);
__lcd_puts("Segue c/ obstac.");
}
if ((programa == 2)) {
__lcd_goto(0xbf, 1);
__lcd_puts(" Grava percurso ");
}
if ((programa == 3)) {
__lcd_goto(0xbf, 1);
__lcd_puts(" Segue linha ");
}
if ((programa == 4)) {
__lcd_goto(0xbf, 1);
__lcd_puts(" Nona Sinfonia ");
}
if ((programa == 5)) {
__lcd_goto(0xbf, 1);
__lcd_puts("Sensor Ultrassom");
}
}
//Funcao Principal
void main(void)
{
__inicializa;
programa = 0;
__backlight(__ON);
__lcd_goto(0x7f, 1);
__lcd_puts("Escolha o prog.:");
Atualiza_tela_inicial();
while(!(__ENTER_KEY)) {
if (__BOTTOM_KEY) {
if ((programa < 5)) {
programa++;
}
else {
programa = 0;
}
Atualiza_tela_inicial();
__delay_us(50); while (__BOTTOM_KEY) { }; __delay_us(50);
}
if (__UP_KEY) {
if ((programa > 0)) {
programa--;
}
else {
programa = 5;
}
Atualiza_tela_inicial();
__delay_us(50); while (__UP_KEY) { }; __delay_us(50);
}
}
__delay_us(50); while (__ENTER_KEY) { }; __delay_us(50);
__lcd_clear();
if ((programa == 0)) {
Resgate_objeto();
}
if ((programa == 1)) {
Seguidor_com_obstaculo();
}
if ((programa == 2)) {
Gravador_de_percurso();
}
if ((programa == 3)) {
Seguidor_de_linha();
}
if ((programa == 4)) {
NonaSinfonia();
}
if ((programa == 5)) {
SensorUltrassom();
}
while(TRUE) { }
}