Forum >Replies by gbcstott
userhead gbcstott
Replies (1)
  • You Reply: First of all, I know that this topic is old, but I just got my RoMeo board and tried the Button 1-5 example from the wiki for this board and found that it did not work. I then come and look at this topic to see what was wrong. I expect other people will do the same so I want to post what I found wrong.

    First the example has a typo. The line for Serial.println(msgs[keys]) has println with a capital I instead of a little l.

    Second the example does not do a begin of the serial port. so no serial port output.

    Here is my sketch after I fix the above and added some more output messages. I Upload this to the board and then started a Serial Monitor. I have also put an example output at theend of this messages. Hope this helps:

    //
    // Key message
    char msgs[5][15] = {"Right Key OK ",
                        "Up Key OK    ",
                        "Down Key OK  ",
                        "Left Key OK  ",
                        "Select Key OK" };
    char start_msg[15] = {"Start loop "};                   
    int  adc_key_val[5] ={30, 150, 360, 535, 760 };
    int NUM_KEYS = 5;
    int adc_key_in;
    int key=-1;
    int oldkey=-1;
    void setup() {
        pinMode(13, OUTPUT);  //we'll use the debug LED to output a heartbeat
        Serial.begin(9600);
       
        /* Print that we made it here */
        Serial.println(start_msg);
    }

    void loop()
    {
        adc_key_in = analogRead(7);    // read the value from the sensor 
        digitalWrite(13, HIGH);
        /* get the key */
        key = get_key(adc_key_in);    // convert into key press
        if (key != oldkey) { // if keypress is detected
            delay(50); // wait for debounce time
            adc_key_in = analogRead(7);    // read the value from the sensor 
            key = get_key(adc_key_in);    // convert into key press
            if (key != oldkey) {
                oldkey = key;
                if (key >=0){
                    Serial.println(adc_key_in, DEC);
                    Serial.println(msgs[key]);
                }
          }
        }
        digitalWrite(13, LOW);
    }
    // Convert ADC value to key number
    int get_key(unsigned int input)
    { int k;
    for (k = 0; k < NUM_KEYS; k++)
    {
    if (input < adc_key_val[k])
    {  return k;  }
    }
        if (k >= NUM_KEYS)
            k = -1;    // No valid key pressed
        return k;
    }


    Here is the output as I pressed the keys:

    Start loop
    0
    Right Key OK
    146
    Up Key OK   
    331
    Down Key OK 
    507
    Left Key OK 
    742
    Select Key OK
    0
    Right Key OK