Je travaille sur une partie du projet pour avoir des lectures avec un capteur à ultrasons et l'envoyer avec une communication série, j'ai écrit du code et donne des lectures aléatoires et donne parfois 0 en lecture, est le Formule J'ai utilisé pour trouver la distance à droite!?, Ou il existe une autre formule, J'utilise Atmega32 avec horloge interne 8MHz, quelqu'un peut-il m'aider et savoir ce qui ne va pas avec mon code!?.Capteur à ultrasons en interface avec AVR
#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
void inti_serial();
static volatile int pulse = 0;
static volatile int change = 0;
int main(void)
{
/* Replace with your application code */
inti_serial();
MCUCR |= (1 << ISC00); //Any logical change on INT0
GICR |= (1 << INT0); //Enable INT0
TCCR1A=0;
sei();
while (1)
{
PORTC |= (1<<0);
_delay_us(15);
PORTC &= ~(1<<0);
while(!(UCSRA & (1<<UDRE)));
UDR = ((pulse/2)*1*(1/F_CPU)*343) ;
_delay_ms(100);
}
}
ISR(INT0_vect){
if (change==1)//when logic from HIGH to LOW
{
TCCR1B=0;//disabling counter
pulse=TCNT1;//count memory is updated to integer
TCNT1=0;//resetting the counter memory
change=0;
}
if (change==0)//when logic change from LOW to HIGH
{
TCCR1B|=(1<<CS10);//enabling counter
change=1;
}
}
void inti_serial()
{
UCSRB |= (1<<TXEN);
UCSRC |= (1<<UCSZ0) | (1<<UCSZ1) | (1<<URSEL);
UBRRL = 0x33;
}
Copie possible de [Sérialiser les structures de données en C] (https://stackoverflow.com/questions/371371/serialize-data-structures-in-c) –
@GianlucaGhettini Cette question n'a rien à voir avec la sérialisation mais, à distance, avec * communication série *. – JimmyB