Commit 48fa72471b98a0b4513c863216d759011a04c2ac
1 parent
65705671
avancées code + fonctions get_buttons shape_joy get_joystick + fix
Showing
1 changed file
with
97 additions
and
47 deletions
Show diff stats
@@ -49,7 +49,7 @@ return ADCH; | @@ -49,7 +49,7 @@ return ADCH; | ||
49 | 49 | ||
50 | // For the I/O | 50 | // For the I/O |
51 | void output_init(void){ | 51 | void output_init(void){ |
52 | -DDRB |= 0b00011111; // PIN 8-13 as output | 52 | +DDRB |= 0b00111111; // PIN 8-13 as output |
53 | } | 53 | } |
54 | 54 | ||
55 | void output_set(unsigned char value){ | 55 | void output_set(unsigned char value){ |
@@ -57,69 +57,119 @@ if(value==0) PORTB &= 0xfe; else PORTB |= 0x01; | @@ -57,69 +57,119 @@ if(value==0) PORTB &= 0xfe; else PORTB |= 0x01; | ||
57 | } | 57 | } |
58 | 58 | ||
59 | void input_init(void){ | 59 | void input_init(void){ |
60 | -DDRD |= 0x7c; // PIN 2-6 as input (Bouton Joystick + boutons) | 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) | 61 | DDRC |= 0x03; // PIN 0-1 analogiques comme input (x et y joystick analogique) |
62 | } | 62 | } |
63 | 63 | ||
64 | +/* | ||
64 | unsigned char input_get(void){ | 65 | unsigned char input_get(void){ |
65 | return ((PIND&0x04)!=0)?1:0; | 66 | return ((PIND&0x04)!=0)?1:0; |
66 | } | 67 | } |
68 | +*/ | ||
67 | 69 | ||
70 | +/* Commande des LED */ | ||
68 | void commande_leds(){ | 71 | void commande_leds(){ |
69 | unsigned char temp_serial, leds; | 72 | unsigned char temp_serial, leds; |
70 | - temp_serial = get_serial(); | ||
71 | - if (temp_serial !=0){ | ||
72 | - leds = temp_serial; | ||
73 | - if (leds == 65) PORTB = PORTB | 0x01; | ||
74 | - if (leds == 66) PORTB = PORTB | 0x02; | ||
75 | - if (leds == 67) PORTB = PORTB | 0x04; | ||
76 | - if (leds == 68) PORTB = PORTB | 0x08; | ||
77 | - if (leds == 69) PORTB = PORTB | 0x10; | ||
78 | - if (leds == 70) PORTB = PORTB | 0x20; | ||
79 | - | ||
80 | - if (leds == 97) PORTB = PORTB & 0xfe; | ||
81 | - if (leds == 98) PORTB = PORTB & 0xfd; | ||
82 | - if (leds == 99) PORTB = PORT B & 0xfb; | ||
83 | - if (leds == 100) PORTB = PORT B & 0xf7; | ||
84 | - if (leds == 101) PORTB = PORT B & 0xef; | ||
85 | - if (leds == 102) PORTB = PORT B & 0xdf; | ||
86 | - } | 73 | + temp_serial = UDR0; |
74 | + if (temp_serial !=0){ | ||
75 | + leds = temp_serial; | ||
76 | + // Allumer LED de 'A' à 'F' | ||
77 | + if (leds == 65) PORTB = PORTB | 0x01; | ||
78 | + if (leds == 66) PORTB = PORTB | 0x02; | ||
79 | + if (leds == 67) PORTB = PORTB | 0x04; | ||
80 | + if (leds == 68) PORTB = PORTB | 0x08; | ||
81 | + if (leds == 69) PORTB = PORTB | 0x10; | ||
82 | + if (leds == 70) PORTB = PORTB | 0x20; | ||
83 | + | ||
84 | + // Eteindre LED de 'a' à 'f' | ||
85 | + if (leds == 97) PORTB = PORTB & 0xfe; | ||
86 | + if (leds == 98) PORTB = PORTB & 0xfd; | ||
87 | + if (leds == 99) PORTB = PORTB & 0xfb; | ||
88 | + if (leds == 100) PORTB = PORTB & 0xf7; | ||
89 | + if (leds == 101) PORTB = PORTB & 0xef; | ||
90 | + if (leds == 102) PORTB = PORTB & 0xdf; | ||
91 | + } | ||
87 | } | 92 | } |
88 | 93 | ||
89 | -// Dummy main | 94 | +/* 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); | ||
98 | +} | ||
90 | 99 | ||
91 | -int main(void){ | ||
92 | - init_serial(9600); | ||
93 | - output_init(); | ||
94 | - input_init(); | ||
95 | - | ||
96 | - unsigned char boutons, boutons_anc; | ||
97 | - unsigned char joystick_x, joystick_x_anc; | ||
98 | - unsigned char joystick_y, joystick_y_anc; | 100 | +/* 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); | ||
104 | +} | ||
99 | 105 | ||
106 | +/* Récupération de la valeur de l'axe du joystick sur la chaîne channel du CAN */ | ||
107 | +int get_joystick(int channel){ | ||
108 | + unsigned char axis; | ||
109 | + ad_init(channel); | ||
110 | + axis = ad_sample(); | ||
111 | + shape_joy(axis); | ||
112 | + return(axis); | ||
113 | +} | ||
114 | + | ||
115 | +/* Dummy main */ | ||
116 | +int main(void){ | ||
117 | + init_serial(9600); | ||
118 | + output_init(); | ||
119 | + 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 | + | ||
125 | + //Récupération des valeurs des boutons et joystick, et mise en forme | ||
126 | + boutons = get_buttons(); | ||
127 | + joystick_x = get_joystick(1); | ||
128 | + joystick_y = get_joystick(0); | ||
100 | 129 | ||
101 | - boutons_anc = PORTD & 0x7C; | ||
102 | - ad_init(0); | ||
103 | - joystick_x_anc = ad_sample(); | ||
104 | - ad_init(1); | ||
105 | - joystick_y_anc = ad_sample(); | 130 | + //send_serial(boutons); |
131 | + | ||
132 | + while(1){ | ||
106 | 133 | ||
107 | - while(1){ | ||
108 | - boutons = PORTD & 0x7C; | ||
109 | - ad_init(1); | ||
110 | - joystick_x = ad_sample(); | ||
111 | - ad_init(0); | ||
112 | - joystick_y = ad_sample(); | 134 | + boutons_anc = boutons; |
135 | + joystick_x_anc = joystick_x; | ||
136 | + joystick_y_anc = joystick_y; | ||
113 | 137 | ||
114 | - if (boutons_anc != boutons) send_serial(boutons); | ||
115 | - if ((joystick_x_anc != joystick_x) || (joystick_y_anc != joystick_y){ | ||
116 | - send_serial(joystick_x); | ||
117 | - send_serial(joystick_y); | ||
118 | - } | 138 | + //Récupération des valeurs des boutons et joystick, et mise en forme |
139 | + 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); | ||
148 | + | ||
149 | + //Cas où aucun caractère n'est reçu | ||
150 | + if ((UCSR0A & (1<<RXC0)) == 0){ | ||
151 | + | ||
152 | + //if (boutons_anc != boutons){ | ||
153 | + //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); | ||
158 | + | ||
159 | + //send_serial('r'); | ||
160 | + | ||
161 | + //retour chariot | ||
162 | + //send_serial(0x0a); | ||
163 | + //send_serial(0x0d); | ||
164 | + //} | ||
165 | + } | ||
119 | 166 | ||
120 | - commande_leds(); | ||
121 | - } | ||
122 | - | 167 | + else{ |
168 | + //Cas où un caractère attent d'être reçu | ||
169 | + commande_leds(); | ||
170 | + } | ||
171 | + } | ||
172 | + | ||
123 | return 0; | 173 | return 0; |
124 | } | 174 | } |
125 | 175 |