Semana 12¶
Evaluación 3¶
Enunciado¶
Realizar los siguientes proyectos:
- De la semana 10 el ejercicio 11, reto A y reto B
- De la semana 11 el reto de la sesión 2
Entrega¶
Crear una carpeta. En esa carpeta crear 4 más así: semana10_ej11, semanana10_retoA, semana10_retoB, semana11_reto.
En cada carpeta guardar los proyectos de Arduino.
Incluir un archivo .pdf que contenga un enlace a un video-sustentación.
El video sustentación debe tener los siguientes elementos por cada proyecto:
- Hacer un introducción donde diga su nombre y cuántos retos pudo realizar correctamente y cuáles no.
- Mostrar cómo se compila cada código.
- Mostar cómo se lanza cada programa.
- Hacer un demo de funcionamiento de cada proyecto.
- Explicar detalladamente cada programa. OJO: no se trata de mostar solo las partes del programa,
se trata de explicar detalladamente cómo funciona así:
- Primero explicar en un TABLERO cuál es la arquitectura de los programas, que partes tiene, cómo es el concepto de su solución y por qué lo solucionó, de esta manera y cómo es el esquema de direccionamiento donde indique direcciones IP y puertos.
- Segundo, explicar el código.
- Tercero, indicar qué dificultades tuvo solucionando los retos y cómo las superó.
Subir el trabajo aquí
El plazo es hasta el sábado 18 de abril hasta las 11:59 p.m.
Nota Final¶
La nota final será = La suma de cada reto ponderada con su sustentación (Funcionamiento * sustentación) y luego dividida por 4.
El funcionamiento se califica como 0 o 5. Es decir, funciona o no funciona. La sustentación es un factor que va de 0 a 1.
El factor será:
- 1 si incluye todos los elementos solicitados en el video.
- 0.8 se incluye todo lo solicitado pero hay uno o dos errores conceptuales leves que no afectan el planteamiento
- 0.6 se incluye todo lo solicitado pero hay vacíos en las explicaciones
- 0.4 se incluye todo lo solicitado pero hay errores y vacíos conceptuales.
- 0 No se incluye todo lo pedido o hay errores conceptuales graves.
Sesión 1¶
En esta sesión vamos a trabajar con este material.
ES FUNDAMENTAL, repasar de nuevo a fondo cómo fuciona ardity.
Sesión 2¶
Reto¶
Una vez analizado el material, se propone realizar una aplicación simple en Unity que se conecte con una aplicación como hercules. (Y si te animas a conectarlo con el celular en vez de hércules?)
Reto¶
Repita el reto anterior, pero esta vez conecte Unity con un ESP32. Recuerde, haga que el sensor envíe datos y Unity los reciba.
Ayuda para el reto¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 | using System.Collections;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
public class comm : MonoBehaviour
{
private static comm instance;
private Thread receiveThread;
private UdpClient receiveClient;
private IPEndPoint receiveEndPoint;
public string ip = "127.0.0.1";
public int receivePort = 32002;
private bool isInitialized;
private Queue receiveQueue;
public GameObject cube;
private Material m_Material;
private void Awake()
{
Initialize();
}
private void Start()
{
m_Material = cube.GetComponent<Renderer>().material;
}
private void Initialize()
{
instance = this;
receiveEndPoint = new IPEndPoint(IPAddress.Parse(ip), receivePort);
receiveClient = new UdpClient(receivePort);
receiveQueue = Queue.Synchronized(new Queue());
receiveThread = new Thread(new ThreadStart(ReceiveDataListener));
receiveThread.IsBackground = true;
receiveThread.Start();
isInitialized = true;
}
private void ReceiveDataListener()
{
while (true)
{
try
{
byte[] data = receiveClient.Receive(ref receiveEndPoint);
string text = Encoding.UTF8.GetString(data);
SerializeMessage(text);
}
catch (System.Exception ex)
{
Debug.Log(ex.ToString());
}
}
}
private void SerializeMessage(string message)
{
try
{
string[] chain = message.Split(' ');
string key = chain[0];
float value = 0;
if (float.TryParse(chain[1], out value))
{
receiveQueue.Enqueue(value);
}
}
catch (System.Exception e)
{
Debug.Log(e.ToString());
}
}
private void OnDestroy()
{
TryKillThread();
}
private void OnApplicationQuit()
{
TryKillThread();
}
private void TryKillThread()
{
if (isInitialized)
{
receiveThread.Abort();
receiveThread = null;
receiveClient.Close();
receiveClient = null;
Debug.Log("Thread killed");
isInitialized = false;
}
}
void Update()
{
if (receiveQueue.Count != 0)
{
float counter = (float)receiveQueue.Dequeue();
if(counter == 1F) m_Material.color = Color.black;
if(counter == 2F) m_Material.color = Color.red;
}
}
}
|