Go Down

Topic: criar menu lcd shield (Read 4 times) previous topic - next topic

tucandroid

hey amigo,

acreditas que tou mesmo a nora com isto? :(

nao consigo mesmo atinar com isto.

é assim tao complicado ou estou a ser burro como uma porta? :)

cumprimentos

tucandroid

#6
Apr 06, 2013, 03:41 pm Last Edit: Apr 06, 2013, 03:43 pm by tucandroid Reason: 1
fiz umas alteraçoes para testar o animal, so começa a dar erros na IDE no loop.

podes ver pf?

alterei todos os print.lcd para mostrar o texto, depois coloco ao certo, mas assim a ver se entro na coisa. :)
o codigo é este:
Code: [Select]
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>

LiquidCrystal lcd(8, 9, 4, 5, 6, 7);

int tempAlarmPin = 22;    //Buzzer ligado no PIN 22
#define ONE_WIRE_BUS 28 //Sensores ligados no PIN 28
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
//Endereços sensores
DeviceAddress insideThermometer = { 0x28, 0x0C, 0x0D, 0xB0, 0x04, 0x00, 0x00, 0x80 };
DeviceAddress outsideThermometer = { 0x28, 0x49, 0x04, 0xB1, 0x04, 0x00, 0x00, 0x62 };
// define some values used by the panel and buttons
int lcd_key     = 0;
int adc_key_in  = 0;
#define butRIGHT  0
#define butUP     1
#define butDOWN   2
#define butLEFT   3
#define butSELECT 4
#define butNONE   5
#define HOME      0
#define MENU_1   1
#define MENU_2   2
#define MENU_3   3
#define MENU_4   4

// read the buttons
int read_LCD_buttons()
{
adc_key_in = analogRead(0);      // read the value from the sensor
// my buttons when read are centered at these valies: 0, 144, 329, 504, 741
// we add approx 50 to those values and check to see if we are close
if (adc_key_in > 1000) return butNONE; // We make this the 1st option for speed reasons since it will be the most likely result
if (adc_key_in < 50)   return butRIGHT;  
if (adc_key_in < 195)  return butUP;
if (adc_key_in < 380)  return butDOWN;
if (adc_key_in < 555)  return butLEFT;
if (adc_key_in < 790)  return butSELECT;  
return butNONE;  // when all others fail, return this...
}
void setup(void)
{
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);

pinMode(tempAlarmPin, OUTPUT);    //Buzzer

lcd.begin(16,2); // columns, rows. use 16,2 for a 16x2 LCD, etc.
lcd.clear(); // start with a blank screen
}

void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
lcd.print("Error");
} else {
lcd.print(tempC);
lcd.print("C");
}
}

void alarm(DeviceAddress deviceAddress){
float tempA = sensors.getTempC(deviceAddress);
if ( (tempA) >= 25) //Temp superior a 23 Graus
   {
   digitalWrite(tempAlarmPin, HIGH);
   delay(500);
   digitalWrite(tempAlarmPin, LOW);
   }
   else if ( (tempA) <= 20) //Temp inferior a 20 graus
   {
   digitalWrite(tempAlarmPin, HIGH);
   delay(500);
   digitalWrite(tempAlarmPin, LOW);

   }
}

void trataLCD() {

static unsigned char menu = 0; //isto faz com que o menu correcto seja mostrado sempre que a função é chamada.

unsigned int button = analogRead(A0);
//criar funcao que passa o analog read para uma variavel tipo butUP...

//máquina de estados.
switch(menu) {
 case HOME: {
   if (button == butUP) {
     menu = MENU_1;
   }
   if (button == butDOWN) {
     menu = MENU_4;
   }
   lcd.clear();
   lcd.print("hora...");
   lcd.setCursor(0,1);
   lcd.print("data...");
   button = butNONE;
   break;
 };
 case MENU_1: {
   if (button == butUP) {
     menu++;
   }
   if (button == butDOWN) {
     menu--;
   }
   lcd.clear();
   lcd.print("temp aquario");
   button = butNONE;
   break;
 };
 case MENU_2: {
   if (button == butUP) {
     menu++;
   }
   if (button == butDOWN) {
     menu--;
   }
   lcd.clear();
   lcd.print("temp exterior");
   button = butNONE;    
   break;
 };
 case MENU_3: {
       if (button == butUP) {
     menu++;
   }
   if (button == butDOWN) {
     menu--;
   }
   lcd.clear();
   lcd.print("distancia");
   button = butNONE;
   break;
 };
 case MENU_4: {
   if (button == butUP) {
     menu = HOME;
   }
   if (button == butDOWN) {
     menu--;
   }
   lcd.clear();
   lcd.print("temperatura...");
   button = butNONE;

   break;
 }
}

void loop(void)
{
}


na parte do loop nao sei como fazer. :(

bubulindo

#7
Apr 06, 2013, 04:21 pm Last Edit: Apr 06, 2013, 04:28 pm by bubulindo Reason: 1
Que erro dá?

Code: [Select]

void trataLCD() {

static unsigned char menu = 0; //isto faz com que o menu correcto seja mostrado sempre que a função é chamada.

unsigned int button = read_LCD_buttons();

//máquina de estados.
switch(menu) {
  case HOME: {
    if (button == butUP) {
      menu = MENU_1;
    }
    if (button == butDOWN) {
      menu = MENU_4;
    }
    lcd.clear();
    lcd.print("hora...");
    lcd.setCursor(0,1);
    lcd.print("data...");
    button = butNONE;
    break;
  };
  case MENU_1: {
    if (button == butUP) {
      menu++;
    }
    if (button == butDOWN) {
      menu--;
    }
    lcd.clear();
    lcd.print("temp aquario");
    button = butNONE;
    break;
  };
  case MENU_2: {
    if (button == butUP) {
      menu++;
    }
    if (button == butDOWN) {
      menu--;
    }
    lcd.clear();
    lcd.print("temp exterior");
    button = butNONE;   
    break;
  };
  case MENU_3: {
        if (button == butUP) {
      menu++;
    }
    if (button == butDOWN) {
      menu--;
    }
    lcd.clear();
    lcd.print("distancia");
    button = butNONE;
    break;
  };
  case MENU_4: {
    if (button == butUP) {
      menu = HOME;
    }
    if (button == butDOWN) {
      menu--;
    }
    lcd.clear();
    lcd.print("temperatura...");
    button = butNONE;

    break;
  }
}
Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

tucandroid

pelo que me parece estou a falhar na parte do loop. ;(

Code: [Select]
160: error: a function-definition is not allowed here before '{' token
161: error: expected `}' at end of input

bubulindo

Acho que precisas de tirar uma pausa...

Code: [Select]

 case MENU_4: {
   if (button == butUP) {
     menu = HOME;
   }
   if (button == butDOWN) {
     menu--;
   }
   lcd.clear();
   lcd.print("temperatura...");
   button = butNONE;

   break;
 }//end case
} //end switch...

}//<- Falta isto... end função.

void loop(void)
{
}


Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up