Buon Anno a tutti. domanda stupida su porte Analog in

Per prima cosa Buon Anno. Volevo sapere se c'è modo di interrompere una porta analogica da un segnale in ingresso. Ho un sensore luce sull'ingresso A5. e vorrei che la porta si interrompe nel leggere il segnale quando premo un pulsante. Grazie

Buon anno anche a Te.

Non capisco bene cosa intendi per interrompere.

con un if si puó fare: if(!pulsante premuto){leggi A5;}

Ciao Uwe

Ciao, mi spiego meglio. All'ingresso del pin A5 ho un sensore luce. Vorrei che con un pulsante premuto dal tablet fermo la lettura su quel pin. "devo fare in modo che non mi arrivano più valori sul pin A5" Adesso ho risolto mettendo un relè che toglie il negativo al sensore cosi fermo i dati che mi entrano. Mi sono cimentato a realizzare un progetto domotico un pò complesso e sono quasi alla fine del progetto, ci sto lavorando da tre mesi, ma avvolte mi blocco su delle cose stupide, ecco perchè chiedo aiuto sul forum. Grazie comunque. PS sull'altro aiuto condizione if/else if avevo messo una condizione sbagliata AND OR. li ho risolto.

Erm, ma non basterebbe semplicemente smettere di leggere quel pin? :o Tipo

boolean leggi = true;

if (leggi) {
  pippo = analogRead (A5);
}

if (pulsantePremuto) {
  leggi = false;
}

Rende l'idea?

Non sono un programmatore, ma immagino che il tuo sketch abbia un comando che legge quell'ingresso A5 ... il sistema piu semplice allora e' infilare quel comando in un'IF, che legge solo se il pulsante e' in una condizione e non nell'altra ... giusto ? ;)

EDIT: ecco, appunto ;)

grazie dei suggerimenti. La condizione bolean l'ho già provata, ma anche se metto la lettura dei dati a false nel seriale continua a visualizzarmi un dato fisso che mi da fastidio. è un po difficile da spiegare il funzionamento che devo fare. l'unica soluzione che ho trovato e quella di portare il sensore a una lettura fuori scala, togliendo il negativo sul sensore. Sto cercando di trovare qualcosa che mi porti l'ingresso A5 a una posizione di non lettura cioè come se su non ci fosse nulla. ma su internet non c'è nulla. per il momento lascio il relè, almeno funziona come dico io. Grazie ancora a tutti. Vi farò sapere se trovo la soluzione.

Gian70Luca: grazie dei suggerimenti. La condizione bolean l'ho già provata, ma anche se metto la lettura dei dati a false nel seriale continua a visualizzarmi un dato fisso che mi da fastidio.

Scusa ma non ha molto senso quello che dici. Sembra quasi che Arduino viva di vita propria. :) Se sulla seriale visualizza qualcosa è perchè TU hai scritto di visualizzarlo. Con una if() dovrai NON stamparlo su seriale quando c'e' una certa condizione (che solo tu sai visto che non dai molte info ne codice).

questo è il codice.

int lucePin = 11;
int farettiPin = 12;
String readString;
#include <Servo.h> 
Servo myservo;
int rele = 22;
//----------------------------
const int analogInPin = A5;  
const int analogOutPin = 1; 
int sensorValue = 0;       
int outputValue = 0;

//-----RGB SERIALE 
//int pinR =5; 
//int pinG =6;  
//int pinB =3;
int VERDE = 3;  
int BLU = 5;  
int ROSSO = 6;
//byte valR = 255;
//byte valG = 255;
//byte valB = 255;
//char buffer[7] ;
//int p = 0;
//byte inByte = 0;
//----------------------------
void setup() {
  Serial.begin(9600);
  Serial.println("Init Sketch");
  Serial.setTimeout(4);
  pinMode(lucePin, OUTPUT);
  pinMode(farettiPin, OUTPUT); 
  myservo.attach (9);
//-------------------------------------------------
  //pinMode(pinR, OUTPUT);
  //pinMode(pinG, OUTPUT);
  //pinMode(pinB, OUTPUT);
  pinMode(VERDE, OUTPUT);  
  pinMode(BLU, OUTPUT);  
  pinMode(ROSSO, OUTPUT);
//-------------------------------------------------
}
void loop(){
/*  
  if (Serial.available() >0) {
      inByte = Serial.read();
      if (inByte == '#') {
          while (p < 6) // Accumula 6 caratteri
          {
            buffer[p] = Serial.read();
            p++;
          } 
          valR=convHex2Dec(buffer[1])+convHex2Dec(buffer[0])*16;
          valG=convHex2Dec(buffer[3])+convHex2Dec(buffer[2])*16;
          valB=convHex2Dec(buffer[5])+convHex2Dec(buffer[4])*16;
          p = 0;
         }
        analogWrite(pinR,valR);
        analogWrite(pinG,valG);
        analogWrite(pinB,valB);
         }  
         */
//***********************************************  
  sensorValue = analogRead(analogInPin);            
  outputValue = map(sensorValue, 0, 1023, 0, 255);  
  analogWrite(analogOutPin, outputValue);          
  Serial.print(" " );                     
  Serial.println(sensorValue);        
  delay(1000);  
 
  while (Serial.available()) {
      delay(3);  
      char c = Serial.read();
      readString += c;
      
}
// CONTROLLA LA LUMINOSITA' PER IL CONTROLLO TENDINE SOLE    
    if (sensorValue  > 50 && sensorValue < 90) {
            myservo.write (180);}
    else if  (sensorValue  > 90 && sensorValue < 130) {
            myservo.write (135);}
    else if  (sensorValue  > 130 && sensorValue < 190) {
            myservo.write (90);}
    else if  (sensorValue  > 190 && sensorValue < 350) {
            myservo.write (45);}
    else if  (sensorValue  > 350 && sensorValue < 680) {
            myservo.write (0);}              

// CONTROLLO MANUALE TENDINE SOLE TRAMIDE TABLET
    if (readString == "zero" ) {
            int zero = Serial.read ();    
            Serial.println (zero); 
            myservo.write (0); } 
    if (readString == "quattro") {
            int quattro = Serial.read ();    
            Serial.println (quattro); 
            myservo.write (45); }
    if (readString == "nove") {
            int nove = Serial.read ();    
            Serial.println (nove); 
            myservo.write (90); }
    if (readString == "centotre") {
            int centotre = Serial.read ();    
            Serial.println (centotre); 
            myservo.write (135); }
    if (readString == "centoottanta") {
            int centoottanta = Serial.read ();    
            Serial.println (centoottanta); 
            myservo.write (180); }

// ATTIVAZIONE/DISATTIVAZIONE RELE SENSORE LUCE SOLE

    if (readString == "sensoroff") {
       digitalWrite (rele, LOW);}
    else if (readString == "sensoron") {
       digitalWrite (rele, HIGH); }
       

// ACCENSIONI LUCI ESPANDIBILE A PIU' LUCI DA TABLET
    if (readString.length() >0) {
            Serial.println(readString);
    if (readString == "luceon") {
            digitalWrite(lucePin, HIGH); }
    if (readString == "farettion") {
            digitalWrite(farettiPin, HIGH); }    
    if (readString == "luceoff") {
            digitalWrite(lucePin, LOW); }
    if (readString == "farettioff") {
            digitalWrite(farettiPin, LOW); }
  
  
//CONTROLLO STRISCIA RGB TRAMIDE TABLED
    if (readString == "blu")   {    
           digitalWrite(VERDE, LOW);
           digitalWrite(ROSSO, LOW);
           digitalWrite(BLU, HIGH);
           delay(500);}   
    if (readString == "verde") {
           digitalWrite(VERDE, LOW);
           digitalWrite(ROSSO, HIGH);
           digitalWrite(BLU, LOW);
           delay(500); }
    if (readString == "rosso") {
           digitalWrite(VERDE, HIGH);
           digitalWrite(ROSSO, LOW);
           digitalWrite(BLU, LOW);
           delay(500); }
    if (readString == "viola") {
           digitalWrite(VERDE, HIGH);
           digitalWrite(ROSSO, LOW);
           digitalWrite(BLU, HIGH);
           delay(500); } 
    if (readString == "rosa"){
           digitalWrite(VERDE, HIGH);
           digitalWrite(ROSSO, HIGH);
           digitalWrite(BLU, LOW);
           delay(500); } 
    if (readString == "giallo"){
           digitalWrite(VERDE, LOW);
           digitalWrite(ROSSO, HIGH);
           digitalWrite(BLU, HIGH);
           delay(500); }
    if (readString == "bianco"){
           digitalWrite(VERDE, HIGH);
           digitalWrite(ROSSO, HIGH);
           digitalWrite(BLU, HIGH);
           delay(500); }

    readString = "";
}
}
/*
int convHex2Dec(byte hex)
{
  if (hex >= '0' && hex <= '9') { return hex - '0'; }
  else if (hex >= 'A' && hex <= 'F') { return hex - 'A' + 10; }
}
*/
// CONTROLLA LA LUMINOSITA' PER IL CONTROLLO TENDINE SOLE    
    if (sensorValue  > 50 && sensorValue < 90) {
            myservo.write (180);}
    else if  (sensorValue  > 90 && sensorValue < 130) {
            myservo.write (135);}
    else if  (sensorValue  > 130 && sensorValue < 190) {
            myservo.write (90);}
    else if  (sensorValue  > 190 && sensorValue < 350) {
            myservo.write (45);}
    else if  (sensorValue  > 350 && sensorValue < 680) {
            myservo.write (0);}

questi sono i dati che mi arrivano dal sensore luce. che mi comanda un servo a varie luminosità.

poi da tablet ho la posibilità di impostare le posizioni manualmente con dei pulsanti.

// CONTROLLO MANUALE TENDINE SOLE TRAMIDE TABLET
    if (readString == "zero" ) {
            int zero = Serial.read ();    
            Serial.println (zero); 
            myservo.write (0); } 
    if (readString == "quattro") {
            int quattro = Serial.read ();    
            Serial.println (quattro); 
            myservo.write (45); }
    if (readString == "nove") {
            int nove = Serial.read ();    
            Serial.println (nove); 
            myservo.write (90); }
    if (readString == "centotre") {
            int centotre = Serial.read ();    
            Serial.println (centotre); 
            myservo.write (135); }
    if (readString == "centoottanta") {
            int centoottanta = Serial.read ();    
            Serial.println (centoottanta); 
            myservo.write (180); }

mi succede questo, che se muovo il servo manualmente da tablet, poi mi ritorna giustamente alla posizione che dice il sensore luce.
per evitare di fare questo ho provato ad azzerare i valori del sensore luce anche con la funzione boolean, ma mi rimane un valore fisso sul seriale che mi da fastidio al servo. l’unica cosa che ho trovato e inserire un relè che mi disattiva il negativo sul sensore cosi mi va fuori scala con un valore alto da non dare problemi.

È totalmente sbaglaito il concetto del Tuo sketch.

Se vuoi regoare sia in automatico che manualmente un attuatore allora setta una variabile che definisce questo. poi a secondo del contenuto di quella variabile il valore di settaggio del attuatore lo prendi dall' automatismo (sensore luce) o da un altra variabie settata a mao.

Ciao Uwe

ok provo grazie mille