Salve a tutti
Sto lavorando a questo codice per gestire una barriera ad infrarossi.
Ho creato una parte di sketch partendo da un po di materiale in rete,ma secondo l'autore questo sketch dovrebbe avvisare, con l'ultimo digitalRead della funzione letturaIR, la presenza o meno di un ostacolo.
A me pero il SerialMonitor restituisce sempre 0. In effetti quando davanti il fototransistor non ci sono ostacoli mi aspetto di vedere 1.
Dopodiche il mio intento era di creare una If e di far partire una allarme in caso di 0 restituito dalla funzione.
Secondo voi dove sbaglio?
Grazie mille
int readPin =22;
int triggerPin =8;
int letturaIR (int readPin, int triggerPin);
void setup(){
pinMode (8,OUTPUT);
pinMode (22,INPUT);
Serial.begin(9600);
}
void loop() {
Serial.println(letturaIR(22,8));
delay (100);
}
int letturaIR (int readPin,int triggerPin){
int halfPeriod =13;
int cycles=38;
int i;
for (i=0; i <= cycles; i++) {
digitalWrite (triggerPin, HIGH);
delayMicroseconds (halfPeriod);
digitalWrite (triggerPin,LOW);
delayMicroseconds (halfPeriod-1);
}
return digitalRead (readPin);
}
Volevo chiedervi senza aprire un altro post, in una precedente discussione ho letto alcune righe di codice di uno sketch che usava i timer.
Il codice è questo:
Decimale, esadecimale, ottale, binario ... sono SOLO delle forme di rappresentazione di un numero ... alla fine quello che conta sono i vari bit, che poi tu mi dica 10 in decimale, 0x0A in esadecimale, 012 in ottale o 00001010 in binario è esattamente la stessa cosa.
Guglielmo
P.S.: metti il link al sensore IR che stai usando ...
Perfetto ,buono a sapersi, pensavo ci fosse una sintassi da rispettare altrimenti il valore non verrebbe accettato.
Il sensore l'ho comprato su amazon, ho chiesto il datasheet al fornitore ma ancora non ha risposto, e non si capisce che sigla abbia, ho visto solo che nelle recensioni alcuni acquirenti lo usano con Arduino.
Che tipo posso acquistare per andare sul sicuro altrimenti?
... proprio per complicarsi la vita ... quella è roba per i telecomandi e richiede una portante ed una modulazione. A te serve un NORMALE LED emettitore nel campo del IR ed un fototransistor.
Ma poi, ripeto, che ci devi fare nella pratica? Un modellino o pensi di realizzare una cosa "vera" da usare in casa?
In pratica dovrei realizzare una barriera che in caso di passaggio di un qualunque oggetto viene interrotta attivando un apertura cancello.
Mi serve solo per un progetto di tesina.
La distanza tra il trasmettitore ed il ricevitore dovrà essere di circa 1,5 metri.
Avevo pensato alla soluzione IR prendendo spunto dalle fotocellule dei cancelli elettrici, e dai telecomandi delle TV che riescono a dialogare anche da distanze di 2, 3 metri..
... che funzionano in TUTT'ALTRO modo inviando, come ti ho detto, una modulazione su un segnale portante. Lascia stare i LED trasmettitori per telecomando ed usa normali LED IR ... hai visto l'articolo di cui ti ho dato il link?
Sembra sia riuscito con l'aiuto di un potenziometro a settare il diodo IR ed il ricevitore, ad una frequenza corretta, ed ora sembra funzionare tutto. Entrambi ora sembrano interagire correttamente.
Devo solo verificare fino a che distanza dialogano!
Si gli ho visti però l'unico neo è che arrivano ad un massimo di 70 cm..
Per me quella distanza non va bene!
#include <Servo.h>
Servo rcservo;
int readPin =22;
int triggerPin =8;
int Led1=26;
int letturaIR (int readPin, int triggerPin);
void setup(){
pinMode (8,OUTPUT);
pinMode (22,INPUT);
pinMode (24,INPUT);
pinMode (26,OUTPUT);
rcservo.attach(2);
Serial.begin(9600);
}
void loop() {
Serial.print("letturaIR ");
Serial.println(letturaIR(22,8));
delay (100);
if (letturaIR(22,8)==0){
digitalWrite (Led1,LOW);
}
else {
digitalWrite (Led1,HIGH);
/* if (Led1==HIGH){
for (int f=0;f<=90;f++){
rcservo.write(f);
delay (20);*/
}
}
int letturaIR (int readPin,int triggerPin){
int halfPeriod =13;
int cycles=38;
int i;
for (i=0; i <= cycles; i++) {
digitalWrite (triggerPin, HIGH);
delayMicroseconds (halfPeriod);
digitalWrite (triggerPin,LOW);
delayMicroseconds (halfPeriod-1);
}
return digitalRead (readPin);
}
La mia domanda ora è:
Come faccio ad inserire un ciclo for per un servo che apra e chiuda il cancello alla interruzione della barriera, senza dover allungare il tempo del loop?
Ho provato ad inserirlo cosi ma non mi fa funzionare nulla, è come se mi cambiasse i tempi e i livelli di tutti gli ingressi ed uscite. Appena stacco il servo dal pin 2 funziona tutto nuovamente!