====== Le Chaperon Rouge ====== * Porteur du projet : Elodie Lyonnais * Date : 26/01/2015 * Contexte : MACROPROJET#2 {{:wiki:projets:chaperonrouge:lepetitchaperonrouge.pdf|}} ===== Le projet ===== **PRÉSENTATION** Des contes de Charles Perrault, à ceux des frères Grimm en passant par les contes d’Andersen, tous ces contes ont bercé mon enfance et me fascinent encore aujourd’hui. C’est pourquoi, j’ai envisagé d’orienter mon mémoire autour du Conte. La question cruciale que je me pose en tant que graphiste autour du conte c'est Comment, par le biais du graphisme, peut-on aménager des espaces d'expression favorisant l'imaginaire ? Ainsi aujourd'hui sachant que nous sommes dans une époque basé sur les nouvelles technologie je me suis intéressée à la place de ces nouvelles technologie dans le conte. Ce support permettant d'introduire une idées fondamentale : l’interactivité. Dans ce sens j'ai choisis de créer un jeux en reprenant un conte connue: Le Petit Chaperon Rouge. Ici je montre en quelque sorte que tout les contes peuvent être réinventer, il n'y a pas de forme fixe au conte ni de visuel fixe. Ce jeux que j'ai mis au point est pour moi une base de travail pour la suite, ceci est une première phase dans l'élaboration de mon projet de fin d'année qui gardera cette même idée d'interactivité mais plus centré sur la question de l'imaginaire. Rappelons que la cible principale sont les enfants. **ENJEUX** *Introduire de l'interactivité dans le conte *Proposer une nouvelle forme de conte ===== Matériel ===== {{ :wiki:projets:chaperonrouge:montage.jpg?300 |}} * 1 carte ARDUINO * 1 breadboard * 1 connecteur ARDUINO/USB * 5 fils connecteurs mâle/mâle * 1 potentiomètre ===== Montage ===== {{:wiki:projets:chaperonrouge:carte.jpg?300 |}} {{ :wiki:projets:chaperonrouge:montagedessus.jpg?300|}} {{:wiki:projets:chaperonrouge:montage_partiel.jpg?300 |}} {{ :wiki:projets:chaperonrouge:montage_partiel_schema.jpg?200|}} ===== Code Arduino ===== //PARAMETRAGE DES ENTIERS, déclaration des variables int firstSensor = 0; // Premier capteur analogique int secondSensor = 0; // deuxième capteur analogique int inByte = 0; // Entrée d'une série de Byte // INSTRUCTION D'INITIALISATION DES RESSOURCES //Définition des entrées et sorties void setup() { Serial.begin(9600); // Initialisation de la communication série a 9600 bps; initialisation du port begin() précision de la vitesse de transfert while (!Serial) { // Attendre la connection du port serie ; } } // INSTRUCTIONS REPETEES UNE INFINITE DE FOIS TANT QUE LA CARTE EST SOUS TENSION void loop() { if (Serial.available() > 0) { // si nous obtenons un Byte valide, lire les branches analogiques inByte = Serial.read(); // lire les Bytes entrant firstSensor = analogRead(A0)/4; // lire la premiere entree analogique, divise par quatre delay(10); // patienter 10 ms // envoyer les valeurs : Serial.write(firstSensor); Serial.write(secondSensor); Serial.write(etatBouton); } } /// PARAMETRAGES POUR ETABLIR LE CONTACT void establishContact() { while (Serial.available() <= 0) { //instructions à exécuter dans la boucle tant que la condition finale n'est pas atteinte Serial.print('A'); // envoyer la lettre A delay(300); //patienter 300ms } } ===== Code Processing ===== /// Declaration des entiers // Initialisation du lien entre processing et arduino import processing.serial.*; // importer de la librairie Serial myPort; // Le port serie int[] serialInArray = new int[3]; // tableau d'entree de 3 éléments int serialCount = 0; boolean firstContact = false; int value = 0; int xpos; // Librairies son import ddf.minim.*; // Importer de la librairie // Variable son Minim minim; // Declaration de la chanson AudioSnippet jeu; // Chargement des variable images pour les différentes images du jeu PImage bg; PImage loup; // X et Y position du loup, coordonnées du loup float X_loup = 350; float Y_loup = 20; boolean loup_mort = false; // Variable boolean (vraie ou fausse) pour le loup mort float etat_de_mort = 0; int deplacement_auto = 0; // 0 = rien, 1 = droite, 2 = gauche final float vitesse_loup = 5.0; // Vitesse de déplacement du loup // x and y position du vaisseau, coordonnées du vaisseau float x = 380; float y = 580; // x and y postion de tir, coordonnées du tir float tir_x = 380; float tir_y = 580; final float vitesse_balle = 16; // Vitesse de la balle // Taille du tir int taille_tir_x = 12; int taille_tir_y = 12; /// Le contenue de cette fonction est appelé une foi au démarrage du programme void setup() { size (1000,750); // Taille de la fenetre bg = loadImage("fondarbre.png"); // Chargement du fond d'écran rectMode(CENTER); // Emplacement au centre smooth(); // Contours régulier xpos = width/2; // Position x, valeur de x = width/2 // Chargement de l'audio minim = new Minim(this); jeu = minim.loadSnippet("petitchaperonrouge.mp3"); //Chargement du loup loup = loadImage("loup-okay.png"); println("loup.height = " + loup.height); // Dimension du loup // Liste les ports series printArray(Serial.list()); println("portname"); String portName = Serial.list()[0]; myPort = new Serial(this, portName, 9600); } /// Le contenue de cette fonction est appelé en boucle void draw() { background (bg); // Fond d'écran noStroke(); // Pas de contours fill(255); // Couleur du fond // Essai tir tir_y = tir_y - vitesse_balle; // Vaiseau String name; float pos = map(xpos, 245, 12, 0, 1000); // Parametrages pour le déplacement du vaiseau via le potentiometre compris entre 12 et 245, valeurs de pos smooth(); // Contours régulier fill(255,0,0); // Couleur du vaisseau ellipse(pos,y,100,100); // Taille du vaiseau // Dessiner le tir fill(255); // Couleur du tir rect(pos, tir_y, taille_tir_x, taille_tir_y ); // Dimension du tir // Déclaration des différents programmes crée loup(); musique(); } // Comportement du loup void loup() { float pos = map(xpos, 245, 12, 0, 1000); // Parametrages pour le déplacement du vaiseau compris entre 12 et 245, valeurs de pos // Colision loup balle, si la balle atteint le format du loup il disparait if ( tir_y - taille_tir_y / 2 < Y_loup + loup.height && tir_y + taille_tir_y / 2 > Y_loup && pos + taille_tir_x / 2 > X_loup && pos - taille_tir_x / 2 < X_loup + loup.width) { loup_mort = true; } // Affichage loup if (!loup_mort) { tint(255); // Couleur du loup quand il meurt image(loup, X_loup, Y_loup); // Taille de l'image loup } else if (etat_de_mort < 4) { float p = 180 * sin(etat_de_mort) + 50; tint(p, 0, 0, p); // Vitesse du loup image(loup, X_loup, Y_loup); // Taille de l'image loup etat_de_mort += 0.1; } // Déplacement aléatoire du loup int hasard = (int) random(300); // Genere un nombre entre 0 et 300 if (hasard < 4) deplacement_auto = 2; else if (hasard < 8) deplacement_auto = 1; hasard = (int) random(6); // Genere un nombre entre 0 et 6 if (deplacement_auto == 0 && hasard > 4) deplacement_auto = (int) random(1, 3); // Genere un nombre netre 1 et 3 boolean bloque = true; if (deplacement_auto == 1 && X_loup + vitesse_loup < width - loup.width) { X_loup += min(vitesse_loup, width - (X_loup + loup.width)); bloque = false; } if (deplacement_auto == 2 && X_loup - vitesse_loup > 0) { X_loup -= min(vitesse_loup, X_loup); bloque = false; } if (bloque) deplacement_auto = 2 - deplacement_auto + 1; } /// Cette fonction est utilisé pour tout action sur le clavier void keyPressed() { // Tirer = Espace if (key == ' ') {// si j'appuie sur la touche espace lancement du tir if (!loup_mort) { tir_y = y; tir_x = xpos; } else { X_loup = random(50, width - loup.width - 50); loup_mort = false; etat_de_mort = 0; } } } /// Parametre de la musique void musique(){ //Pour que le son continue à jouer if ( jeu.isPlaying()== false ){ jeu.rewind(); jeu.play();} } /// Parametrages de la connection à arduino void serialEvent(Serial myPort) { int inByte = myPort.read(); // Lire les bytes entrant if (firstContact == false) { // Parametre entrés pour verifier le bon fonctiionnement du programme println("debut first contact"); if (inByte == 'A') { // Si le premier Byte reçu est un "A" myPort.clear(); // Vider la memoire tampn serie firstContact = true; // Noter que le premier contact du microcontroleur s'est effectué println("ecriture sur le port serie de la lettre A"); myPort.write('A'); println("fin first contact"); } } // Sinon ajouter le Byte entrant au tableau else { serialInArray[serialCount] = inByte; serialCount++; if (serialCount > 2 ) { // Si on a 3 Bytes, que serialCount est superieur a 2 xpos = serialInArray[0]; // Envoyer la valeur xpos au premier serialInArray myPort.write('A'); // Envoyer un "A" pour demander de nouvelles captures du lecteur serialCount = 0; // Remettre a zero le serialCount } } } ===== Remarques ===== Espace d'échange concernant ce sujet. Cliquez sur modifier et commentez! TR: images?