Go Down

Topic: Please help me with "int function()" ! [Solved] (Read 262 times) previous topic - next topic

vacer25

Feb 13, 2013, 12:39 am Last Edit: Feb 13, 2013, 12:53 am by vacer25 Reason: 1
Hello, first of all sorry if i posted this in a wrong section, this is my first post.

Anyway... I am not very experienced with making "int functions()" (the ones outside the main loop)

I'm trying to make a "getKeyboard" function to read the PS/2 keyboard buttons, the code works in the main loop, but when i try to put it into its own function (to make things a lot more organized), it gives me this error message :

Code: [Select]

lcd_Keyboard_Test.cpp: In function 'void loop()':
Lcd_Keyboard_Test:151: error: invalid conversion from 'int (*)()' to 'int'


Here is my code :

Code: [Select]

/*  PS2Keyboard library example
 
 PS2Keyboard now requries both pins specified for begin()

 keyboard.begin(data_pin, irq_pin);
 
 Valid irq pins:
    Arduino:      2, 3
    Arduino Mega: 2, 3, 18, 19, 20, 21
    Teensy 1.0:   0, 1, 2, 3, 4, 6, 7, 16
    Teensy 2.0:   5, 6, 7, 8
    Teensy++ 1.0: 0, 1, 2, 3, 18, 19, 36, 37
    Teensy++ 2.0: 0, 1, 2, 3, 18, 19, 36, 37
    Sanguino:     2, 10, 11
 
 for more information you can read the original wiki in arduino.cc
 at http://www.arduino.cc/playground/Main/PS2Keyboard
 or http://www.pjrc.com/teensy/td_libs_PS2Keyboard.html
 
 Like the Original library and example this is under LGPL license.
 
 Modified by Cuninganreset@gmail.com on 2010-03-22
 Modified by Paul Stoffregen <paul@pjrc.com> June 2010
*/
 
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);    
 
#include <PS2Keyboard.h>

const int DataPin = 20;
const int IRQpin =  21;

int key_in = 0;

int input = 0;
int val = 100;

  byte one[8] = {
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b11111
};
  byte two[8] = {
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b11111,
 0b11111
};
  byte three[8] = {
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b11111,
 0b11111,
 0b11111
};
  byte four[8] = {
 0b00000,
 0b00000,
 0b00000,
 0b00000,
 0b11111,
 0b11111,
 0b11111,
 0b11111
};
  byte five[8] = {
 0b00000,
 0b00000,
 0b00000,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111
};
  byte six[8] = {
 0b00000,
 0b00000,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111
};
  byte seven[8] = {
 0b00000,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111
};
  byte eight[8] = {
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111,
 0b11111
};

PS2Keyboard keyboard;

void setup() {
 
 lcd.begin(16,2);
 
 lcd.createChar(1, one); //send the custom characters to the LCD
 lcd.createChar(2, two); //             ||
 lcd.createChar(3, three);//            ||
 lcd.createChar(4, four);//             ||
 lcd.createChar(5, five);//             ||
 lcd.createChar(6, six);//              ||
 lcd.createChar(7, seven);//            ||
 lcd.createChar(8, eight);//            \/          
 lcd.setCursor(0,0);
 lcd.print ("      LCD      ");  
 lcd.setCursor(0,1) ;
 lcd.print ("   BAR GRAPH   ");  
 delay(1000);
 lcd.clear();
 
 delay(1000);
 keyboard.begin(DataPin, IRQpin);
 Serial.begin(9600);
 Serial.println("Keyboard Test:");
 
 pinMode(10,OUTPUT);
 
}

void loop() {
 
  input = getKeyboard;
 
  val = val + input;
   
  setVal(val);
  printVal(val);
  barGraph(val);
 
}

int getKeyboard()
{
if (keyboard.available()) {
   
    Serial.println("////keyboard available\\\\");
   
  char c = keyboard.read();
   
    if (c == PS2_UPARROW) {
      if(val<100){
    // val++;
    return 1;
     Serial.println("UP arrow pressed");
      }
   }
   else if (c == PS2_DOWNARROW) {
     if(val>0){
   // val--;
   return -1;
    Serial.println("DOWN arrow pressed");
     }
  }  
 
}
}


void setVal(int val) {
 
 val = map(val, 0, 100, 0, 255);
 
 analogWrite(10, val);
 
}

void printVal(int val) {
 
  if(val<10){
lcd.setCursor(2, 0);
lcd.print(val);
lcd.setCursor(0, 0);
lcd.print("  ");
lcd.setCursor(3, 0);
lcd.print("%");
}
if(val>=10 && val < 100){
lcd.setCursor(1, 0);
lcd.print(val);
lcd.setCursor(0, 0);
lcd.print(" ");
lcd.setCursor(3, 0);
lcd.print("%");
}
if(val>=100){
lcd.setCursor(0, 0);
lcd.print(val);
lcd.setCursor(3, 0);
lcd.print("%");
}
 
 
}  

void barGraph(int val) {
 
 val = map(val, 0, 100, 0, 16);
 
       if(val != 0){
   if(val <= 8){
   lcd.setCursor(15,1);  
   lcd.write(val);  //print out data
   lcd.setCursor(15,0);  
   lcd.print(" ");  //clear out remainder data
   }
     }
   if(val == 0){
     lcd.setCursor(150,1);  
   lcd.print(" ");  //print out data
   lcd.setCursor(15,0);  
   lcd.print(" ");  //clear out remainder data
   }
   
     
   if(val > 8){
   lcd.setCursor(15,1);  
   lcd.write(8);  //print out full block
   lcd.setCursor(15,0);  
   lcd.write(val-8);  //print out remainder data
   }
   
}    

/*

if (c == PS2_ENTER) {
     Serial.println();
   } else if (c == PS2_TAB) {
     Serial.print("     ");
   } else if (c == PS2_ESC) {
     Serial.print("[ESC]");
   } else if (c == PS2_PAGEDOWN) {
     Serial.print("[PgDn]");
   } else if (c == PS2_PAGEUP) {
     Serial.print("[PgUp]");
   } else if (c == PS2_LEFTARROW) {
     Serial.print("[Left]");
   } else if (c == PS2_RIGHTARROW) {
     Serial.print("[Right]");
   } else if (c == PS2_UPARROW) {
     Serial.print("[Up]");
   } else if (c == PS2_DOWNARROW) {
     Serial.print("[Down]");
   } else if (c == PS2_DELETE) {
     Serial.print("[Del]");
     
*/



Here is the part that doesn't work :

Code: [Select]

void loop() {
 
  input = getKeyboard;
 
  val = val + input;
   
  setVal(val);
  printVal(val);
  barGraph(val);
 
}

int getKeyboard()
{
if (keyboard.available()) {
   
    Serial.println("////keyboard available\\\\");
   
  char c = keyboard.read();
   
    if (c == PS2_UPARROW) {
      if(val<100){
    // val++;
    return 1;
     Serial.println("UP arrow pressed");
      }
   }
   else if (c == PS2_DOWNARROW) {
     if(val>0){
   // val--;
   return -1;
    Serial.println("DOWN arrow pressed");
     }
  }  
 
}
}

billroy

Code: [Select]
   input = getKeyboard;

You probably meant to call the function:

Code: [Select]
   input = getKeyboard();

-br

vacer25

Thank you very much I should of thought of that before !

Go Up