hola que tal buenas tardes,
soy nuevo en el foro queria ver si me ayudaban en un problemita, tengo un programa que quiero que me cuente cuanto tiempo se encuentra encendido y que pare el conteo cuando se desactive, el tiempo ya esta establecido( 10 segundo encendido y medio segundo apagado pero quiero que me lo muestre en serial.print,
aparte lo implementare para otros 3 señales mas pero ahorita estoy haciendo pruebas con solo una señal, espero y me puedan ayudar o guiar en esta situación.
les dejo el programa para que lo chequen ,...
gracias!
saludos!
//conteo de led encendido
const int ledPin = 13; //configuración pin del led
int ledState = LOW //se establece el led
long previousMilles = 0 //almacenara el tiempo del led
long intervalOn = 10000; //diez segundos on
long intervalOff = 500; // medio segundo off
void setup ()
{
pinMode(ledPin, OUTPUT); //declaro ledPin como salida
}
void loop()
{
unsigned long currentMillis = millis();
if (ledState == LOW)
{
if(currentMillis - previousMillis > intervalOn)
{
previousMillis = currentMillis;
ledState = LOW;}
}
digitalWrite(ledPin, ledState);
}
Oye, para qué hacer dos hilos de exactamente el mismo tema?
Lo único que tenías que hacer, era editar el anterior... (poner código entre los tags generados por el botón </> )
lo siento es que soy nuevo en el foro, y pues tuve que hacer nuevo post .
Bueno pero no sé en cuál responderte... ese es el dilema.
Ya cerré el otro, el que está en proyectos!
¡Ehhh gracias!
¡Dilema resuelto! jejeje
Bueno... prueba esto y me cuentas...
//conteo de led encendido
const int ledPin = 13; //configuración pin del led
int ledState = LOW; //se establece el led
unsigned long previousMillis = 0; //almacenara el tiempo del led
const unsigned int intervalOn = 10000; //diez segundos on
const unsigned int intervalOff = 500; // medio segundo off
void setup ()
{
Serial.begin(9600); // Inicia la comunicación serial
pinMode(ledPin, OUTPUT); //declaro ledPin como salida
previousMillis = millis(); // guardo los millis antes de que inicie el loop
}
void loop()
{
if (ledState == LOW) // Si el LED está apagado
{
if (millis() - previousMillis >= intervalOff) // Si ya sobrepasó el intervalo de apagado
{
ledState = HIGH; // Encender LED
previousMillis = millis(); // Guardar el momento
} else { // Sino
Serial.print("Off time: ");
Serial.println(millis() - previousMillis);
// Imprimir el tiempo que lleva apagado
}
} else {
if (millis() - previousMillis >= intervalOn) // Si ya sobrepasó el intervalo de encendido
{
ledState = LOW; // Apagar LED
previousMillis = millis(); // Guardar el momento
} else {
Serial.print("On time: ");
Serial.println(millis() - previousMillis);
// Imprimir el tiempo que lleva encendido
}
}
digitalWrite(ledPin, ledState); // Actualizar ledState al LED físico
delay(1);
// Un delay aún demasiado corto puede ayudar a evitar problemas con el monitor serie;
// si no, es posible que este pueda rezagarse y fallar en imprimir algunas lecturas.
// Este delay no puede ser muy largo, o el programa se entorpecerá
}
Hola. Prueba esto y me cuentas:
// #include <EEPROM.h> // Librería en desuso
// byte cuenta = 0; // No la uso porque no entiendo su función
const byte boton_reset_temp = 3;
unsigned long ultimo_reg = 0;
byte seg = 0; // Si se reinicia cada 60, entonces no hay peligro de que sea tipo byte
unsigned long seg_acum = 0;
boolean contar = true; // Cambia a false si el conteo debe parar
void setup()
{
pinMode(boton_reset_temp, INPUT);
Serial.begin(9600);
}
void loop()
{
if (contar) { // Si está permitido seguir el conteo
if (millis() - ultimo_reg >= 1000) {
seg++;
seg_acum++;
ultimo_reg = millis();
if (seg == 60) {
seg = 0; // reiniciarse cada
}
}
// cuenta++; // No entiendo su función
// delay(10); // Los datos se imprimen solo cuando se presione el botón; por lo tanto, no es necesario parar el programa por el monitor serie
if (digitalRead(boton_reset_temp)) { // Si en la entrada hay voltaje. Esta verificación del if puede variar según la conexión del botón al Arduino
// cuenta = 0; // No entiendo su función
Serial.print("Seg: ");
Serial.print(seg);
Serial.println();
Serial.print("Seg_acum: ");
Serial.print(seg_acum);
Serial.println();
contar = false; // Una vez pulsado el botón, se detiene el conteo; y no se contará ya más hasta que se reinicie el Arduino.
}
}
}
En los comentarios está la explicación de los cambios que he hecho.
Ahora nada más de esperar la respuesta tuya
Que tal Lucario448, como estas?..... ya estuve checando el programa y es de mucha ayuda, ahora le agrege un led para que simulara la señal y quise usar el mismo boton_reset_temp para al momento que lo presione se active y cuando lo vuelva a presionar se apague y me corte el tiempo, y tambien que cuando lo vuelva a presionar y se active vuelva a contar de 0 y vuelva presionar y apagar y corte nuevamente el tiempo y me lo registre..... pero no me dejo con el mismo push, tuve que meter otro push como entrada para el led pero no encuentro como relacionarlos el del y el primero boton, sin usar el que agrege.... te dejo lo que le agrege y me comentas vale!!! espero tu respuesta y muchas gracias....
saludos!
// #include <EEPROM.h> // Librería en desuso
// byte cuenta = 0; // No la uso porque no entiendo su función
const byte boton_reset_temp = 3;
int ledPin = 13; //configuracion del pin
int boton_reset_temP = 4; //configuracion de un push mas, no puedo hacerlo con el mismo push
unsigned long ultimo_reg = 0;
byte seg = 0; // Si se reinicia cada 60, entonces no hay peligro de que sea tipo byte
unsigned long seg_acum = 0;
boolean contar = true; // Cambia a false si el conteo debe parar
void setup()
{
pinMode(ledPin, OUTPUT);
pinMode(boton_reset_temP, INPUT);
pinMode(boton_reset_temp, INPUT);
Serial.begin(9600);
}
void loop()
{
if (contar) { // Si está permitido seguir el conteo
if (millis() - ultimo_reg >= 1000) {
seg++;
seg_acum++;
ultimo_reg = millis();
if (seg == 60) {
seg = 0; // reiniciarse cada
}
}
// cuenta++; // No entiendo su función
// delay(10); // Los datos se imprimen solo cuando se presione el botón; por lo tanto, no es necesario parar el programa por el monitor serie
if (digitalRead(boton_reset_temp)) { // Si en la entrada hay voltaje. Esta verificación del if puede variar según la conexión del botón al Arduino
// cuenta = 0; // No entiendo su función
Serial.print("Seg: ");
Serial.print(seg);
Serial.println();
Serial.print("Seg_acum: ");
Serial.print(seg_acum);
Serial.println();
contar = false; // Una vez pulsado el botón, se detiene el conteo; y no se contará ya más hasta que se reinicie el Arduino.
}
}
boton_reset_temP = digitalRead(4); //lee el estado del boton.
if (boton_reset_temP == HIGH) { //si el estado es activado
digitalWrite(ledPin, HIGH); //led prende
}
else { // si no es pulsado
digitalWrite(ledPin, LOW); // led se apaga
}
}
Aún no tengo código hasta que me aclares la siguiente duda:
Pretendías encender el LED cuando la cuenta esté activa o cómo es?
El uso de un segundo pulsador me confundió
siii, el segundo pulsador lo añadi porque no me dejaba relacionar el primero boton_reset_temp con el led, y añadi el segundo boton_reset_temP....... y si pretendia que empezara a contar cuando el led se activara con el boton, y al presionar nuevamente el boton se desactivara y cortara el conteo.
Digo yo, y que aportas @car_more03 al código? porque solo leo que agregas algo (un pulsador) y le pides a @Lucario448 que lo haga.
Antonio, borra tu ultimo mensaje, abre un nuevo topic y de paso lee las normas del foro. Así no se postea un código por favor.
Saludos
hola que tal, como estan??
ya logre relacionar el primer push con el led y que se pare el serial.print....
pero ahora mi problema es que cuando esta apagado aun sigue contando los segundos, y lo que quiero es que solo cuando este encendido empiece el conteo para cuando se apague vuelva empezar de cero el conteo otra ves.....
si me pudieran ayudar nuevamente o decirme que es lo que le debo de agregar a mi codigo para hacer esa instruccion, cuando este terminado el codigo lo voy a subir para que si a alguien le interese o tenga algo parecido que hacer .....
que tengan buenas tardes!1
saludos...
#include <EEPROM.h> //libreria de uso
const int boton_led_conteo = 3; //configuración de pin push
int ledPin = 13; //configuracion del pin led
unsigned long seg_acum = 0;
unsigned long ultimo_reg = 0;
byte seg = 0; //se reinicia cada 60 seg.
boolean contar = true; //cambia false si el conteo debe parar
byte minuto = 0;
int estadoBoton_led_conteo = 0;
void setup()
{
pinMode(boton_led_conteo, INTPUT_PULLUP); //SE CONFIGURA la entrada con las resistencias pullup
pinMode(ledPin, OUTPUT);
//se configura la salida
Serial.begin(9600);
}
void loop()
{
if (millis() - ultimo_reg >= 1000) {
seg++;
seg_acum++;
if (seg == 60) {
minuto++;
EEPROM.write (1, minuto);
seg = 0;
}
}
delay (10);
if (digitalRead(boton_led_conteo) == !LOW && estadoBoton_led_conteo == 0 ) {
estadoBoton_led_conteo = 1;
Serial.print("Seg: ");
Serial.print(seg);
Serial.println();
Serial.print("Min: ");
Serial.print(minuto);
Serial.println();
Serial.print("Seg_acum: ");
Serial.print(seg_acum);
Serial.println();
contar = false;
digitalWrite(ledPin, Low);
delay(500);
}
if (digitalRead(boton_led_conteo) == HIGH) {
estadoBoton_led_conteo = 0;
digitalWrite(ledPin, HIGH);
delay(500);
}
}
hola que tal buenas tardes. por fin solucione
el problema de mi codigo, les dejo mi programa para quien lo necesite o tenga algun problema similar.
saludos....!
#include <EEPROM.h> //libreria en uso
const int boton_led_conteo = 3; //configuracion de pin 13 para el switch.
unsigned long seg_acum = 0; //Se toma como variable largo y almacena.
unsigned long ultimo_reg = 0; //variable largo y almacena.
byte seg = 0;
boolean contar = true;
byte minuto = 0;
int estadoBoton_led_conteo = 0; // Estado del switch.
byte reset = 3; //Se toma como lectura
const int automatico = 8; //se configura el pin del Switch automatico.
boolean activado = true;
void setup()
{
pinMode(boton_led_conteo, INPUT);
pinMode(automatico, INPUT);
Serial.begin(9600);
}
void loop()
{
while(digitalRead(automatico) == HIGH) { //mientras este activado el automatico va arrancar el programa
activado = 1;
}
if (millis() - ultimo_reg >= 1000) {
seg++;
seg_acum++;
if (seg == 60) {
minuto++;
EEPROM.write (1, minuto);
seg = 0;
}
}
delay(10);
if (digitalRead(boton_led_conteo) == !LOW && estadoBoton_led_conteo == 0) {
estadoBoton_led_conteo = 1;
Serial.print("Seg: ");
Serial.print(seg);
Serial.println();
Serial.print("MIN: ");
Serial.print(minuto);
Serial.println();
Serial.print("Seg_acum: ");
Serial.print(seg_acum);
Serial.println();
contar = false;
delay(500);
}
if (digitalRead(boton_led_conteo) == HIGH) {
estadoBoton_led_conteo = 0;
delay(500);
}
if (digitalRead(reset) == LOW) {
minuto = 0;
EEPROM.write (1, minuto);
Serial.println("BORRAR DATOS.");
delay(2000);
seg = 0;
seg_acum = 0;
}
{