Nos informe porque este programa é inadequado. Por favor, não envie várias vezes.

Razão
Mensagem

Enviar    Cancelar

  • Use o bom senso
  • Seja educado. Trate os outros como você gostaria de ser tratado
  • Você só pode usar até 3.000 caracteres por comentário
  • Você não pode comentar o mesmo programa dentro do período de 60 segundos
  • Você não pode postar o mesmo comentário em vários programas.
  • Existe um limite de 100 comentários por usuário no período de 24 horas.

Fechar

N3Dohms20161017

de rudi |  v1 |  0 |  0 |  1862 |  7 
Acesse sua conta para comentar e baixar este programa.

Compartilhado há 5 anos e 8 meses atrás
Alguns direitos reservados
// n3dohms20161017.c - Criado pelo studio UNO 2.3
// 10 October 2016 7:29:14 pm
 
#include <uno.h>
 
 
// Defines
#define ALTA 1023
#define BAIXA 700
#define BRANCO 255
#define FREIO -550
#define LINHA 0
#define MEDIA 900
#define VariaGarra 5
#define tempo 10
 
// Declaracao das Variaveis
unsigned char AceX;
unsigned char AceY;
unsigned char AceZ;
unsigned char BtC;
unsigned char BtZ;
int CalculoAcel;
int EncDir;
int EncEsq;
unsigned char Garra;
unsigned int Graus;
unsigned char Ir1Limite;
unsigned char Ir5Limite;
unsigned char IrDir1Seg;
unsigned char IrDirSeg;
unsigned char IrEsq1Seg;
unsigned char IrEsqSeg;
unsigned char IrMeioSeg;
unsigned char JoyX;
unsigned char JoyY;
int Motor_D;
int Motor_E;
unsigned int ObjetoDir;
unsigned int ObjetoEsq;
unsigned char Parar;
unsigned int Pulsos;
int Velocidade;
int eixo_x;
int eixo_y;
 
// Prototipos
void SegueLinha(void); 
void LeRF(void); 
void Sumo(void); 
void RetoFrente(void); 
void GiraEsquerda(void); 
void GiraDireita(void); 
void ControleMotores(void); 
void ZeraEncoders(void); 
void LeEncoders(void); 
void BateUltrasom(void); 
void ControleRF(void); 
void ControleJoy(void); 
void AjusteLimites(void); 
void ViraEsquerda(void); 
void Freio(void); 
void ViraDireita(void); 
void FreioReduzido(void); 
void Frente(void); 
void LeSeguidor(void); 
 
//Funcoes do Usuario
void SegueLinha(void) 
{
     LeSeguidor();
     if (((IrEsqSeg == BRANCO) && ((IrMeioSeg == LINHA) && (IrDirSeg == BRANCO)))) {
         Velocidade = ALTA;
         Frente();
     }
     if (((IrEsqSeg == LINHA) && ((IrMeioSeg == LINHA) && (IrDirSeg == BRANCO)))) {
         Velocidade = BAIXA;
         ViraEsquerda();
     }
     if (((IrEsqSeg == BRANCO) && ((IrMeioSeg == LINHA) && (IrDirSeg == LINHA)))) {
         Velocidade = BAIXA;
         ViraDireita();
     }
     if (((IrEsqSeg == LINHA) && ((IrMeioSeg == BRANCO) && (IrDirSeg == BRANCO)))) {
         Velocidade = MEDIA;
         ViraEsquerda();
     }
     if (((IrEsqSeg == BRANCO) && ((IrMeioSeg == BRANCO) && (IrDirSeg == LINHA)))) {
         Velocidade = MEDIA;
         ViraDireita();
     }
     if (((IrMeioSeg == LINHA) && ((IrEsq1Seg == LINHA) && (IrDir1Seg == LINHA)))) {
         Parar = 1;
     }
 
}
 
void LeRF(void) 
{
     JoyX = __ControllerGetJoystick_X(1);
     __delay(tempo);
     JoyY = __ControllerGetJoystick_Y(1);
     __delay(tempo);
     AceX = __ControllerGetAccelerometer_X(1);
     __delay(tempo);
     AceY = __ControllerGetAccelerometer_Y(1);
     __delay(tempo);
     AceZ = __ControllerGetAccelerometer_Z(1);
     __delay(tempo);
     BtC = __ControllerGetButton_C(1);
     __delay(tempo);
     BtZ = __ControllerGetButton_Z(1);
     __delay(tempo);
}
 
void Sumo(void) 
{
     Garra = 180;
     Graus = 90;
     Ir1Limite = (__SeguidorGetAnalog(1, 1) - 18);
     Ir5Limite = (__SeguidorGetAnalog(1, 5) - 18);
     while(TRUE) {
         __motor_curso(__FORWARD);
         if ((__SeguidorGetAnalog(1, 1) < Ir1Limite)) {
             __motor_curso(__BACKWARD);
             __delay(400);
             Freio();
             __delay(400);
             GiraDireita();
         }
         if ((__SeguidorGetAnalog(1, 5) < Ir5Limite)) {
             __motor_curso(__BACKWARD);
             __delay(400);
             Freio();
             __delay(400);
             GiraEsquerda();
         }
     }
 
}
 
void RetoFrente(void) 
{
     LeEncoders();
     if ((EncEsq > EncDir)) {
         ViraEsquerda();
     }
     if ((EncEsq < EncDir)) {
         ViraDireita();
     }
     if ((EncEsq == EncDir)) {
         __motor(1, Velocidade);
         __motor(2, Velocidade);
     }
 
}
 
void GiraEsquerda(void) 
{
     ZeraEncoders();
     Pulsos = (Graus / 4.9);
     __motor_curso(__LEFT_ROTATE);
     while((__EncoderGetValue(2) < Pulsos)) {
         while(!(__EncoderGetValue(2) >= Pulsos)) { __delay(10); }
         __delay(tempo);
     }
 
}
 
void GiraDireita(void) 
{
     ZeraEncoders();
     Pulsos = (Graus / 4.9);
     __motor_curso(__RIGHT_ROTATE);
     while((__EncoderGetValue(1) < Pulsos)) {
         while(!(__EncoderGetValue(1) >= Pulsos)) { __delay(10); }
         __delay(tempo);
     }
 
}
 
void ControleMotores(void) 
{
     __motor(1, Motor_E);
     __motor(2, Motor_D);
     if (((BtC == 1) && (Garra < 180))) {
         Garra += VariaGarra;
     }
     if (((BtZ == 1) && (Garra > 0))) {
         Garra -= VariaGarra;
     }
     __PWM1 = Garra;
}
 
void ZeraEncoders(void) 
{
     __SmartSensorCmd(1, 1, 9, 0);
     __delay(tempo);
     __SmartSensorCmd(1, 2, 9, 0);
     __delay(tempo);
}
 
void LeEncoders(void) 
{
     EncEsq = __EncoderGetValue(1);
     __delay(tempo);
     EncDir = __EncoderGetValue(2);
     __delay(tempo);
}
 
void BateUltrasom(void) 
{
     __SmartSensorCmd(1, 1, 8, 0);
     bitset(__TRIS_PWM, __DIGITAL2);
     bitset(__TRIS_PWM, __DIGITAL3);
     __PWM2 = 90;
     __PWM3 = 20;
     ZeraEncoders();
     Graus = 90;
     Velocidade = 1023;
     while(TRUE) {
         RetoFrente();
         if ((__UltrasonicGetValueMM(1) < 300)) {
             Freio();
             // Olho pra direita
             __PWM2 = 0;
             __delay(1000);
             ObjetoDir = __UltrasonicGetValueMM(1);
             // Olho pra esquerda
             __PWM2 = 180;
             __delay(1000);
             ObjetoEsq = __UltrasonicGetValueMM(1);
             // Olho pra frente
             __PWM2 = 90;
             __delay(1000);
             if ((ObjetoEsq > ObjetoDir)) {
                 GiraEsquerda();
             }
             else {
                 GiraDireita();
             }
             ZeraEncoders();
         }
     }
 
}
 
void ControleRF(void) 
{
     eixo_x = ((JoyX - 128) * 8);
     eixo_y = ((JoyY - 128) * 8);
     Motor_E = (eixo_x + eixo_y);
     Motor_D = (eixo_y - eixo_x);
     AjusteLimites();
     ControleMotores();
}
 
void ControleJoy(void) 
{
     if ((JoyX < 126)) {
         Graus = 5;
         GiraEsquerda();
     }
     if ((JoyX > 130)) {
         Graus = 5;
         GiraDireita();
     }
     if ((JoyY < 126)) {
         __motor_curso(__BACKWARD);
     }
     if ((JoyY > 130)) {
         if (((__SeguidorGetAnalog(1, 2) > 20) || (__SeguidorGetAnalog(1, 4) > 20))) {
             __motor_curso(__FORWARD);
         }
         else {
             Freio();
         }
     }
     if (((JoyX == 128) && (JoyY == 128))) {
         __motor_curso(__STOP);
     }
     if ((BtC == 1)) {
         __PWM1 = 180;
     }
     if ((BtZ == 1)) {
         __PWM1 = 40;
     }
 
}
 
void AjusteLimites(void) 
{
     if ((Motor_E < -1023)) {
         Motor_E = -1023;
     }
     if ((Motor_E > 1023)) {
         Motor_E = 1023;
     }
     if ((Motor_D < -1023)) {
         Motor_D = -1023;
     }
     if ((Motor_D > 1023)) {
         Motor_D = 1023;
     }
 
}
 
void ViraEsquerda(void) 
{
     __motor(1, FREIO);
     __motor(2, Velocidade);
}
 
void Freio(void) 
{
     __motor_curso(__REVERSE);
     __delay(30);
     __motor_curso(__STOP);
}
 
void ViraDireita(void) 
{
     __motor(1, Velocidade);
     __motor(2, FREIO);
}
 
void FreioReduzido(void) 
{
     __motor(1, -550);
     __motor(2, -550);
     __delay(20);
     __motor(1, 550);
     __motor(2, 550);
     __delay(20);
     __motor_curso(__STOP);
}
 
void Frente(void) 
{
     __motor(1, Velocidade);
     __motor(2, Velocidade);
}
 
void LeSeguidor(void) 
{
     IrEsq1Seg = __SeguidorGetDigital(1, 1);
     __delay(tempo);
     IrEsqSeg = __SeguidorGetDigital(1, 2);
     __delay(tempo);
     IrMeioSeg = __SeguidorGetDigital(1, 3);
     __delay(tempo);
     IrDirSeg = __SeguidorGetDigital(1, 4);
     __delay(tempo);
     IrDir1Seg = __SeguidorGetDigital(1, 5);
     __delay(tempo);
}
 
//Funcao Principal
void main(void)
{
     __inicializa;
     __SmartSensorCmd(1, 1, 8, 0);
     __SmartSensorCmd(2, 1, 14, 0);
     bitset(__TRIS_PWM, __DIGITAL1);
     __PWM1 = 180;
     while((__analog_in(0) < 500)) {
         SegueLinha();
     }
     Freio();
     __PWM1 = 10;
     __delay(500);
     Graus = 180;
     GiraEsquerda();
     Parar = 0;
     while((Parar == 0)) {
         SegueLinha();
     }
     Freio();
     __PWM1 = 180;
     while(TRUE) { }
}

Descrição

Usando o controle RF

Nenhum Comentário

Download


Entre para Baixar

Favorito de


Ninguém marcou este projeto como favorito ainda.

Projetos de rudi


 0    2041   2 
 1    1823   8 
 0    2260   4 
 0    1956   1 
 0    2142   7