Go Down

Topic: problema software lc (Read 2091 times) previous topic - next topic

wirefree

allora scarico  l'ultima ide e faccio anche questo test ,, pero mettendo  nelle librerie funziona correttamente , prima non la vedeva,,  bho e probabile che ci sia qualcosa di anomalo nel ide che ho installato

wirefree

ancora un piccolo aiuto , che non riesco a risolvere , al monitor ho alleganto un telecomando , la funzione è

questa: se premo un tasto del telecomando il monitor a una determita frase

mentre se premo un altro tasto il monitor visualizza un altra frase , nulla di anomalo

fino a due tre volte funziona bene  poi non corrisponde più , il monitor lampeggia con la scritta  e non riesce ad uscire dalla quella condizione


allego il lo sckiech  non so dove sono le anomalie .
Quote
#include <IRremote.h>
int receiver = 2;  // settiamo il pin 11 come pin dove andar a leggere i segnali ricevuti
 
IRrecv irrecv(receiver);  // istanziamo un oggetto di tipo irrecv
 
decode_results results;  // istanziamo un oggetto di tipo decode_result
 ////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define   CONTRAST_PIN   9
#define   BACKLIGHT_PIN  7
#define   CONTRAST       125


int x;// ciclo for
void setup(){


 pinMode(CONTRAST_PIN, OUTPUT);
  pinMode(BACKLIGHT_PIN, OUTPUT);             //FUNZIONI MONITOR
  digitalWrite(BACKLIGHT_PIN, HIGH);
  analogWrite (CONTRAST_PIN, CONTRAST);

  irrecv.enableIRIn();// FUNZIONE TELECOMANDO

  lcd.begin(16,2);
 lcd.print("!!!ALLARME!!! ");
  lcd.setCursor (0,1);
    lcd.println("!!!DISINSERITO!!! ");}

void loop() {



if (irrecv.decode(&results)) {
irrecv.resume();                ////FUNZIONE TELECOMANDO DI DEFAULT
 
}


if ( results.value ==0XFFA857 ){  //se  premo il tasto 1 del telecomando esegue le istruizioni qui di seguito

       
for(x=0;x<5;x++){   //FOR  per avre un ritardio di circa 20 secondi
 

 
    lcd.begin(16,2);
     lcd.println("--ATTENZIONE--- ");
      lcd.setCursor (0,1);
        lcd.print(" ALLARME ATTIVO");
          delay(2000);
            lcd.clear();
              lcd.begin(16,2);
                lcd.print("FRA 20 SECONDI");
                  delay(2000);}
                 
                  lcd.begin(16,2);
                  lcd.print("ALLARME ATTIVO  "); }
             

 if ( results.value == 0XFFE01F ) {   //se  premo il tasto 2 del telecomando esegue le istruizioni qui di seguito
 

  lcd.begin(16,2);
    lcd.print("----ALLARME---- ");
      lcd.setCursor (0,1);
        lcd.println("---DISINSERITO--- ");
           delay(400);
     
       }}

nid69ita

#32
Apr 18, 2016, 12:02 pm Last Edit: Apr 18, 2016, 12:03 pm by nid69ita
Secondo me è sbagliata la logica.  Quando da telecomando arriva il tasto, setta una variabile e poi ragiona su quella. E' importante il resume() sul receiver sia fatto nel giusto momento.


Code: [Select]
int StatoTc=0;  // tra le variabili globali
...
if (irrecv.decode(&results))
{ if ( results.value ==0xFFA857 ) StatoTc=1;
  if ( results.value ==0xaltrox ) StatoTc=2;
  ...
  irrecv.resume();                ////FUNZIONE TELECOMANDO DI DEFAULT
}
if( StatoTc==1) allora ...
my name is IGOR, not AIGOR

wirefree

#33
Apr 18, 2016, 12:55 pm Last Edit: Apr 18, 2016, 12:58 pm by gpb01
dove che sbaliato ad inserire le tue istruzioni perdonami , inserisco lo schiech :
Code: [Select]
#include <IRremote.h>
int receiver = 2;  // settiamo il pin 11 come pin dove andar a leggere i segnali ricevuti
 
IRrecv irrecv(receiver);  // istanziamo un oggetto di tipo irrecv
 
decode_results results;  // istanziamo un oggetto di tipo decode_result
 ////////////////////////////////////////////////////////////////////////////
 /////////////////////////////////////////////////////////////////////////////
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

#define   CONTRAST_PIN   9
#define   BACKLIGHT_PIN  7
#define   CONTRAST       125
 int statotc=0;  // tra le variabili globali
int statotc=1;
int x;// ciclo for
void setup(){


 pinMode(CONTRAST_PIN, OUTPUT);
  pinMode(BACKLIGHT_PIN, OUTPUT);             //FUNZIONI MONITOR
  digitalWrite(BACKLIGHT_PIN, HIGH);
  analogWrite (CONTRAST_PIN, CONTRAST);

  irrecv.enableIRIn();// FUNZIONE TELECOMANDO

  lcd.begin(16,2);
 lcd.print("!!!ALLARME!!! ");
  lcd.setCursor (0,1);
    lcd.println("!!!DISINSERITO!!! ");}

void loop() {



if (irrecv.decode(&results)) {
 
 
  if ( results.value ==0xFFA857 ) statotc=1;
  if ( results.value ==0XFFE01F ) statotc=2;
 
 
irrecv.resume();                ////FUNZIONE TELECOMANDO DI DEFAULT
 
}


if( StatoTc==1) {  //se 0XFFA857 premo il tasto 1 del telecomando esegue le istruizioni qui di seguito

       
for(x=0;x<1;x++){   //FOR  per avre un ritardio di circa 20 secondi
 

 
    lcd.begin(16,2);
     lcd.println("--ATTENZIONE--- ");
      lcd.setCursor (0,1);
        lcd.print(" ALLARME ATTIVO");
          delay(2000);
            lcd.clear();
              lcd.begin(16,2);
                lcd.print("FRA 20 SECONDI");
                  delay(2000);}
                 
                  lcd.begin(16,2);
                  lcd.print("ALLARME ATTIVO  "); }
             

 if( StatoTc==2)  {   //0XFFE01F  se  premo il tasto 2 del telecomando esegue le istruizioni qui di seguito
 

  lcd.begin(16,2);
    lcd.print("----ALLARME---- ");
      lcd.setCursor (0,1);
        lcd.println("---DISINSERITO--- ");
           delay(400);
     
       }}


--- wirefree, ti prego di usare correttamente i tag ... per il codice si usano i tag CODE e non i tag QUOTE. Grazie - gpb01

nid69ita

#34
Apr 18, 2016, 02:08 pm Last Edit: Apr 18, 2016, 02:26 pm by nid69ita
Code: [Select]
#include <IRremote.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>

#define pinReceiver  2
IRrecv irrecv(pinReceiver);  // istanziamo un oggetto di tipo irrecv
decode_results results;  // istanziamo un oggetto di tipo decode_result

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
#define   CONTRAST_PIN   9
#define   BACKLIGHT_PIN  7
#define   CONTRAST       125
byte statoA = 0; // stato allarme, pilotato da Telecomando
byte x;          // ciclo for

void setup()
{ pinMode(CONTRAST_PIN, OUTPUT);
  pinMode(BACKLIGHT_PIN, OUTPUT);             //FUNZIONI MONITOR
  digitalWrite(BACKLIGHT_PIN, HIGH);
  analogWrite (CONTRAST_PIN, CONTRAST);
  irrecv.enableIRIn();// FUNZIONE TELECOMANDO
  lcd.begin(16, 2);
}

void loop()
{ if (irrecv.decode(&results))
  { if ( results.value == 0xFFA857 ) statoA = 1; // allarme in attivazione (2=attivo)
    if ( results.value == 0XFFE01F ) statoA = 0; // allarme disattivo
    irrecv.resume();                ////FUNZIONE TELECOMANDO DI DEFAULT
  }
  if ( statoA == 1)  //se 0XFFA857 premo il tasto 1 del telecomando esegue le istruizioni qui di seguito
  { // 0123456789012345
    lcd.setCursor(0, 0); lcd.print("*ALLARME ATTIVO*");
    lcd.setCursor(0, 1); lcd.print("->FRA 00 SECONDI");
    for (x = 1; x < 20; x++)
    { lcd.setCursor(0, 6); // 2 cifre
      if (x < 10) lcd.print("0");
      lcd.print(x);
      delay(1000);
    }
    statoA = 2;  // finito ciclo passa a stato allarme attivo
    lcd.clear();
  }
  if (statoA == 2)
  { lcd.setCursor(0, 0); lcd.print("ALLARME ATTIVO");
  }
  if (statoA == 0)   //0XFFE01F  se  premo il tasto 2 del telecomando esegue le istruizioni qui di seguito
  { lcd.setCursor(0, 0); lcd.print("----ALLARME---- ");
    lcd.setCursor(0, 1); lcd.println("---DISINSERITO--- ");
  }
}


my name is IGOR, not AIGOR

nid69ita

#35
Apr 18, 2016, 02:09 pm Last Edit: Apr 18, 2016, 02:27 pm by nid69ita
Nello stato attivazione quel for è una schifezza. Fare un ciclo da 0 a <1  per fare 1 ciclo che senso ha ?
for (x = 0; x < 1; x++)  //FOR  per avre un ritardio di circa 20 secondi

Può essere carino invece usare quel for con un vero conteggio di 20 secondi e mostrarlo su lcd
Inoltre ti ho messo uno statoA=2 perchè quel ciclo for() deve essere fatto quando passi da allarme disattivo ad attivo e non sempre
my name is IGOR, not AIGOR

wirefree

ok grazie ,,
dei tuoi suggerimenti testo il tuo skech

Go Up