Cours:ArduinoSdlCorrection : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
Ligne 8 : Ligne 8 :
 
#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');
        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("%c",c);
+
printf("%d\n",val);
            }
+
for (i=0;i<N;i++) tab[i]=tab[i+1];
            else
+
tab[N]=val;
            {
+
if (val>maxi) maxi=val;
                printf("\n");
+
if (val<mini) mini=val;
            }
+
if (mini!=maxi) traceCourbe(tab,mini,maxi,N+1);
        }
 
        while (c!=';');
 
 
     }
 
     }
  
 
}
 
}
 +
 +
 
</source>
 
</source>

Version du 11 décembre 2013 à 16:53

Retour à la liste des Tps

Enoncé de TP


#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);
    }

}