Cours:ArduinoSdlCorrection : Différence entre versions
m |
|||
| (2 révisions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 2 : | Ligne 2 : | ||
[[Cours:ArduinoSdl|{{Vert|<big>'''Enoncé de TP'''</big>}}]] | [[Cours:ArduinoSdl|{{Vert|<big>'''Enoncé de TP'''</big>}}]] | ||
| + | ==Exo 1== | ||
| + | <source lang=c> | ||
| + | void setup() | ||
| + | { | ||
| + | Serial.begin(57600); | ||
| + | } | ||
| + | |||
| + | void loop() | ||
| + | { | ||
| + | Serial.print("R");//Photocoupleur par reflexion | ||
| + | Serial.print(analogRead(A2),DEC); | ||
| + | Serial.print(";"); | ||
| + | Serial.print("L"); // LDR | ||
| + | Serial.print(analogRead(A3),DEC); | ||
| + | Serial.print(";"); | ||
| + | Serial.print("T"); //CTN | ||
| + | Serial.print(analogRead(A4),DEC); | ||
| + | Serial.println(";"); | ||
| + | delay(500); | ||
| + | } | ||
| + | </source> | ||
| + | ==Exo3== | ||
| + | <source lang=c> | ||
| + | #include "serial.h" | ||
| + | #define serialPort "/dev/ttyACM0" // port de la liaison série, à retrouver dans le logiciel arduino. | ||
| + | #define serialDebit B57600 // B suivit de la vitesse à l'identique dans la fonction setup() arduino. | ||
| + | |||
| + | #include <stdio.h> | ||
| + | #include <stdlib.h> | ||
| + | int main() | ||
| + | { | ||
| + | char ch; | ||
| + | int val; // valeur calculée | ||
| + | int arduino = serialOpen(serialPort,serialDebit); | ||
| + | while(1){ | ||
| + | val = 0; | ||
| + | do { | ||
| + | ch=serialGetchar(arduino); | ||
| + | } while(ch != 'R' && ch != 'L' && ch != 'T'); // bien reflechir pour le && | ||
| + | do{ | ||
| + | ch=serialGetchar(arduino); | ||
| + | if (ch != ';') { | ||
| + | printf("%c",ch); | ||
| + | val = val*10 + (ch-'0'); | ||
| + | } else | ||
| + | printf("= %d\n",val); | ||
| + | } while (ch != ';'); | ||
| + | } | ||
| + | } | ||
| + | </source> | ||
| + | |||
| + | ==Exo4== | ||
<source lang=c> | <source lang=c> | ||
#include "serial.h" | #include "serial.h" | ||
#define serialPort "/dev/ttyACM0" // port de la liaison série, à retrouver dans le logiciel arduino. | #define serialPort "/dev/ttyACM0" // port de la liaison série, à retrouver dans le logiciel arduino. | ||
#define serialDebit B57600 // B suivit de la vitesse à l'identique dans la fonction setup() arduino. | #define serialDebit B57600 // B suivit de la vitesse à l'identique dans la fonction setup() arduino. | ||
| + | |||
#include <stdio.h> | #include <stdio.h> | ||
#include <stdlib.h> | #include <stdlib.h> | ||
| + | |||
| + | #define N 30 | ||
| + | #include "SDLfonctions.h" | ||
| + | |||
| + | #define marges 20 | ||
| + | |||
| + | void traceCourbe(int y[],int mini,int maxi,int N) | ||
| + | { | ||
| + | int i,yp,ypp,h=screen->h-2*marges,p=(screen->w-2*marges)/N; | ||
| + | ypp=h-(h*(y[0]-mini))/(maxi-mini)+marges; | ||
| + | SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0)); | ||
| + | for (i=1;i<N;i++) | ||
| + | { | ||
| + | yp=h-(h*(y[i]-mini))/(maxi-mini)+marges; | ||
| + | ligne((i-1)*p+marges,ypp,i*p+marges,yp,0xFFFFFF); | ||
| + | ypp=yp; | ||
| + | } | ||
| + | SDL_Flip(screen); | ||
| + | } | ||
int main() | int main() | ||
{ | { | ||
char c; | char c; | ||
| + | unsigned char i; | ||
int arduino = serialOpen(serialPort,serialDebit); | int arduino = serialOpen(serialPort,serialDebit); | ||
| + | int val,mini=1023,maxi=0; | ||
| + | int tab[N+1]; | ||
| + | for (i=0;i<N+1;i++) tab[i]=0; | ||
| − | while(1) | + | if (SDLstart(800,600)!=0) return -1; |
| + | while(1) | ||
{ | { | ||
| − | do | + | do{ |
| − | |||
c = serialGetchar(arduino); | c = serialGetchar(arduino); | ||
| − | } | + | } while (c!='L'); |
| − | + | val=0; | |
| − | do | + | do{ |
| − | |||
c = serialGetchar(arduino); | c = serialGetchar(arduino); | ||
| − | if(c!=';') | + | if(c!=';') val=val*10+(c-'0'); //algorithme ascii => decimal |
| − | + | } while (c!=';'); | |
| − | + | printf("%d\n",val); | |
| − | + | for (i=0;i<N;i++) tab[i]=tab[i+1]; | |
| − | + | tab[N]=val; | |
| − | + | if (val>maxi) maxi=val; | |
| − | + | if (val<mini) mini=val; | |
| − | + | if (mini!=maxi) traceCourbe(tab,mini,maxi,N+1); | |
| − | |||
| − | |||
} | } | ||
} | } | ||
| + | |||
| + | |||
</source> | </source> | ||
Version actuelle datée du 18 décembre 2013 à 16:28
Exo 1
void setup()
{
Serial.begin(57600);
}
void loop()
{
Serial.print("R");//Photocoupleur par reflexion
Serial.print(analogRead(A2),DEC);
Serial.print(";");
Serial.print("L"); // LDR
Serial.print(analogRead(A3),DEC);
Serial.print(";");
Serial.print("T"); //CTN
Serial.print(analogRead(A4),DEC);
Serial.println(";");
delay(500);
}
Exo3
#include "serial.h"
#define serialPort "/dev/ttyACM0" // port de la liaison série, à retrouver dans le logiciel arduino.
#define serialDebit B57600 // B suivit de la vitesse à l'identique dans la fonction setup() arduino.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char ch;
int val; // valeur calculée
int arduino = serialOpen(serialPort,serialDebit);
while(1){
val = 0;
do {
ch=serialGetchar(arduino);
} while(ch != 'R' && ch != 'L' && ch != 'T'); // bien reflechir pour le &&
do{
ch=serialGetchar(arduino);
if (ch != ';') {
printf("%c",ch);
val = val*10 + (ch-'0');
} else
printf("= %d\n",val);
} while (ch != ';');
}
}
Exo4
#include "serial.h"
#define serialPort "/dev/ttyACM0" // port de la liaison série, à retrouver dans le logiciel arduino.
#define serialDebit B57600 // B suivit de la vitesse à l'identique dans la fonction setup() arduino.
#include <stdio.h>
#include <stdlib.h>
#define N 30
#include "SDLfonctions.h"
#define marges 20
void traceCourbe(int y[],int mini,int maxi,int N)
{
int i,yp,ypp,h=screen->h-2*marges,p=(screen->w-2*marges)/N;
ypp=h-(h*(y[0]-mini))/(maxi-mini)+marges;
SDL_FillRect(screen, 0, SDL_MapRGB(screen->format, 0, 0, 0));
for (i=1;i<N;i++)
{
yp=h-(h*(y[i]-mini))/(maxi-mini)+marges;
ligne((i-1)*p+marges,ypp,i*p+marges,yp,0xFFFFFF);
ypp=yp;
}
SDL_Flip(screen);
}
int main()
{
char c;
unsigned char i;
int arduino = serialOpen(serialPort,serialDebit);
int val,mini=1023,maxi=0;
int tab[N+1];
for (i=0;i<N+1;i++) tab[i]=0;
if (SDLstart(800,600)!=0) return -1;
while(1)
{
do{
c = serialGetchar(arduino);
} while (c!='L');
val=0;
do{
c = serialGetchar(arduino);
if(c!=';') val=val*10+(c-'0'); //algorithme ascii => decimal
} while (c!=';');
printf("%d\n",val);
for (i=0;i<N;i++) tab[i]=tab[i+1];
tab[N]=val;
if (val>maxi) maxi=val;
if (val<mini) mini=val;
if (mini!=maxi) traceCourbe(tab,mini,maxi,N+1);
}
}