¿Tengo algún problema con el proyecto de mi escuela?

-4

Estoy trabajando en un proyecto escolar "Android controle un automóvil robot a través de Bluetooth" con sensor de temperatura "LM35", detector de gas "MQ-2", controlador de motor IC "l293D" y módulo Bluetooth "HC-05" usando atmega 32. Ya escribí y ejecuté mi código y no aparece ningún error en el código, así que seguí adelante para hacer la conexión como hardware, pero nada de mi robot funciona. Busqué mucho para averiguar dónde está mi problema en el código o la conexión, pero no obtuve la respuesta convincente. Sugerencia: probé cada componente individual para verificar si funciona o no, funciona. pero cuando grabo el código que se adjunta a continuación nada es trabajo ... ¿Puede alguien ayudarme a averiguar cuál es mi problema? Aquí está el código

  

main.c

#include "type.h"
#include "avr/io.h"
#define F_CPU 16000000
#include "avr/delay.h"
#include"UART_interface.h"
#include"TempCheck.h"
#include"SmokeCheck.h"
void main(void)
{
    DDRB=0XFF;
    DDRA = 0b00000000;
    DDRC = 0b00000001;

    while(1)
    {
        motor();
        Tempcheck();
        Smokecheck ();
    }
}
  

Directions.c

#include "type.h"
#include "avr/io.h"
#define F_CPU 16000000
#include "avr/delay.h"
#include"UART_interface.h"
void motor (void)
{
    while(1)
    {
        u32 x;
        x=UART_u8RecievedByte();
                switch(x)
                {
                case('F'):
                        {
                    PORTB=0b00000101; // car move in forward direction
                    _delay_ms(500);
                    break;
                        }
                case('B'):
                    {
                    PORTB=0b00001010;  // car move in backward direction
                    _delay_ms(500);
                    break;
                    }
                case('R'):
                    {
                    PORTB=0b00000001;   // car move in right direction
                    _delay_ms(500);
                    break;
                    }
                case('L'):
                    {
                    PORTB=0b00000100;    // car move in left direction
                    _delay_ms(500);
                    break;

                    }
                }
    }
}
  

TempCheck.c

#include "type.h"
#include "avr/io.h"
#define F_CPU 16000000
#include "avr/delay.h"
#include "temp.h"
void Tempcheck (void)
{
    u32 y;
    temp_init();
    while(1)
    {
        y=temp_read();
        y = (y * 5000)/ 256;
        y = y/10;
        if (y>60)
        {
            PORTC = 0b00000001;  //turn on the buzzer
            _delay_ms(500);
            PORTC = 0b00000000;  //turn off the buzzer
            _delay_ms(5000);
            y=temp_read();
            y = (y * 5000)/ 256;
            y = y/10;
        }
        else if(y==30)
        {
            PORTC=0b00000000; //turn off the buzzer
        }
        else
        {
            //do nothing
        }
    }
}
  

SmokeCheck.c

#include "type.h"
#include "avr/io.h"
#define F_CPU 16000000
#include "avr/delay.h"
#include "smoke.h"
void Smokecheck (void)
{
    u32 z;
    somke_init();
    while(1)
    {
        z=smoke_read();

        if (z>600)
        {
            PORTC = 0b00000001;  //turn on the buzzer
            _delay_ms(500);
            PORTC = 0b00000000;  //turn off the buzzer
            _delay_ms(5000);
            z=smoke_read();

        }
        else if(z==30)
        {
            PORTC=0b00000000; //turn off the buzzer
        }
        else
        {
            //do nothing
        }
    }
}
  

uart.c

#include"avr/io.h"
#include"avr/delay.h"
#include"type.h"
void UART_voidInit(void)
{
    UCSRB=0b00011000;
    UCSRC=0b00000110;
    UBRRL=103;
}
void UART_voidSendByte(u8 Byte)
{
    while(!(UCSRA&(1<<5)));
    UDR=Byte;
}
u8 UART_u8RecievedByte(void)
{
    while(!(UCSRA&(1<<7)));
    return UDR;
}
  

temp.c

#include "type.h"
#include"avr\io.h"
void temp_init (void)
{
    ADMUX = 0b01100000; //use channel adc0
    ADCSRA = 0b10010000;
}
u8 temp_read (void)
{
    // Strat conversion
    ADCSRA = ADCSRA | 0b01000000;

    // wait till conversion finish
    while ((ADCSRA & 0b00010000) == 0b00000000)
    {

    }
    // clear Flag
    ADCSRA = ADCSRA | 0b00010000;
    // return conversion result
    return (ADCH);

}
  

smoke.c

#include "type.h"
#include"avr\io.h"
void somke_init (void)
{
    ADMUX = 0b01100001; //use channel adc1
    ADCSRA = 0b10010000;
}
u8 smoke_read (void)
{
    // Strat conversion
    ADCSRA = ADCSRA | 0b01000000;

    // wait till conversion finish
    while ((ADCSRA & 0b00010000) == 0b00000000)
    {

    }
    // clear Flag
    ADCSRA = ADCSRA | 0b00010000;
    // return conversion result
    return (ADCH);

}
  

tipo.h

typedef unsigned char u8;
typedef unsigned short int u16;
typedef unsigned long int u32;
typedef signed char s8;
typedef signed short int s16;
typedef signed long int s32;
typedef float f32;
typedef double f64;
  

UART_interface.h

void UART_voidInit(void);
void UART_voidSendByte(u8 Byte);
u8 UART_u8RecievedByte(void);
  

dirección.h

void motor (void);
  

temp.h

void temp_init (void);
u8 temp_read (void);
  

TempCheck.h

void Tempcheck (void);
  

smoke.h

void somke_init (void);
u8 smoke_read (void);
  

SmokeCheck.h

void Smokecheck (void);
    
pregunta Sara Gero

2 respuestas

0

Supongo que escuela significa K-12 y no universidad, así que trataré de ser más útil que algunos de los comentarios. Básicamente, su código es incorrecto, y Roger ha dicho dónde está el problema. Escriba un código simple que pruebe lo que sucede cuando el código dice

while (1)
{
}

sugeriría

while (1)
{
    Serial.print ("Mensaje A \ n");
}
Serial.print ("Mensaje B \ n");

luego, después de comprender este comportamiento, represente lo que hace su código con lápiz y papel.

    
respondido por el anonagain
0

Es difícil proporcionar otras sugerencias sin saber qué cambios se han realizado en el código.

Deberá agregar información de depuración al código. Le sugiero que si puede, use el puerto serie para enviar caracteres desde el robot al dispositivo Bluetooth. Si está utilizando una aplicación Bluetooth preescrita que no muestra los caracteres de retorno, es posible que deba usar el zumbador para enviar patrones de código morse. Cuando ingresa a cada una de las sub-rutinas, envíe un carácter al dispositivo Bluetooth o reproduzca un patrón distinto de pitidos.

Si ha eliminado todo el tiempo (1), la respuesta de glen-geek es relevante. Todavía tienes cuatro piezas de código de bloqueo. Por ejemplo, mientras bucles como
while ((ADCSRA & 0b00010000) == 0b00000000)
que es un bucle de bloqueo que espera una conversión de analógico a digital válida.

Uno de estos bucles de bloqueo es probablemente el problema. Probablemente debido a un cableado incorrecto, por ejemplo. si la entrada en serie no está conectada, el bucle de caracteres en serie de lectura esperará para siempre.

Por cierto, para un buen estilo, realmente debe mover el sonido de la alarma contra incendios (?) a su propia función. Y llamar a la función de sonido desde el bucle principal.

    
respondido por el anonagain

Lea otras preguntas en las etiquetas