roboforum.ru

Технический форум по робототехнике.

Помогите переделать код под SPI библиотеку

Помогите переделать код под SPI библиотеку

DimiDr0l » 19 апр 2016, 16:24

Коллеги добрый день.
Помогите кто чем может как этот код переделать под нормальную библиотеку SPI?
этот код переделанный под с++ ардуино из примера https://yadi.sk/i/qX-Hf2vsr6Egv
а вот с SPI что то разобраться не могу(
Код: Выделить всёРазвернуть
#include "SPI.h"
#define pinLed 4
#define pinOut 9
#define pinSCS 10 //SCS
#define pinSCK 13 //SCLK
#define pinSDI 11 //MOSI
#define pinSDO 12 //MISO


void setup() {
  //SPI.begin();
  //SPI.setBitOrder(LSBFIRST);
  //SPI.setClockDivider(SPI_CLOCK_DIV4);
  //SPI.setDataMode(SPI_MODE2);
  pinMode (pinLed, INPUT);
  pinMode (pinOut, INPUT);
  pinMode (pinSCS, OUTPUT);
  pinMode (pinSCK, OUTPUT);
  pinMode (pinSDI, OUTPUT);
  //pinMode (pinSDO, OUTPUT);
  pinMode (pinSDO, INPUT);
 
  Serial.begin(115200);
  //digitalWrite (pinLed, HIGH);

  digitalWrite(pinSCS, HIGH);
  digitalWrite(pinSCK, HIGH);
  digitalWrite(pinSDI, HIGH);
  set_Subtle_SPI (10 | 0x20); // Ключ чувствительность установлена ​​на 10
  delay (5); // задержка 5MS
  set_Subtle_SPI (10); // установить чувствительность ползунка 10



}

void loop() {
  if (!digitalRead(pinOut)) {
    delay (5); // задержка 5MS
    Serial.println(get_key_data());

  }
  //byte incoming = shiftIn(11, 13, LSBFIRST); //и слушаем что нам ответят
  //Serial.println(incoming);

}
int get_key_data (void)
{
  int KeyData;
  byte i = 0; // счетчик 0 относится к начальному
  KeyData = 0;
  digitalWrite(pinSDI, HIGH); // SDI установлен высоко, чтобы избежать неправильной установки чипа чувствительности к силе нажатия
  digitalWrite(pinSCS, LOW); // открываем включен порт SPI
  do
  {
    KeyData <<= 1; // MSB в качестве первого бита данных
    digitalWrite(pinSCK, LOW); // SCK падающий фронт
    if (digitalRead(pinSDO) == 1) // чтения данных SDO
    { // SDI высока
      KeyData |= 0x01;
    }
    else
    { // SDI низкий
      KeyData &= 0xFE;
    }
    digitalWrite(pinSCK, HIGH); // SCK нарастающий фронт сигнала
    i ++; // счетчик увеличивается на 1
  } while (i < 8); // чтение цикл 8 раз
  digitalWrite(pinSCS, HIGH); // Закрыть SPI порт включен
  return (KeyData); // Возвращает прочитать информацию о ключе
}

void set_Subtle_SPI(char temp) {
  byte i = 0; // счетчик 0 относится к начальному
  digitalWrite(pinSCS, LOW); // открываем включен порт SPI
  do
  {
    if (!(temp & 0x80) == 0) // первая передача данных является MSB
    {
      digitalWrite(pinSDI, HIGH); // Текущее значение бита значения чувствительности устанавливается
    }
    else
    {
      digitalWrite(pinSDI, LOW); // Текущая настройка чувствительности значение позиции равно 0
    }
    digitalWrite(pinSCK, LOW); // SCK падающий фронт
    digitalWrite(pinSCK, HIGH); // SCK нарастающий фронт сигнала
    temp <<= 1; // отправить первый бит данных MSB
    i ++; // счетчик увеличивается на 1
  } while (i < 8); // Посылаем 8 Цикл
  digitalWrite(pinSCS, HIGH); // Закрыть SPI порт включен
  digitalWrite(pinSDI, HIGH); // SDI установить высокие
  Serial.println(temp);
}

Re: Помогите переделать код под SPI библиотеку

loox » 19 апр 2016, 20:40

DimiDr0l
Прошу прощения, не смогли бы Вы перевести , что там написано на китайском, или на родном - в чем проблема, тогда помогу
loox

Re: Помогите переделать код под SPI библиотеку

DimiDr0l » 20 апр 2016, 10:10

Спасибо за внимание, разобрался сам)
вот код который получился
Код: Выделить всёРазвернуть
#define pinLed 4
#define pinOut 9
#define pinSCS 10 //SCS
#define pinSCK 13 //SCLK
#define pinSDI 11 //MOSI (Master Out Slave In) - линия для передачи данных от ведущего устройства (Master) к ведомым (Slave)
#define pinSDO 12 //MISO (Master In Slave Out) - линия для передачи данных от ведомого устройства (Slave) к ведущему (Master)


void setup() {
  pinMode (pinLed, INPUT);
  pinMode (pinOut, INPUT);
  pinMode (pinSCS, OUTPUT);
  pinMode (pinSCK, OUTPUT);
  pinMode (pinSDI, OUTPUT);
  pinMode (pinSDO, INPUT);
  set_Subtle_SPI(20); //установка чувствительности

  Serial.begin(115200);
  //digitalWrite (pinLed, HIGH);
  digitalWrite(pinSDI, HIGH);
}

void loop() {
  if (!digitalRead(pinOut)) {
    digitalWrite(pinSCS, LOW);
    byte incoming = shiftIn(pinSDO, pinSCK, MSBFIRST); //и слушаем что нам ответят
    digitalWrite(pinSCS, HIGH);
    Serial.println(incoming);
    delay (5); // задержка 5MS
  }
}


void set_Subtle_SPI(byte value) {
  digitalWrite(pinSCS, LOW);
  shiftOut(pinSDI, pinSCK, MSBFIRST, value); //послали адрес
  digitalWrite(pinSCS, HIGH);
}


Re: Помогите переделать код под SPI библиотеку

AvexPo » 22 авг 2016, 08:12

Мне бы кто помог, тоже подобная проблема, мне сейчас кент помогает в этом деле, как врублюсь напишу обязательно...


Rambler\'s Top100 Mail.ru counter