saludos, mi duda para ustedes quiza sea muy facil pero para mi es muy dificil. quiero activar un led mediante dos sensores diferentes, eso ya esta echo, el problema es que quiero que cuando se active en la consola serial me diga cual sensor fue el que se activo, y ponga donde ponga esa linea siempre me sale que se activo fue el sensor 1.
const int salida1 = 13; // número del pin del LED
const int entrada1 = 35; // número del pin para el botón
const int entrada2 = 37; // número del pin para el botón
boolean pulsador1;
unsigned long tiempo1;
const long interval = 3000;
void setup()
{
Serial.begin(9600);
while (!Serial)
pinMode(entrada1, INPUT);
pinMode(entrada2, INPUT);
pinMode(salida1, OUTPUT);
Serial.println("INICIADO");
}
void loop()
{
pulsador1 = digitalRead(entrada1);
if (pulsador1 == HIGH)
{
tiempo1 = millis() + interval;
digitalWrite(salida1, HIGH);
}
if (tiempo1 == millis())
{
digitalWrite(salida1, LOW);
tiempo1 = 0;
Serial.println(", SE ACTIVO EL SENSOR 1");
}
{
pulsador1 = digitalRead(entrada2);
if (pulsador1 == HIGH)
{
tiempo1 = millis() + interval;
digitalWrite(salida1, HIGH);
}
if (tiempo1 == millis())
{
digitalWrite(salida1, LOW);
tiempo1 = 0;
Serial.println(", SE ACTIVO EL SENSOR 2");
}
}
}
Alex el código esta mal, tengo varias observaciones.
1.- el código no se postea con quote, se hace con el botón </>.
2.- fíjate que tienes la misma condición
f (tiempo1 == millis())
{
digitalWrite(salida1, LOW);
tiempo1 = 0;
Serial.println(", SE ACTIVO EL SENSOR 2");
}
Para arreglar tu código necesito saber que debe hacer el led una vez encendido pq no entiendo para que necesitas millis.().
Quieres que prenda el led durante cuanto tiempo?
Cuando necesitas que se apague el led una vez encendido?
gracias carlos ya modifique la publicación, a ver este proyecto es un ejemplo para no subir todo lo que he programado de mi alarma, ya que serían muchas lineas porque en si imprime en serial en archivo sd y en mensaje por gsm. la cosa es que siempre me imprime es el mismo mensaje, y son 6 sensores no 2 como en el ejemplo. pero con que me ayuden a arreglar este ejemplo ya aprendo y lo adapto en mi verdadero sketch.
a ver:
si se toca entrada1 va a prender led1 por 3000millis, y envia el mensaje
si se toca entrada 2 va a prender led1 por 3000millis, y envia el mensaje
utilizo millis para no utilizar delay ya que me dejaria de funcionar lo demás mientras este sonando la alarma cuando lo adapte a mi otro proyecto.
gracias por responder, espero haberme explicado, como te comente solo llevo 5 días con esto de arduino. y estoy tratando de hacer todo lo que comente en mi anterior publicación elaborar sist de alarma y proteccion de circuito electrico - Proyectos - Arduino Forum yo solo, cuando este bastante desarrollado lo monto aca para que me den el visto bueno, y sugerencias...
aqui abajo agrego un poquito del code donde adaptaría posteriormente este ejemplo
void sensor1()
{
pulsador1 = digitalRead(entrada1);
if (pulsador1 == LOW)
{
tiempo1 = millis() + interval;
digitalWrite(salida1, HIGH);
}
if (tiempo1 == millis())
{
digitalWrite(salida1, LOW);
tiempo1 = 0;
if (!SD.exists("sensores.csv"))
{
myFile = SD.open("sensores.csv", FILE_WRITE);
if (myFile) {
Serial.println("Archivo nuevo, Escribiendo encabezado(fila 1)"); myFile.println("Fecha,Hora,Registro"); myFile.close();
} else {
Serial.println("Error creando el archivo sensores.csv");
}
}
myFile = SD.open("sensores.csv", FILE_WRITE);
if (myFile) {
Serial.print("Escribiendo en sensores.csv...");
time_t t = now();
myFile.print(day(t)); myFile.print("/"); myFile.print(month(t)); myFile.print("/"); myFile.print(year(t)); myFile.print(","); myFile.print(hour(t)); myFile.print(":"); myFile.print(minute(t)); myFile.print(":"); myFile.print(second(t));
myFile.println(", SE ACTIVO EL SENSOR 1");
Serial.println(", SE ACTIVO EL SENSOR 1");
myFile.close();
Serial.println("Grabado con Exito");
} else {
Serial.println("error abriendo sensores.csv");
}
}
}
Gracias por tu pronta respuesta el codigo que me pasaste, no se puede compilar, da los siguientes errores:
Arduino:1.7.10 (Windows 7), Placa:"Arduino Mega or Mega 2560, ATmega2560 (Mega 2560)"
: In function 'void loop()':
: error: 'pulsador1Ant' was not declared in this scope
: error: 'pulsador1Ant' was not declared in this scope
: error: 'pulsador2Ant' was not declared in this scope
: error: 'tiempo2' was not declared in this scope
: error: 'salida2' was not declared in this scope
: 'pulsador2Ant' was not declared in this scope
: error: 'tiempo2' was not declared in this scope
: error: 'salida2' was not declared in this scope
Error de compilación
This report would have more information with
"Show verbose output during compilation"
activala desde Archivo > Preferencias
Al definir las variables que salen en el error de compilación resuelves el problema.
Pero esto es básico.
Pensé que tu problema es de código o programación pero tienes problemas para entender los errores!! Intenta ponerle algo de tu parte y comprende bien lo que digo.
Es tu proyecto, esfuérzate.
: In function 'void loop()':
: error: 'pulsador1Ant' was not declared in this scope
: error: 'pulsador1Ant' was not declared in this scope
: error: 'pulsador2Ant' was not declared in this scope
: error: 'tiempo2' was not declared in this scope
: error: 'salida2' was not declared in this scope
: 'pulsador2Ant' was not declared in this scope
: error: 'tiempo2' was not declared in this scope
: error: 'salida2' was not declared in this scope
definelas junto a pulsador1 asi
bool pulsador1Ant = false, pulsador2Ant=false;
en lugar de
unsigned long tiempo1;
pon
unsigned long tiempo1, tiempo2;
y en lugar de salida2 usa salida1 porque quieres que todo salga por la misma salida
gracias nuevamente, no habia respondido porque estuve fuera unos dias, pude resolver esa parte de mi proyecto gracias a ustedes, lo continue durante mi viaje pero ahora me encuentro con otra disyuntiva, una parte de mi proyecto lleva lectura de tarjetas RFID para un registro SD, y la parte de los sensores que me ayudaron ustedes. El problema es que cuando agrego la parte de RFID los botones me dejan de funcionar y la luz permanece prendida y solo funciona bien RFID, supongo que es algo de un IF donde no es o un }}{{ fuera de lugar.
bueno me enrede un poco en el code explico mejor...
#include <SPI.h>
#include <RFID.h>
#define SS_PIN 53
#define RST_PIN 49
RFID rfid(SS_PIN, RST_PIN);
const int salida1 = 13; // número del pin del LED
const int entrada1 = 24; // número del pin para el botón
boolean pulsador1;
unsigned long tiempo1;
const long interval = 1000;
void setup() {
Serial.begin(9600);
SPI.begin();
rfid.init();
pinMode(salida1, OUTPUT);
pinMode(entrada1, INPUT);
}
void loop() {
//esto no tiene nada que ver con el RFIDCARD
pulsador1 = digitalRead(entrada1);
if (pulsador1 == HIGH)
{
tiempo1 = millis() + interval;
digitalWrite(salida1, HIGH);
}
if (tiempo1 == millis())
{
digitalWrite(salida1, LOW);
tiempo1 = 0;
Serial.println("SE ACTIVO EL SENSOR 1");
}
//esto no tiene nada que ver con el sensor
{
if (rfid.isCard())
{
if (rfid.readCardSerial())
{
(((( rfid.serNum[0] ) == 197)) && ((( rfid.serNum[1] ) == 67)) && ((( rfid.serNum[2] ) == 212)) && ((( rfid.serNum[3] ) == 44)) && ((( rfid.serNum[4] ) == 126)));
{
Serial.println("USUARIO1");
rfid.halt();
}}}}}
Cabe destacar que el proyecto lleva 8 sensores, y 5 RfidCard, los resumo a uno para pedir la colaboración y luego yo montarme en lo demas, ya que me gusta aprender y asi voy leyendo linea por linea y memorizando. tambien lleva controles remotos, LCD, reporte de fallas por GSM como texto, website y entre otras cosas que luego compartire el proyecto completo con todos.
CARLOS si lees escribeme al celular que me robaron el telefono el lunes en la mañana.