• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Programowanie przycisku - Romeo V2
#1
Witam, posiadam płytkę Dfrobot Romeo V2. Chciałem wykorzystać zamontowane na niej przyciski. W instrukcji na stronie producenta jest przykład ich użycia - Pod sekcją "Example use of Button S1-S5"
Nie rozumiem w pełni tego kodu. Zamontowałem diodę led na pin 13 i ten program owszem działa.
Chcę go zmodyfikować by po wciśnięciu konkretnego przycisku wykonał jakąś akcję. Zmodyfikowałem go trochę i wygląda tak: 
Kod:
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
 pinMode(12, OUTPUT);
 pinMode(11, OUTPUT);
 Serial.begin(9600);

 /* Print that we made it here */
 Serial.println(start_msg);
}

void loop()
{
 adc_key_in = analogRead(0);    // 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(0);    // 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);
       Serial.println(msgs[key]);
       if(adc_key_in==0){
         digitalWrite(11,LOW);
         digitalWrite(12,HIGH);
       }
       else if(adc_key_in==143){
         digitalWrite(12,LOW);
         digitalWrite(11,HIGH);
       }
     }
   }
 }
 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;
}
Dodałem tylko dwie instrukcje "IF" pozwalające mi odpalać diody LED.
Przechodząc do sedna, chcę jakoś uszczuplić ten program by nie był taki obszerny. Musi być jakieś prostsze wyjście aby odwołać się do konkretnego przycisku.
Dziękuję z góry za pomoc.
 
Odpowiedź
  


Wiadomości w tym wątku
Programowanie przycisku - Romeo V2 - przez TruePatrick0 - 27-05-2019, 18:54

Skocz do:


Przeglądający: 3 gości