27-05-2019, 18:54
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:
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.
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;
}
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.