Commit db0bdba2403451e2f7ba770fac857cb1e21629b4

Authored by rguillom
1 parent 48fa7247

boutons+joy OK

Showing 1 changed file with 55 additions and 44 deletions   Show diff stats
1 #include <avr/io.h> // for the input/output register 1 #include <avr/io.h> // for the input/output register
  2 +#include <util/delay.h>
2 3
3 // For the serial port 4 // For the serial port
4 5
5 #define CPU_FREQ 16000000L // Assume a CPU frequency of 16Mhz 6 #define CPU_FREQ 16000000L // Assume a CPU frequency of 16Mhz
  7 +#define tempo 25
  8 +#define debit 9600 //débit liaison série en bauds
6 9
7 void init_serial(int speed) 10 void init_serial(int speed)
8 { 11 {
@@ -49,23 +52,26 @@ return ADCH; @@ -49,23 +52,26 @@ return ADCH;
49 52
50 // For the I/O 53 // For the I/O
51 void output_init(void){ 54 void output_init(void){
52 -DDRB |= 0b00111111; // PIN 8-13 as output 55 +DDRB |= 0b00111111; // PIN 8-13 as output (LED)
53 } 56 }
54 57
  58 +/*
55 void output_set(unsigned char value){ 59 void output_set(unsigned char value){
56 if(value==0) PORTB &= 0xfe; else PORTB |= 0x01; 60 if(value==0) PORTB &= 0xfe; else PORTB |= 0x01;
57 } 61 }
  62 +*/
58 63
59 void input_init(void){ 64 void input_init(void){
60 -DDRD |= 0b01111100; // PIN 2-6 as input (Bouton Joystick + boutons)  
61 -DDRC |= 0x03; // PIN 0-1 analogiques comme input (x et y joystick analogique) 65 + DDRD &= 0b10000011; // PIN 2-6 as input (Bouton Joystick + boutons)
  66 + PORTD |= 0x7C; // Pull up de 0 à 1
  67 + //DDRC &= 0b11111100; // PIN 0-1 analogiques comme input (x et y joystick)
62 } 68 }
63 69
64 -/* 70 +
65 unsigned char input_get(void){ 71 unsigned char input_get(void){
66 return ((PIND&0x04)!=0)?1:0; 72 return ((PIND&0x04)!=0)?1:0;
67 } 73 }
68 -*/ 74 +
69 75
70 /* Commande des LED */ 76 /* Commande des LED */
71 void commande_leds(){ 77 void commande_leds(){
@@ -92,84 +98,89 @@ void commande_leds(){ @@ -92,84 +98,89 @@ void commande_leds(){
92 } 98 }
93 99
94 /* Récupération de la valeur des boutons et mise en forme */ 100 /* Récupération de la valeur des boutons et mise en forme */
95 -int get_buttons(void){  
96 - unsigned boutons = ((PIND & 0x7C)>>2) | 0b00100000;  
97 - return(boutons); 101 +unsigned char get_buttons(void){
  102 + //unsigned char boutons = (((PIND & 0x7C)>>2) &0x3f) | 0b00100000;
  103 + unsigned char boutons = PIND;
  104 + boutons = boutons >>2;
  105 + boutons = boutons & 0b00111111;
  106 + boutons = boutons | 0b00100000;
  107 +
  108 + return boutons;
98 } 109 }
99 110
100 /* Met en forme l'octet de l'axe pos du joystick */ 111 /* Met en forme l'octet de l'axe pos du joystick */
101 -int shape_joy(unsigned char pos){  
102 - pos = (pos >> 3) | 0b00100000;  
103 - return(pos); 112 +unsigned char shape_joy(unsigned char pos){
  113 + //pos = ((pos >> 3) | &0b00111111) 0b00100000;
  114 + pos = pos >>3;
  115 + pos = pos & 0b00111111;
  116 + pos = pos | 0b00100000;
  117 + return pos;
104 } 118 }
105 119
106 /* Récupération de la valeur de l'axe du joystick sur la chaîne channel du CAN */ 120 /* Récupération de la valeur de l'axe du joystick sur la chaîne channel du CAN */
107 -int get_joystick(int channel){ 121 +unsigned char get_joystick(int channel){
108 unsigned char axis; 122 unsigned char axis;
109 ad_init(channel); 123 ad_init(channel);
110 axis = ad_sample(); 124 axis = ad_sample();
111 - shape_joy(axis);  
112 - return(axis); 125 + axis = shape_joy(axis);
  126 + return axis;
113 } 127 }
114 128
115 /* Dummy main */ 129 /* Dummy main */
116 int main(void){ 130 int main(void){
117 - init_serial(9600); 131 +
  132 + //INITIALISATIONS
  133 + unsigned char boutons, boutons_anc;
  134 + unsigned char joystick_x=0x10, joystick_x_anc=0x10;
  135 + unsigned char joystick_y=0x10, joystick_y_anc=0x10;
  136 +
  137 + init_serial(debit);
118 output_init(); 138 output_init();
119 input_init(); 139 input_init();
120 -  
121 - unsigned char boutons, boutons_anc;  
122 - unsigned char joystick_x, joystick_x_anc;  
123 - unsigned char joystick_y, joystick_y_anc;  
124 140
125 //Récupération des valeurs des boutons et joystick, et mise en forme 141 //Récupération des valeurs des boutons et joystick, et mise en forme
126 boutons = get_buttons(); 142 boutons = get_buttons();
127 - joystick_x = get_joystick(1);  
128 - joystick_y = get_joystick(0);  
129 -  
130 - //send_serial(boutons); 143 + joystick_x = get_joystick(0);
  144 + joystick_y = get_joystick(1);
131 145
132 while(1){ 146 while(1){
133 -  
134 boutons_anc = boutons; 147 boutons_anc = boutons;
135 joystick_x_anc = joystick_x; 148 joystick_x_anc = joystick_x;
136 joystick_y_anc = joystick_y; 149 joystick_y_anc = joystick_y;
137 150
138 //Récupération des valeurs des boutons et joystick, et mise en forme 151 //Récupération des valeurs des boutons et joystick, et mise en forme
139 boutons = get_buttons(); 152 boutons = get_buttons();
140 - joystick_x = get_joystick(1);  
141 - joystick_y = get_joystick(0);  
142 -  
143 -  
144 - send_serial(boutons+2);  
145 - //retour chariot  
146 - send_serial(0x0a);  
147 - send_serial(0x0d); 153 + joystick_x = get_joystick(0);
  154 + _delay_ms(tempo);
  155 + joystick_y = get_joystick(1);
  156 +
148 157
149 - //Cas où aucun caractère n'est reçu 158 + //Port série libre
150 if ((UCSR0A & (1<<RXC0)) == 0){ 159 if ((UCSR0A & (1<<RXC0)) == 0){
151 160
152 //if (boutons_anc != boutons){ 161 //if (boutons_anc != boutons){
  162 + //if (joystick_x_anc != joystick_x){
153 //if (joystick_y_anc != joystick_y){ 163 //if (joystick_y_anc != joystick_y){
154 - //if ((boutons_anc != boutons) || (joystick_x_anc != joystick_x) || (joystick_y_anc != joystick_y)){  
155 - //send_serial(boutons);  
156 - //send_serial(joystick_y);  
157 - //send_serial(joystick_y); 164 + if ((boutons_anc != boutons) || (joystick_x_anc != joystick_x) || (joystick_y_anc != joystick_y)){
  165 + send_serial(boutons);
  166 + //if ((joystick_x > 126) || (joystick_x <33)) send_serial('e');
  167 + send_serial(joystick_x);
  168 + send_serial(joystick_y);
158 169
159 //send_serial('r'); 170 //send_serial('r');
160 171
161 //retour chariot 172 //retour chariot
162 - //send_serial(0x0a);  
163 - //send_serial(0x0d);  
164 - //}  
165 - } 173 + send_serial(0x0a);
  174 + send_serial(0x0d);
  175 + }
166 176
  177 + }
  178 +
  179 + //Port série occupé
167 else{ 180 else{
168 - //Cas où un caractère attent d'être reçu  
169 commande_leds(); 181 commande_leds();
170 } 182 }
171 - }  
172 - 183 + }
173 return 0; 184 return 0;
174 } 185 }
175 186