Olá pessoal, estou aqui pedindo ajuda mais uma vez,
Estou criando algumas funções que lê meus sensores exemplo:
sensor de ima 1
sensor de ima 2
sensor ldr 1
sensor ldr 2
Cada um tem um estado 0 ou 1 e preciso de alguma forma saber quando tiver alguma alteração:
A função abaixo lê os sensores redswitch e baseado nas saidas ele vai gerar uma mensagem.
//le os valores para os reed switch
void funcaoREED(){
//le os valores das portas
int VALREED1 = digitalRead(REED1);
int VALREED2 = digitalRead(REED2);
//printa no cristal
lcd.setCursor(0,0);
lcd.print("PORTA 1 ");
if ( VALREED1 == 0 ) {
lcd.print("OPEN ");
FREED1 = 0;
} else {
lcd.print("CLOSE ");
FREED1 = 1;
}
lcd.setCursor(0,1);
lcd.print("PORTA 2 ");
if ( VALREED2 == 0 ) {
lcd.print("OPEN ");
FREED2 = 0;
} else {
lcd.print("CLOSE ");
FREED2 = 1;
}
}
Tentei concatenar as saidas como string tipo String str; str += FREED1; str += FREED2;
A saida é 00, mas quando ele le de novo ele soma 0000 e assim vai 000000
Pensei em fazer isso para os outros sensores então eu teria uma saida como 0011 e se mudasse um numero, eu saberia que teve mudança e enviaria a mensagem com a nova informação.
Como posso fazer? Alguém tem alguma idéia?
Obrigado pessoal
E espero que tenha dado pra entender;;;rsrs
Tags:
Se você quiser ler informações de um LDR terá que utilizar um analogRead usando o conceito de PWM (Pulse Width Modulation) que obter resultados analógicos em meios digitais. Os pinos digitais do Arduino com o til (~) tem suporte ao PWM, sáo eles 11, 10, 9, 6, 5, e 3.
Segue exemplo básico
int piezoPin = 8; // Piezo no pino 8
int ldrPin = 0; // LDR no pino analógico 0
int ldrValue = 0; // Valor lido do LDR
int ledPin = 9; // pino do led
void setup() {
pinMode(ledPin, OUTPUT);
// nada a ser feito aqui
} // end setup()
void loop() {
ldrValue = analogRead(ldrPin); // lê o valor do LDR
tone(piezoPin, 1000); // toca um tom de 1000 Hz do piezo
digitalWrite(ledPin, HIGH); // ascende o led
delay(25); // espera um pouco
noTone(piezoPin); // interrompe o tom
digitalWrite(ledPin, LOW); // apaga o led
delay(ldrValue); // espera a quantidade de millisegundos em ldrValue
} // end loop()
Olá Rodrigo, obrigado pela ajuda, mas não era essa a questão, sei que não expliquei direito..rsrs
Mas tenho mais 4 sensores e preciso saber se algum deles teve alteração...
então fis o seguinte...
//GUARDA OS VALORES P/ CALCULO
KEYVALORES += VALREED1;
KEYVALORES += VALREED2;
KEYVALORES += KVALLDR1;
KEYVALORES += KVALLDR2;
KEYVALORES += TEMP;
KEYVALORES += HUMI;
VALOR = KEYVALORES;
KEYVALORES = "\0";
assim o VALOR será 000000 e se algum dos sensores mudar vais ser exemplo.. 010100
assim sei que o valor atual é diferente do anterior (000000) ai tenho que enviar um aviso.
Um abraço e muito obrigado.
Sérgio
Sérgio,
neste caso voce precisa de um contador Binário 74HC595, que possui oito portas. Usei ele para controlar 8 LEDs usando apenas três pinos do Arduino. Para o seu projeto, acredito que voce terá que colocar os pinos no modo INPUT e receber os dados do CI.
Olhe um video de um projeto
http://www.youtube.com/watch?v=50BV9QGt6PQ
Veja se isso te ajuda, ah o CI é bem barato.
// Projeto 18 - dois contadores
int latchPin = 8; // Pino conectado ao pino 12 do 74HC595 (Latch)
int clockPin = 12; // Pino conectado ao pino 11 do 74HC595 (Clock)
int dataPin = 11; // Pino conectado ao pino 14 do 74HC595 (Data)
void setup() {
// define os pinos como saída
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
} // end setup()
void loop() {
// conta de 0 a 255
for (int i = 0; i < 256; i++) {
// define latchPin como LOW, para permitir o fluxo de dados
digitalWrite(latchPin, LOW);
shiftOut(i);
shiftOut(255-i);
// define latchPin como HIGH, para fechar e enviar os dados
digitalWrite(latchPin, HIGH);
delay(50);
} // end for
} // end loop()
void shiftOut(byte dataOut) {
// Desloca 8 bits, com o bit menos significativo (LSB) sendo deslocado primeiro, no extremo ascendente do clock
boolean pinState;
digitalWrite(dataPin, LOW); // deixa o registrador de deslocamento pronto para enviar dados
digitalWrite(clockPin, LOW);
for (int i = 0; i <= 7; i++) { // para cada bit em dataOut, envie um bit
digitalWrite(clockPin, LOW); // define clockPin como LOW antes de enviar o bit
// se o valor de DataOut e (E lógico) de uma máscara de bits forem verdadeiros, defina pinState como 1 (HIGH)
if (dataOut & (1 i)) {
pinState = HIGH;
} // end if
else {
pinState = LOW;
} // end else
// define dataPin como HIGH ou LOW, dependendo de pinState
digitalWrite(dataPin, pinState); // envia o bit no extremo ascendente do clock
digitalWrite(clockPin, HIGH);
digitalWrite(dataPin, LOW);
} // end for
digitalWrite(clockPin, LOW); // interrompa o deslocamento de dados
} // shiftOut()
Valeu mesmo Rodrigo.
Abraços a todos.
O 74595 é um serial para paralelo, o 74166 é o paralelo para serial
Eu usei esse scretch para testar as entradas.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por