Buenas tardes. Tengo varios códigos, pero me están chocando uno con el otro. Sabrán como se hace para que esto no pase y que cada código realize lo suyo
/*sensor temperatura/Humedad*/
#include <DHT.h> // Librería incluida
#define DHTPIN 6 // Puerto digital en el que está cargado
#define DHTTYPE DHT11 // DHT 11
// Inicializar sensor DHT
DHT dht(DHTPIN, DHTTYPE);
/*sensor movimiento*/
int pir = 8;
int luz = 12;
int pirdato;
/* Pulsador puerta*/
int puerta=5;
/* sensor luz*/
#define Led 12 // Conectamos una LED en el pin 12
#define sensorluz A0 // Conectamos un fotorresistor en el pin analógico A0
String dato; // Para enviar un dato por el puerto serie
/* timbre*/
#include "pitches.h"
int const buzzerPin = 2;
int const button1Pin = 9; // asignamos a la entrada digital 2 el botón1
int bpm = 100;
int bps = bpm / 60;
int fullNoteMs = 1000 / bps;
int halfNoteMs = fullNoteMs / 2;
int quarterNoteMs = halfNoteMs / 2;
int eighthNoteMs = quarterNoteMs / 2;
int note = 0;
int duration = 0;
int simpsons[] = {HALF, NOTE_C4, QUARTER, NOTE_E4, NOTE_FS4, EIGHTH, NOTE_A4, HALF, NOTE_G4, QUARTER, NOTE_E4, NOTE_C4, NOTE_G3, EIGHTH, NOTE_FS3, NOTE_FS3, NOTE_FS3, QUARTER, NOTE_G3};
int numNotes = sizeof(simpsons)/sizeof(int);
/* servmotor*/
#include <Servo.h>
Servo myservo;
int estado=0;
int pos = 80;
char a = 0;
int sensor = A5;
int alarma = 2;
void setup() {
/*sensor temperatura/Humedad*/
Serial.begin(9600);
dht.begin();
/*sensor movimiento*/
pinMode(luz, OUTPUT);
pinMode(pir, INPUT);
/*sensor timbre*/
pinMode(buzzerPin,INPUT);
pinMode(button1Pin,OUTPUT);
/* Pulsador puerta*/
pinMode(puerta, OUTPUT);
digitalWrite(puerta, LOW);
/* servmotor*/
myservo.attach(7);
pinMode(alarma,OUTPUT);
pinMode(sensor, OUTPUT);
digitalWrite(sensor, LOW);digitalWrite(alarma, LOW);
/* sensor luz*/
/* Establecemos los pines de las LED como salida */
pinMode(Led, OUTPUT);
pinMode(sensorluz, INPUT);
/* Iniciamos el puerto serie */
Serial.begin(9600);
}
void loop() {
/* Pulsador puerta*/
if(digitalRead(puerta)== HIGH);
/* sensor luz*/
/* Obtenemos valores de los fotorresistores (varían de 0 a 900) */
int nivelDeLuz = analogRead(sensorluz); // fotorresistor1
/* Escalamos los valores para el brillo de las LED */
nivelDeLuz = map(nivelDeLuz, 0, 900, 0, 255);
if(nivelDeLuz < 15){ // si el valor es muy bajo...
nivelDeLuz = 0; // ...lo hago 0 directamente
}
nivelDeLuz = constrain(nivelDeLuz, 0, 255);
/* Aplicamos el brillo a las LED */
analogWrite(Led, nivelDeLuz);
/* Enviamos dato por puerto serie */
dato = "";
dato += nivelDeLuz;
dato += ",";
Serial.println(dato);
/* Pulsador timbre*/
if(digitalRead(button1Pin)== HIGH){
if (simpsons[note] == HALF) {
duration = halfNoteMs;
note++;
return;
}
if (simpsons[note] == QUARTER) {
duration = quarterNoteMs;
note++;
return;
}
if (simpsons[note] == EIGHTH) {
duration = eighthNoteMs;
note++;
return;
}
if (simpsons[note] == SILENCE) {
noTone(buzzerPin);
delay(duration);
}
else {
tone(buzzerPin, simpsons[note]);
delay(duration);
noTone(buzzerPin);
}
note++;
for(int tono =0; tono< numNotes; tono++){
tone(buzzerPin, simpsons[tono]);
delay(simpsons[tono]);
noTone(buzzerPin);
}
}
if(digitalRead(sensor)== HIGH){
digitalWrite(alarma,HIGH);
}
else {digitalWrite(alarma,LOW);
}
if(Serial.available()>0){
estado = Serial.read();
if(estado == 'C'){
digitalWrite(7,HIGH);
cerrarpuerta();
}
if(estado == 'A'){
digitalWrite(7,LOW);
abrirpuerta();
}
}
delay(1000); //tiempo de demora para que tome datos
float h = dht.readHumidity();
// Lee temperatura en Celsius
float t = dht.readTemperature();
// Lee temperatura en Fahrenheit
float f = dht.readTemperature(true);
// Verifica si alguna de las lecturas falla y repite
if (isnan(h) || isnan(t) || isnan(f)) {
Serial.println("Fallo la lectura del sensor DHT");
return;
}
// Calcula la temperatura en Fahrenheit
float hif = dht.computeHeatIndex(f, h);
// Calcula la temperatura en Celsius
float hic = dht.computeHeatIndex(t, h, false);
Serial.print("Humedad: ");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperatura: ");
Serial.print(t);
Serial.print(" *C ");
Serial.print(f);
Serial.print(" *f/t ");
Serial.print("Sensación térmica: ");
Serial.print(hic);
Serial.print(" *C ");
Serial.print(hif);
Serial.println(" *f ");
/*sensor movimiento*/
pirdato = digitalRead(pir);
if (pirdato == HIGH)
{
digitalWrite(luz, HIGH);
delay(50);
}
else {
digitalWrite(luz, LOW);
}
}
void cerrarpuerta() {
for (pos = 0; pos <= 90; pos += 1) {
myservo.write(pos);
delay(50);
}
}
void abrirpuerta() {
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(50);
}
}
El código tiene muchos delay() que se van sumando y bloqueando el código.
No dices que es lo que esta mal, por favor, aclara el problema.
Moderador:
Por favor, lee las Normas del foro.
Tu código se repite en este hilo y esto consittuyo un doble posteo aunque te parezca que son temas distintos son el mismo tema.
Asi que voy a unirlos pero dejaré que se resuelve este primero para no confundir el general donde pides o hablas del choque de varios códigos.
No me estaría funcionando lo que tiene que ver el sensor de humedad y temperatura y el servo motor. Si solo subo solo el sensor de temperatura y humedad me funciona, pero si subo todo junto no me funciona.
int luz = 12;
// y
#define Led 12
se refieren al mismo pin, entonces esto
pinMode(luz, OUTPUT);
// y
pinMode(Led, OUTPUT);
es redundante.
Lo mismo ocurre con buzzerPin y alarma.
#define sensorluz A0
lo usas en modo analógico entonces
pinMode(sensorluz, INPUT);
está de más porque pone el pin en modo digital.
Si usas
nivelDeLuz = map(nivelDeLuz, 0, 900, 0, 255);
¿Cuál es el sentido de
nivelDeLuz = constrain(nivelDeLuz, 0, 255);
si nivelDeLuz ya está limitado al rango 0, 255 por map()?
Tienes para revisar un rato.
Saludos
(post deleted by author)
Pues con el siguiente codigo haces que se situe en 180
servo.write(180);
Mientras no le des otro valor se quedara se 180
Moderador:
Por favor, lee las Normas del foro .
Deja de abrir hilos con preguntas que se responden en el mismo hilo y ya tienes dos abiertos y este el 3ro
Este hilo se une con el hilo principal.
EDITO: Cerré y moví tus otros dos hilos. Este es el único que permanecerá abierto mientras tengas dudas o consultas relacionados con ESTE tema.
Mil grcs. Solucionado, tengo otro problema, la alarma no debería sonar cuando con la app abro (A) y cierro (C) el portón, si debería sonar cuando fuerzo el portón. El tema es que cuando fuerzo el portón, antes de abrir el portón con la app, suena la alarma y cuando lo abro con la app no. Funciona bien. Pero cuando quiero forzar el portón por segunda vez ya no suena la alarma.
if(digitalRead(sensor)== HIGH){
digitalWrite(alarma,HIGH);
}
else {digitalWrite(alarma,LOW);
}
if(rxChar == 'A'){
digitalWrite(alarma,LOW);
}
if(rxChar == 'C'){
digitalWrite(alarma,LOW);
}
En ese fragmento de código tienes la respuesta
Observa que no importa que se produzca todo termina accionando la alarma por LOW
Lo que debes hacer es que el accionamiento sea condicionado, si esta una o la otra pero no las dos.
Esa condición responde al algebra de Boole de modo que
si quieres que se active una y no la otra usas esto
if ((digitalRead(sensor) && rxChar != 'A' ){ // fuerzas porton pero no la app
//o esta
if ((!digitalRead(sensor) && rxChar == 'A' ){ // No fuerzas porton pero SI la app
// o las dos
if ((digitalRead(sensor) && rxChar == 'A' ){ // fuerzas porton y la app
Buenisimo, gracias. Lo realice de la siguiente manera y funciono, pero cuando lo quiero hacer para la letra ´c´ para cuando cierra la puerta y no me funciona
if(digitalRead(sensor)== HIGH && rxChar != 'A'){
digitalWrite(alarma,HIGH);
}
else {digitalWrite(alarma,LOW);
}
Porque 'c' tambien tiene control sobre alarma y no todo lo que no es la condición que has puesto. Si niegas todo esto caes en el else,
if(digitalRead(sensor)== HIGH && rxChar != 'A'){
pero ahora resulta que tambien esta rxChar == 'C'
entonces algo asi es mas lógico
if (digitalRead(sensor)== LOW && rxChar == 'C'){
digitalWrite(alarma,LOW);
Igualmente no se si esto ultimo esta bien pero inténtalo.
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.