Показать сообщение отдельно
Старый 29.07.2017, 23:59   #772
Chois
Новый Пользователь
 
Регистрация: 25.02.2015
Регион: Беларусь
Машина: VW Golf IV
Сообщений: 15
Chois is on a distinguished road
По умолчанию

вот что у меня получилось (может и коряво, но главное работает)
Код:
#include <SPI.h>
// библиотека SPI должна быть в стандартном софте, ну или её можно скачать.

const byte POT = B00010000; //выбор канала потенциометра

// Коды имеющихся на руле кнопок
const int next=6;
const int previous=54;
const int vol_up=140;

int csPin=10; // CS на цифровом потенциометре
int wheelPin=A5; // аналоговый пин, на котором мы считываем сопротивление нажатой на руле кнопки
int i=0;
int prevButton=0;

int r;  //keyboard
unsigned long flag = 0;  //keyboard

void setup() {   
  
  pinMode(csPin, OUTPUT);   
  delay(50);
  SPI.begin();
  delay(50);
  
  SPI.transfer(POT); // команда
  SPI.transfer(0); // значение
  pinMode(wheelPin, INPUT);

  delay(100);
  Keyboard.begin();  //keyboard
}

int getR() { // Эта функция читает сопротивление с кнопок на руле и возвращает код нажатой кнопки, либо 0

  // читаем сопротивление (на самом деле напряжение, конечно) на аналоговом пине
  int r=analogRead(wheelPin); 
      //if(r>=release_button - button_release_range && r<=release_button + button_release_range && flag == 0) //keyboard 

  if (r>=2 && r<=10) return(next);
  if (r>=50 && r<=60) return(previous);
  if (r>=120 && r<=156) return(vol_up);
}

// ОСНОВНОЙ ЦИКЛ
void loop() {
  int currButton=getR(); // заносим в переменную currButton код нажатой кнопки
  if (currButton!=prevButton) { // если значение поменялось с прошлого раза

    delay(10);
    currButton=getR(); // ждем 10ms и читаем еще раз, чтобы исключить "дребезг" кнопки

    if (currButton!=prevButton) { // если код кнопки точно поменялся с прошлого раза
      //Serial.println(currButton);
      prevButton=currButton;     // сохраняем новое значение в переменную prevButton

      // Выставляем сопротивление на потенциометре, тем самым посылаем команду на магнитолу.
      // Значения сопротивлений даны для Pioneer, для магнитол других марок числа будут другие.
      SPI.transfer(0); 
      switch(currButton) {
       case next: digitalWrite(csPin, LOW);
                    SPI.transfer(POT); 
                    SPI.transfer(21); 
                    digitalWrite(csPin, HIGH);
                 
                      Remote.next();  
                      flag = 0;  
                      delay(10); 
                      Remote.clear(); 
                      break;  // 16k
      
     case previous: digitalWrite(csPin, LOW);
                    SPI.transfer(POT); 
                    SPI.transfer(50); 
                    digitalWrite(csPin, HIGH);
                     
                      Remote.previous();  
                      flag = 0;  
                      delay(10);  
                      Remote.clear();  
                     break;  // 24k
                    
                    
       case vol_up: digitalWrite(csPin, LOW);
                     SPI.transfer(POT); 
                     SPI.transfer(14); 
                     digitalWrite(csPin, HIGH);
                     break;  // 11k
                    
       default:      digitalWrite(csPin, LOW);
                     SPI.transfer(POT);
                     SPI.transfer(0);
                     digitalWrite(csPin, HIGH);
                     break;
          
     }
   }
  }
    delay(5);
}

Последний раз редактировалось Chois; 10.09.2017 в 14:47.
Chois вне форума   Ответить с цитированием