/*Ejemplo 1 – Conteo de tiempo en microsegundos
Función micros
Devuelve el número de microsegundos (μs) desde que la placa
Arduino empezó a ejecutar el sketch. Este número
(de tipo unsigned long) se reseteará a cero aproximadamente
después de 70 minutos. Esta instrucción tiene una resolución
de 4 μs (es decir, que el valor retornado es siempre un
múltiplo de cuatro). Recordar que 1.000 μs es un milisegundo
y por tanto, .1000.000 μs es un segundo. No tiene parámetros.
el mismo tipo que la que devuelve micros()*/
/*
unsigned long time; //Declara un variable
void setup(){
Serial.begin(9600); //Inicializa la comunicación serial
}
void loop(){
time = micros(); //Consulta los microsegundos desde que se inició el sketch
Serial.println(time); //Imprime el valor en el monitor serial
delay(1000); //Espera 1 segundo
}
*/
/*Ejemplo 2 – Como funciona millis()*/
/*
unsigned long inicio, fin, transcurrido; // Declaramos 3 variables
void setup(){
Serial.begin(9600); //Inicializa la comunicación serial
}
void loop(){
inicio=millis(); //Consulta los milisegundos desde que se inició el sketch
delay(1000); //espera un segundo
fin=millis(); //Consulta los milisegundos desde que se inició el sketch
transcurrido=fin-inicio; //Calcula el tiempo desde la última lectura
Serial.println(transcurrido); //Imprime el valor en el monitor serial
delay(500); //espera 0.5 segundos
}
*/
/*
Las funciones delay() y delayMicroseconds() como lo
mencionamos anteriormente, ponen en pausa el sketch,
lo cual puede resultar un problema cuando tenemos otras
tareas que atender, y este problema se ve acentuado
cuando los tiempos de espera son largos. Para resolver
esto es recomendable usar la función millis() para
controlar esos tiempos. En el siguiente ejemplo veremos
como hacer parpadear un led usando millis(). Y podemos
usar una programación similar para atender eventos
periódicos.
Ejemplo 3 – Hacer parpadear un led con millis()*/
/*
int estadoLed; //guarda el estado del led (encendido o apagado)
int periodo = 1000; // tiempo que esta el LED en alto y bajo
unsigned long tiempoAnterior = 0; //guarda tiempo de referencia para comparar
#define led 2
void setup() {
pinMode(led,OUTPUT); //configura la salida
}
void loop() {
if(millis()-tiempoAnterior>=periodo){ //si ha transcurrido el periodo programado
estadoLed=!estadoLed; //cambia el estado del led cada 100ms
digitalWrite(led,estadoLed); //actualiza el estado del led
tiempoAnterior=millis(); //guarda el tiempo actual como referencia
}
}
*/
/*
Ejemplo 4 – Contar un periodo de tiempo con millis()
En el siguiente ejemplo tenemos el caso de un periodo de tiempo
que necesitamos medir pero que no se repite, para probarlo
conectamos un pulsador al pin 8 y a tierra y, usaremos el LED
del pin 2 para ver su funcionamiento. Cada vez que presionemos
el pulsador, el LED del pin 2 se apagara por 3 segundos
(al iniciar el programa el LED esta apagado, se encenderá tres
segundos después de la primera vez que lo pulse).
*/
/*
int periodo = 3000; // tiempo para que el led se encienda
byte temp = 0; //estado del temporizador, 1= activo 0= inactivo
unsigned long tiempoAnterior = 0; //guarda tiempo de referencia para comparar
#define led 2
#define pulsador 8
void setup() {
pinMode(led,OUTPUT); //configura la salida
//tengo un pulsador conectado al pin 8 usando la resistencia pull-up
//cuando lo presiono leo cero
pinMode(pulsador,INPUT_PULLUP); //configura la entrada con resistencia pull-up
}
void loop() {
if (digitalRead(pulsador)==0) { //si el pulsador fue presionado
tiempoAnterior=millis(); //guarda el tiempo actual como referencia
temp = 1; //indica que esta activo el temporizador
digitalWrite(led,LOW); //apaga el LED
}
if((millis()-tiempoAnterior>=periodo)&&temp==1){ //si ha transcurrido el periodo programado
digitalWrite(led,HIGH); //enciendo el LED
temp = 0; //y desactivo el temporizador
}
}
*/
//Semaforo con la función mills()
//Sección de declaración de variables
/*
int verde = 2; //v=2
int amarillo = 3;//a=3
int rojo = 4;//r=4
int tiempoVerde =5000;//t=5000
int tiempoAmarillo =2000;//t1=2000
int tiempoRojo =4000;//t2=4000
unsigned long tv =0;//ta=0
unsigned long ta =0;//tb=0
unsigned long tr =0;//tc=0
bool estadoVerde =true;//stado=true
bool estadoAmarillo =true;//stado1=true
bool estadoRojo =true;//stado2=true
//Sección de llamada "void setup()" delimitada por
//llaves de apertura y cierre. Es la primera función
//a ejecutar en el programa.
//Se ejecuta una única vez en el momento de encender o
//resetear la placa Arduino. Se utiliza para inicializar
//los modos de trabajo de los pines E/S (pinMode), tambien
//para la comunicación serie.
void setup(){
pinMode(verde,OUTPUT);
pinMode(amarillo,OUTPUT);
pinMode(rojo,OUTPUT);
digitalWrite(verde,HIGH);
digitalWrite(amarillo,LOW);
digitalWrite(rojo,LOW);
}
//Sección llamada "void loop()" delimitada por llaves
//delimitada por llaves de apertura y cierre.
//ejecuta el código que se ejecuta continuamente leyendo
//entraadas , activando salidas, etc. Esta función es
//el núcleo de todos los programas Arduino y hace la mayor
//parte del trabajo. Se ejecuta justo después de la
//sección "void setup()"infinitas veces hasta que la placa se
// apague o resetee.
void loop(){
/*Control de flujo condicional if - else if - ... - else¶
En muchas ocasiones interesa evaluar de forma anidada varias expresiones
condicionales de arriba a abajo. Cuando aparece una condición verdadera,
ejecuta las acciones asociadas y salta el resto de las expresiones condicionales
sin necesidad de evaluarlas.
Normalmente existe un bloque final else{…} que actúa como condición por defecto.
if (condicion_1)
{
bloque 1 de sentencias;
}
else if (condicion_2)
{
bloque 2 de sentencias;
}
else if (condicion_3)
{
bloque 3 de sentencias;
}
// Tantos bloques else if como sean necesarios
else // si no se cumple ninguna de las anteriores
{
bloque n de sentencias;
}
Nótese que no se está introduciendo ninguna novedad sintáctica en el lenguaje. Para comprobarlo, basta reorganizar visualmente esta sentencia compuesta en forma anidada a la forma ampliada.
Por ejemplo, para 4 bloques de sentencias, los bloques anidados en forma ampliada quedarían visualmente así:
if (condicion_1)
{
bloque 1 de sentencias;
}
else
{
if (condicion_2)
{
bloque 2 de sentencias;
}
else
{
if (condicion_3)
{
bloque 3 de sentencias;
}
else // si no se cumple ninguna de las anteriores
{
bloque 4 de sentencias;
}
}
}
El último bloque else puede aparecer opcionalmente.
*/
if(millis()>=tiempoVerde+tr&&estadoVerde ==true)
{
if(estadoAmarillo ==true)
{
estadoVerde =false;
digitalWrite(verde,LOW);
digitalWrite(amarillo,HIGH);
tiempoVerde=millis();
}
}
if(millis()>=tiempoAmarillo+tv&&estadoVerde ==true)
{
if(estadoAmarillo ==false)
{
estadoAmarillo ==true;
digitalWrite(rojo,HIGH);
digitalWrite(amarillo,LOW);
tiempoAmarillo=millis();
}
}
if(millis()>=tiempoRojo+ta&&estadoVerde ==true)
{
if(estadoAmarillo ==true)
{
estadoVerde ==false;
estadoAmarillo ==true;
digitalWrite(rojo,HIGH);
digitalWrite(amarillo,LOW);
tiempoRojo=millis();
}
}
}
*/
// Dos led intermitentes Ortiz
/*
#define ledVerde 2 // En el pin 2 se conecta el ledVerde
#define ledAmarillo 3 // En el pin 3 se conecta el ledAmarillo
int tonVerde = 1000; // Tiempo de On del ledVerde
int toffVerde = 1000; // Tiempo de Off del ledVerde
int tonAmarillo= 500; // Tiempo de On del ledAmarillo
int toffAmarillo = 500; // Tiempo de Off del ledAmarillo
unsigned long ta = 0; // Tiempo transcurrido total con la función millis()
// para el tiempo en ON. millis()>=ton + ta
unsigned long tb = 0; // Tiempo transcurrido total con la función millis()
// para el tiempo en OFF. millis()>=toff + tb
unsigned long tc = 0; // Tiempo transcurrido total con la función millis()
// para el tiempo en ON. millis()>=ton + tc
unsigned long td = 0; // Tiempo transcurrido total con la función millis()
// para el tiempo en OFF. millis()>=toff + td
bool estadoVerde = true; // Estado del ledVerde en ON
bool estadoAmarillo = true; // Estado del ledVerde en ON
void setup(){
pinMode(ledVerde, OUTPUT);
digitalWrite(ledVerde,HIGH);
pinMode(ledAmarillo, OUTPUT);
digitalWrite(ledAmarillo,HIGH);
}
void loop(){
if(millis()>=tonVerde + ta && estadoVerde == true){
estadoVerde = false;
digitalWrite(ledVerde,0);
tb = millis();
}
if(millis()>=toffVerde + tb && estadoVerde == false){
estadoVerde = true;
digitalWrite(ledVerde,1);
ta = millis();
}
// Led amarillo
if(millis()>=tonAmarillo + tc && estadoAmarillo == true){
estadoAmarillo= false;
digitalWrite(ledAmarillo,0);
td = millis();
}
if(millis()>=toffAmarillo + td && estadoAmarillo == false){
estadoAmarillo = true;
digitalWrite(ledAmarillo,1);
tc = millis();
}
}
*/
int numero;
void setup(){
Serial.begin(9600);
}
void loop(){
if (Serial.available() > 0) { //El nº introducido ha de estar en el rango del tipo "int"
numero=Serial.parseInt();
if (numero == 23){
Serial.println("Numero es igual a 23");
}
else if (numero < 23) {
Serial.println("Numero es menor que 23");
}
else {
Serial.println("Numero es mayor que 23");
}
}
}