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);