import processing.serial.*; import processing.video.*; Movie intro, intro1, vipng, vijpeg, visvg, viwav, vimp3, viRetroPng, viRetroJpeg, viRetroSvg, viRetroWav, viRetroMp3; Serial port; PImage imgAudio, imgImagen, imgCo, imgCh, imgUser, imgErr, imgMC1, imgMC2, imgMC3, imgPrePNG, imgPreJPEG, imgPreSVG, imgRBien, imgRMal, imgRRegular, score; int state, w, h, points, paso; boolean played, pngOk, jpegOk, svgOk, wavOk, mp3Ok, pngErr, jpegErr, svgErr, wavErr, mp3Err, pngUsed, jpegUsed, svgUsed, wavUsed, mp3Used, pngUsed1, jpegUsed1, svgUsed1, wavUsed1, mp3Used1, clic, typeData; PFont f; int resp; String png, jpeg, svg; float time; float duration; float initTime; float currentTime; int introView; int puntaje; void setup() { size(1280, 720); //port = new Serial (this, "COM3", 9600); port = new Serial(this, Serial.list()[1], 9600); state = 11; //0 espera lector // 1 png 2 jpeg 3 svg 10 ya usado // 11 reposo w = 1280; h = 720; points = 0; paso=0; puntaje = 0; introView = 0; played = false; pngUsed = false; jpegUsed = false; svgUsed = false; wavUsed = false; mp3Used = false; pngOk = false; jpegOk = false; svgOk = false; wavOk = false; mp3Ok = false; pngErr = false; jpegErr = false; svgErr = false; wavErr = false; mp3Err = false; clic = true; typeData = false; f = createFont("Arial", 16, true); // STEP 2 Create Font resp = 100; png = ""; jpeg = ""; svg = ""; intro = new Movie(this, "Intro.mp4"); intro1 = new Movie(this, "intro1.mp4"); vipng = new Movie(this, "PNG.mp4"); vijpeg = new Movie(this, "JPEG.mp4"); visvg= new Movie(this, "SVG.mp4"); viwav= new Movie(this, "WAV.mp4"); vimp3= new Movie(this, "MP3.mp4"); intro.loop(); viRetroPng = new Movie(this, "retroPNG.mp4"); viRetroJpeg = new Movie(this, "retroJPEG.mp4"); viRetroSvg= new Movie(this, "retroSVG.mp4"); viRetroWav = new Movie(this, "retroPNG.mp4"); viRetroMp3 = new Movie(this, "retroJPEG.mp4"); imgMC1 = loadImage("mc1.png"); imgMC2 = loadImage("mc2.png"); imgMC3 = loadImage("mc3.png"); imgCh = loadImage("check.png"); imgCo = loadImage("bot.png"); imgUser = loadImage("user.png"); imgErr = loadImage("err.png"); score = loadImage("score.png"); imgAudio = loadImage("audio.png"); imgImagen = loadImage("imagen.png"); imgPrePNG = loadImage("preguntaPNG.png"); imgPreJPEG = loadImage("preguntaJPEG.png"); imgPreSVG = loadImage("preguntaSVG.png"); imgRBien = loadImage("rbien.png"); imgRMal = loadImage("rmal.png"); imgRRegular = loadImage("rregular.png"); textFont(f, 40); fill(0); } void serialEvent(Serial port) { if (state==0) { String lector = port.readStringUntil('\n'); if (lector!=null) { if (lector.contains("png")) { if (!pngUsed) { state = 1; vipng.play(); } else { state = 10; } } else if (lector.contains("jpeg")) { if (!jpegUsed) { state = 4; vijpeg.play(); } else { state = 10; } } else if (lector.contains("svg")) { if (!svgUsed) { state = 7; visvg.play(); } else { state = 10; } } } // fin lectror null } // fin de state 0 if (state==16) { String lector = port.readStringUntil('\n'); if (lector!=null) { if (lector.contains("wav")) { if (!pngUsed) { state = 17; viwav.play(); } else { state = 40; } } else if (lector.contains("mp3")) { if (!jpegUsed) { state = 20; vimp3.play(); } else { state = 40; } } } // fin lectror null } // fin de state 16 if (state == 12) { String lector = port.readStringUntil('\n'); if (lector!=null) { if (paso==0) { if (lector.contains("png")) { pngUsed1 = true; pngErr = false; pngUsed1 = false; jpegUsed1 = false; svgUsed1 = false; paso=1; puntaje++; } else if (lector.contains("jpeg")) { jpegUsed1 = true; jpegErr = true; if(puntaje > 0) puntaje--; } else if (lector.contains("svg")) { svgUsed1 = true; svgErr = true; if(puntaje > 0) puntaje--; } }else if (paso==1) { if (lector.contains("png")) { pngUsed1 = true; pngErr = true; if(puntaje > 0) puntaje--; } else if (lector.contains("jpeg")) { jpegUsed = true; jpegErr = false; paso=2; pngUsed1 = false; jpegUsed1 = false; svgUsed1 = false; puntaje++; } else if (lector.contains("svg")) { svgUsed1 = true; svgErr = true; if(puntaje > 0) puntaje--; } }else if (paso==2) { if (lector.contains("png")) { pngUsed1 = true; pngErr = true; if(puntaje > 0) puntaje--; } else if (lector.contains("jpeg")) { jpegUsed1 = true; jpegErr = true; if(puntaje > 0) puntaje--; } else if (lector.contains("svg")) { svgUsed = true; svgErr = false; pngUsed1 = false; jpegUsed1 = false; svgUsed1 = false; puntaje++; state = 13; initTime = millis(); } } } // fin lectror null }//fin state 12 if (state == 23) { String lector = port.readStringUntil('\n'); if (lector!=null) { if (paso==0) { if (lector.contains("wav")) { wavUsed1 = true; wavErr = false; wavUsed = false; mp3Used = false; paso=1; puntaje++; } else if (lector.contains("mp3")) { mp3Used1 = true; mp3Err = true; if(puntaje > 0) puntaje--; } }else if (paso==1) { if (lector.contains("wav")) { wavUsed1 = true; wavErr = true; if(puntaje > 0) puntaje--; } else if (lector.contains("mp3")) { mp3Used1 = true; mp3Err = false; wavUsed = false; mp3Used = false; puntaje++; state = 24; initTime = millis(); } } } // fin lectror null }//fin state 23 } void reset() { introView = 0; state = 11; points = 0; paso = 0; puntaje = 0; pngUsed = false; jpegUsed = false; svgUsed = false; wavUsed = false; mp3Used = false; clic = true; typeData = false; viRetroPng.stop(); viRetroJpeg.stop(); viRetroSvg.stop(); intro.loop(); intro1.stop(); } void draw() { if (state!=50) { if(introView == 0) image(intro, 0, 0, w, h); else image(intro1, 0, 0, w, h); } if(introView == 1){ text(puntaje, 1155, 100); image(score, 1100, 65, 45, 45); } switch(state) { case 0: // reposo //image(imgPasTarj,250, 100, 750, 250); text("Pasa un cubo por el lector: ", 400, 300); break; case 1: // png //text("Explicacion PNG", 480, 80); image(vipng, 300, 100, 700, 400); time = vipng.time(); duration = vipng.duration(); if(time > duration - 5) { image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); clic=true; } break; case 2: // pregunta image(imgCo, 400, 500, 250, 110); text("Verdadero", 435, 570); image(imgCo, 680, 500, 250, 110); text("Falso", 750, 570); image(imgPrePNG, 300, 100, 700, 400); break; case 3: // retroalimentacion png image(viRetroPng, 300, 100, 700, 400); time = viRetroPng.time(); duration = viRetroPng.duration(); if(pngOk) image(imgCh, 400, 500, 110, 110); else image(imgErr, 400, 500, 110, 110); if(time > duration - 2) { image(imgCo, 540, 500, 250, 110); text("Continuar", 590, 570); clic=true; } break; case 4: // jpeg //text("Explicacion JPEG", 480, 80); image(vijpeg, 300, 100, 700, 400); time = vijpeg.time(); duration = vijpeg.duration(); if(time > duration - 5) { image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); clic=true; } break; case 5: // preunta jpeg image(imgCo, 400, 500, 250, 110); text("Verdadero", 435, 570); image(imgCo, 680, 500, 250, 110); text("Falso", 750, 570); //text("Pregunta JPEG", 480, 300); image(imgPreJPEG, 300, 100, 700, 400); break; case 6: // retro jpeg //text("Retroalimentacion JPG", 480, 300); image(viRetroJpeg, 300, 100, 700, 400); time = viRetroJpeg.time(); duration = viRetroJpeg.duration(); if(jpegOk) image(imgCh, 400, 500, 110, 110); else image(imgErr, 400, 500, 110, 110); if(time > duration - 2) { image(imgCo, 540, 500, 250, 110); text("Continuar", 590, 570); clic=true; } break; case 7: // svg //text("Explicacion SVG", 480, 80); image(visvg, 300, 100, 700, 400); time = visvg.time(); duration = visvg.duration(); if(time > duration - 5) { image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); clic=true; } break; case 8: // pregunta SVG image(imgCo, 400, 500, 250, 110); text("Verdadero", 435, 570); image(imgCo, 680, 500, 250, 110); text("Falso", 750, 570); //text("Pregunta SVG", 480, 300); image(imgPreSVG, 300, 100, 700, 400); break; case 9: // retro svg //text("Retroalimentacion SVG", 480, 300); image(viRetroSvg, 300, 100, 700, 400); time = viRetroSvg.time(); duration = viRetroSvg.duration(); if(svgOk) image(imgCh, 400, 500, 110, 110); else image(imgErr, 400, 500, 110, 110); if(time > duration - 2) { image(imgCo, 540, 500, 250, 110); text("Continuar", 590, 570); clic=true; } break; case 10: // formato ya visualizado y evaluado image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); text("La tarjeta ya fue leida", 480, 300); //image(imgYaVisto, 250, 100, 750, 250); break; case 11: // intro image(imgCo, 540, 500, 250, 110); fill(255); text("Iniciar", 610, 570); break; case 12: // pregunta funcional String text = "Selecciona un Cubo..."; text(text, (width*0.5)-(textWidth(text)/2), 120); if (paso == 0) { image(imgMC1, 300, 100, 700, 400); if (pngUsed1) { if (pngErr) { image(imgErr, 300, 500, 120, 120); } else { image(imgCh, 300, 500, 120, 120); } } if (jpegUsed1) { if (jpegErr) { image(imgErr, 300, 500, 120, 120); } else { image(imgCh, 300, 500, 120, 120); } } if (svgUsed1) { if (svgErr) { image(imgErr, 300, 500, 120, 120); } else { image(imgCh, 300, 500, 120, 120); } } } if (paso == 1) { image(imgMC2, 300, 100, 700, 400); if (pngUsed1) { if (pngErr) { image(imgErr, 600, 500, 120, 120); } else { image(imgCh, 600, 500, 120, 120); } } if (jpegUsed1) { if (jpegErr) { image(imgErr, 600, 500, 120, 120); } else { image(imgCh, 600, 500, 120, 120); } } if (svgUsed1) { if (svgErr) { image(imgErr, 600, 500, 120, 120); } else { image(imgCh, 600, 500, 120, 120); } } image(imgCh, 300, 500, 120, 120); } if (paso == 2) { image(imgMC3, 300, 100, 700, 400); if (pngUsed1) { if (pngErr) { image(imgErr, 900, 500, 120, 120); } else { image(imgCh, 900, 500, 120, 120); } } if (jpegUsed1) { if (jpegErr) { image(imgErr, 900, 500, 120, 120); } else { image(imgCh, 900, 500, 120, 120); } } if (svgUsed) { if (svgErr) { image(imgErr, 900, 500, 120, 120); } else { image(imgCh, 900, 500, 120, 120); } } image(imgCh, 300, 500, 120, 120); image(imgCh, 600, 500, 120, 120); } break; case 13: String textF = "EvaluaciĆ³n Metodologica-Funcional terminada!"; text(textF, (width*0.5)-(textWidth(textF)/2), 330); image(imgCh, 300, 500, 120, 120); image(imgCh, 600, 500, 120, 120); image(imgCh, 900, 500, 120, 120); currentTime = millis(); if(currentTime > initTime+5000) state = 14; break; case 14:// retro final if(puntaje < 2){ image(imgRMal, 300, 100, 700, 400); } else if(puntaje >= 2 && puntaje < 5) { image(imgRRegular, 300, 100, 700, 400); } else if(puntaje >= 5) { image(imgRBien, 300, 100, 700, 400); } image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); break; case 15: image(imgAudio, (width*.75)-150, (height*.5)-140, 300, 280); text("Audio",(width*.75)-(textWidth("Audio")/2), (height*.75)); image(imgImagen, (width*.25)-150, (height*.5)-150, 300, 300); text("Imagen",(width*.25)-(textWidth("Imagen")/2), (height*.75)); break; case 16: text("Pasa un cubo por el lector: ", 400, 300); break; case 17: // wav image(viwav, 300, 100, 700, 400); time = viwav.time(); duration = viwav.duration(); if(time > duration - 5) { image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); clic=true; } break; case 18: // pregunta wav image(imgCo, 400, 500, 250, 110); text("Verdadero", 435, 570); image(imgCo, 680, 500, 250, 110); text("Falso", 750, 570); break; case 19: // retro wav image(viRetroWav, 300, 100, 700, 400); time = viRetroWav.time(); duration = viRetroWav.duration(); if(wavOk) image(imgCh, 400, 500, 110, 110); else image(imgErr, 400, 500, 110, 110); if(time > duration - 2) { image(imgCo, 540, 500, 250, 110); text("Continuar", 590, 570); clic=true; } break; case 20: // mp3 image(vimp3, 300, 100, 700, 400); time = vimp3.time(); duration = vimp3.duration(); if(time > duration - 5) { image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); clic=true; } break; case 21: // pregunta mp3 image(imgCo, 400, 500, 250, 110); text("Verdadero", 435, 570); image(imgCo, 680, 500, 250, 110); text("Falso", 750, 570); break; case 22: // retro mp3 image(viRetroMp3, 300, 100, 700, 400); time = viRetroMp3.time(); duration = viRetroMp3.duration(); if(mp3Ok) image(imgCh, 400, 500, 110, 110); else image(imgErr, 400, 500, 110, 110); if(time > duration - 2) { image(imgCo, 540, 500, 250, 110); text("Continuar", 590, 570); clic=true; } break; case 23: // Pregunta funcioanl video String textV = "Selecciona un Cubo..."; text(textV, (width*0.5)-(textWidth(textV)/2), 120); if (paso == 0) { //image(imgMC1, 300, 100, 700, 400); if (wavUsed1) { if (wavErr) { image(imgErr, 450, 500, 120, 120); } else { image(imgCh, 450, 500, 120, 120); } } if (mp3Used1) { if (mp3Err) { image(imgErr, 450, 500, 120, 120); } else { image(imgCh, 450, 500, 120, 120); } } } if (paso == 1) { //image(imgMC2, 300, 100, 700, 400); if (wavUsed1) { if (wavErr) { image(imgErr, 750, 500, 120, 120); } else { image(imgCh, 750, 500, 120, 120); } } if (mp3Used1) { if (mp3Err) { image(imgErr, 750, 500, 120, 120); } else { image(imgCh, 750, 500, 120, 120); } } image(imgCh, 450, 500, 120, 120); } break; case 24: String textFV = "EvaluaciĆ³n Metodologica-Funcional terminada!"; text(textFV, (width*0.5)-(textWidth(textFV)/2), 330); image(imgCh, 450, 500, 120, 120); image(imgCh, 750, 500, 120, 120); currentTime = millis(); if(currentTime > initTime+5000) state = 25; break; case 25:// retro final if(puntaje == 1){ image(imgRMal, 300, 100, 700, 400); } else if(puntaje >= 2 && puntaje < 4) { image(imgRRegular, 300, 100, 700, 400); } else if(puntaje == 4) { image(imgRBien, 300, 100, 700, 400); } image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); break; case 40: image(imgCo, 540, 500, 250, 110); text("Continuar", 580, 570); text("La tarjeta ya fue leida", 480, 300); break; } }// fin draw void mousePressed() { if(typeData){ // Imagen if ((mouseY<((height * .5)) + 200)&&(mouseY>(height * .5 - 150))) { if ((mouseX<((width * .25) + 150))&&(mouseX>(width * .25 - 150))) { state=0; typeData = false; } } // Audio if ((mouseY<((height * .5)) + 200)&&(mouseY>(height * .5 - 140))) { if ((mouseX<((width * .75) + 150))&&(mouseX>(width * .75 - 150))) { state=16; typeData = false; } } } if(clic) { if ((mouseY<((height * 0.75)) + 35)&&(mouseY>(height * 0.75 - 35))) { if ((mouseX<((width * 0.5) + 100))&&(mouseX>(width * 0.5 - 100))) { switch(state) { case 0: // reposo imagen break; case 1: // png state=2; clic=false; break; case 3: // retro png vipng.stop(); if (pngUsed & jpegUsed & svgUsed) { state=12; } else { state=0; } break; case 4: // jpeg state=5; clic=false; break; case 6: // retro jpeg vijpeg.stop(); if (pngUsed & jpegUsed & svgUsed) { state=12; } else { state=0; } break; case 7: // svg state=8; clic=false; break; case 9: // retro svg visvg.stop(); if (pngUsed & jpegUsed & svgUsed) { state=12; } else { state=0; } break; case 10: // repetido state=0; break; case 11: // inicio state=15; clic=false; typeData = true; intro.stop(); intro1.loop(); introView = 1; break; case 12: // pregunta funcional/ metodologico break; case 14: // retroalimentacion final state=0; reset(); break; case 16: // reposo audio break; case 17: // wav state=18; clic=false; break; case 19: // retro wav viwav.stop(); if (wavUsed & mp3Used) { state=23; } else { state=16; } break; case 20: // jpeg state=21; clic=false; break; case 22: // retro mp3 vimp3.stop(); if (wavUsed & mp3Used) { state=23; } else { state=16; } break; case 25: // retroalimentacion final state=0; reset(); break; case 40: // repetido state=16; break; } if (state>=50) { reset(); } if (state==12) { pngUsed = false; jpegUsed = false; svgUsed = false; } } } } } void keyPressed() { if (keyCode == RIGHT) { } if (keyCode == 'V') { switch(state) { case 2: pngOk = true; pngUsed = true; viRetroPng.play(); state++; puntaje++; break; case 5: jpegOk = false; jpegUsed = true; viRetroJpeg.play(); state++; if(puntaje > 0) puntaje--; break; case 8: svgOk = true; svgUsed = true; viRetroSvg.play(); state++; puntaje++; break; case 18: wavOk = true; wavUsed = true; viRetroWav.play(); state++; puntaje++; break; case 21: mp3Ok = false; mp3Used = true; viRetroMp3.play(); state++; if(puntaje > 0) puntaje--; break; } } else if (keyCode == 'F') { switch(state) { case 2: pngOk = false; pngUsed = true; viRetroPng.play(); state++; if(puntaje > 0) puntaje--; break; case 5: jpegOk = true; jpegUsed = true; viRetroJpeg.play(); state++; puntaje++; break; case 8: svgOk = false; svgUsed = true; viRetroSvg.play(); state++; if(puntaje > 0) puntaje--; break; case 18: wavOk = false; wavUsed = true; viRetroWav.play(); if(puntaje > 0) puntaje--; state++; break; case 21: mp3Ok = true; mp3Used = true; viRetroMp3.play(); state++; puntaje++; break; } } if (state==0) { if (keyCode == 'P') { if (!pngUsed) { state = 1; vipng.play(); } else { state = 10; } } else if (keyCode == 'J') { if (!jpegUsed) { state = 4; vijpeg.play(); } else { state = 10; } } else if (keyCode == 'S') { if (!svgUsed) { state = 7; visvg.play(); } else { state = 10; } } } if (state==16) { if (keyCode == 'W') { if (!wavUsed) { state = 17; viwav.play(); } else { state = 40; } } else if (keyCode == 'M') { if (!mp3Used) { state = 20; vimp3.play(); } else { state = 40; } } } if (state==12) { if(paso==0){ if (keyCode == 'P') { pngUsed1 = true; pngErr = false; pngUsed1 = false; jpegUsed1 = false; svgUsed1 = false; paso=1; puntaje++; } else if (keyCode == 'J') { jpegUsed1 = true; jpegErr = true; if(puntaje > 0) puntaje--; } else if (keyCode == 'S') { svgUsed1 = true; svgErr = true; if(puntaje > 0) puntaje--; } } else if(paso==1){ if (keyCode == 'P') { pngUsed1 = true; pngErr = true; if(puntaje > 0) puntaje--; } else if (keyCode == 'J') { jpegUsed = true; jpegErr = false; paso=2; pngUsed1 = false; jpegUsed1 = false; svgUsed1 = false; puntaje++; } else if (keyCode == 'S') { svgUsed1 = true; svgErr = true; if(puntaje > 0) puntaje--; } } else if(paso==2){ if (keyCode == 'P') { pngUsed1 = true; pngErr = true; if(puntaje > 0) puntaje--; } else if (keyCode == 'J') { jpegUsed1 = true; jpegErr = true; if(puntaje > 0) puntaje--; } else if (keyCode == 'S') { svgUsed = true; svgErr = false; pngUsed1 = false; jpegUsed1 = false; svgUsed1 = false; state = 13; puntaje++; initTime = millis(); } } } if (state==23) { if(paso==0){ if (keyCode == 'W') { wavUsed1 = true; wavErr = false; wavUsed = false; mp3Used = false; paso=1; puntaje++; } else if (keyCode == 'M') { mp3Used1 = true; mp3Err = true; if(puntaje > 0) puntaje--; } } else if(paso==1){ if (keyCode == 'W') { wavUsed1 = true; wavErr = true; if(puntaje > 0) puntaje--; } else if (keyCode == 'M') { mp3Used1 = true; mp3Err = false; wavUsed = false; mp3Used = false; puntaje++; state = 24; initTime = millis(); } } } } void movieEvent(Movie m) { m.read(); }