Cours:ArduinoSdlCorrection
Révision datée du 11 décembre 2013 à 16:53 par Bjacquot (discussion | contributions)
#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);
}
}