Bonjour,
Je travaille sur une carte ARDUINO UNO (je me lance)
Voila mon projet :
Je dois piloter 60 led RGB, 64 led standard. Je pilote le tout par un Rasberry (soft dévellopé sous Lazarus).
Je récupere les octets sur la carte Arduino par : (morceau de code)
En fonction du case (dans la boucle loop), j'appelle des fonctions qui tournent en boucle et qui passent rarement par le loop()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 void serialEvent() // déclaration de la fonction d'interruption sur la voie série { if (Serial.available() > 0) { Octet = Serial.parseInt (); switch (cas) { case 1: Tableau[x] = Octet; x++; if (x==179){ compteur1 = 0; for (k=0; k<178 ; k= k +3) { TabRouge [compteur1] = Tableau[k]; TabVert [compteur1] = Tableau[k+1]; TabBleu[compteur1] = Tableau[k+2]; compteur1++; } compteur1 =0; } break; case 2: tampon[x] = Octet; etc...
Cette méthode ne me plait pas car j'ai lu que serial.event() était déclenché qu'a la fin du loop.
Pour moi, ce n'est donc pas une interruption !
J'ai recherché comment faire une VRAIE interruption. Voici ce code (qui fonctionne):
.... Et voila ma question
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #include <avr/interrupt.h> #include <avr/io.h> char temp; void setup() { pinMode(13, OUTPUT); // configuring pin 13 as output UBRR0 = 103; // for configuring baud rate of 9600bps UCSR0C |= (1 << UCSZ01) | (1 << UCSZ00); // Use 8-bit character sizes UCSR0B |= (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // Turn on the transmission, reception, and Receive interrupt sei();// enable global interrupt } void loop() { switch(temp) { case '0': digitalWrite(13,LOW); break; case '1': digitalWrite(13,HIGH); UDR0 = temp; // essai de transmition ! break; case '2': digitalWrite(13,HIGH); delay(300); digitalWrite(13,LOW); delay(300); break; case '3': digitalWrite(13,HIGH); delay(1000); digitalWrite(13,LOW); delay(1000); break; } } ISR(USART_RX_vect) { temp=UDR0;// read the received data byte in temp }Est-ce une vraie interruption ?
ps : Quand je mets une boucle infinie après le loop(), l'interruption ne se déclenche plus.
Merci pour vos réponses et votre temps.
elecpic
Partager