Bonjour,
J'aurai besoin de vos conseils pour la programmation d'un ATMEGA8535.
En fait, j'ai une "mini voiture" que je souhaite contrôler depuis une télécommande (type TV).
Voici la documentation de la carte que j'utilise :
http://sti.ac-orleans-tours.fr/spip/...arte_robot.pdf
http://sti.ac-orleans-tours.fr/spip/...icro_robot.pdf
J'ai un récepteur IR que j'ai cablé de PA0 à PA6 et sur PD2 (voir doc ci-dessus).
J'ai deux moteurs sur cette mini-voiture.
Lors de l'appui sur BP1, j'appuie sur une touche de la télécommande à associer à l'action avancer
Lors de l'appui sur BP2, j'appuie sur une touche de la télécommande à associer à l'action reculer
Lors de l'appui sur BP3, j'appuie sur une touche de la télécommande à associer à l'action tourner_gauche
Lors de l'appui sur BP4, j'appuie sur une touche de la télécommande à associer à l'action tourner_droite
Les touches de la télécommande sont alors configurées pour piloter ma voiture.
Voici le programme que j'ai effectué :
Pensez-vous que cela réalisera ce que je souhaite faire ? Je ne peux pas le tester pour le moment donc c'est pour ça que je vous demande. Il n'y a pas d'erreur de compilation en tout cas.Code PHP:
/****************************************************
Projet : Pilotage voiture avec telecommande
Version : 1.0
Date : 19/02/12
Auteur : C.Ludovic
uC : ATMEL AVR ATMEGA8535
****************************************************/
#include <avr/io.h>
#define M1AV (0x10) // Adresse moteur 1 avancer
#define M1RE (0x08) // Adresse moteur 1 reculer
#define M1STOP (0x18) // Adresse moteur 1 stop
#define M2AV (0x40) // Adresse moteur 2 avancer
#define M2RE (0x20) // Adresse moteur 2 reculer
#define M2STOP (0x60) // Adresse moteur 2 stop
#define BP1 (PINC&0x01)
#define BP2 (PINC&0x02)
#define BP3 (PINC&0x04)
#define BP4 (PINC&0x08)
#define LED1 (0xE0)
#define LED2 (0xD0)
#define LED3 (0xB0)
#define LED4 (0x70)
#define LEDOFF (0xF0)
#define TELE ((PINA&0x7F)|(PIND&0x04))
int main(void)
{
unsigned char avancer, reculer, tourner_gauche, tourner_droite;
while (1)
{
if (BP1)
{
avancer=TELE;
}
else if (BP2)
{
reculer=TELE;
}
else if (BP3)
{
tourner_gauche=TELE;
}
else if (BP4)
{
tourner_droite=TELE;
}
else
{
if (TELE==avancer)
{
PORTD=M2AV|M1AV;
}
else if (TELE==reculer)
{
PORTD=M2RE|M1RE;
}
else if (TELE==tourner_gauche)
{
PORTD=M2RE|M1AV;
}
else if (TELE==tourner_droite)
{
PORTD=M2AV|M1RE;
}
else
{
PORTD=M1STOP|M2STOP;
}
}
}
}
void init_port(void)
{
DDRA=0x80;
DDRB=0xFF;
DDRC=0xF0;
DDRD=0xFA;
PORTC=LEDOFF;
PORTD=M1STOP|M2STOP;
}
Je sais bien que la meilleur solution c'est de tester, mais bon si vous voyez de grosses erreurs ou des conseils dans mon code, n'hésitez pas
Merci pour votre aide.
Ludo
-----