Skip to content

KostyaZlb/Chappi360

Repository files navigation

Chappi360

API для работы с платформой обучения Chappi360

Инструкция по установке

Для ArduinoIDE: Запускаем ArduinoIDE заходим в меню “Файл”->“Создать новый проект”, сохраняем. Теперь скачиваем данный репозиторий и распаковываем, копируем данные папки в директорию проекта. Переходим к файлу проекта и подключаем файл ChappiAPI.h

#include "ChappiAPI.h"

после этого нам доступен функционал API.

Структура:

config.h – содержит базовые макросы, а также содержит кофиг портов
ChappiAPI.h – основная библиотека
EncoderLab.h – библитека для работы с энкодерами EncoderLab
Ultrasonic.h – библиотека для работы с ультразвуковыми дальномерами типа "HC-SR04"

Описание класса ChappiAPI

public

float getDist(int) 

–возвращает значение с датчика расстояния, если поставить 1 возвращает расстояние в сантиметрах, 0 в дюймах.

unsigned char getS1LineState()

–возвращаемое значение в диапазоне от 0 до 100, зависит от цвета поверхности ( а так же зависит от типа датчика)

void setMotionMotor(byte in)

–отсылает команду на моторы, команда формируется из восьми бит значение каждого можно увидеть в таблице в низу:

Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
Разрешает движение моторами M2 и M3 Движение мотором M1 по ча-совой стрелке Движение мотором M1 про-тив часо-вой стрелки Разрешает движение моторам M1 Движение мотором M2 по ча-совой стрелке Движение мотором M2 про-тив часо-вой стрелки Движение мотором M3 по ча-совой стрелке Движение мотором M3 про-тив часо-вой стрелки
void setSpeedMotor1(char in)

– задает скорость вращения мотора 1

void setSpeedMotor2(char in)

– задает скорость вращения мотора 2

void setSpeedMotor3(char in)

– задает скорость вращения мотора 3

Функции доступные в тестовом режиме (возможна не стабильная работа)

char getRotMot1()

-возвращает 'L' если мотор 1 вращается в левую сторону и 'R' в правую

char getRotMot2()

-возвращает 'L' если мотор 2 вращается в левую сторону и 'R' в правую

char getRotMot3()

-возвращает 'L' если мотор 3 вращается в левую сторону и 'R' в правую

int getRevMinMot1()

-возвращает количество оборотов двигателя 1 в минуту

int getRevMinMot2()

-возвращает количество оборотов двигателя 2 в минуту

int getRevMinMot3()

-возвращает количество оборотов двигателя 3 в минуту

Пример использования библиотеки

// Подключаем библиотеку API
#include "ChappiAPI.h"

// Создаем указатель на класс ChappiAPI
ChappiAPI* chappi = new ChappiAPI;

void setup()
{

  // Инициализируем порты которые задействованы на плате робота
  // Макро определения пинов в файле config.h

  // Инициализация портов которые использует сдвиговый регистр
  pinMode(R_DATA, OUTPUT);
  pinMode(R_LACH, OUTPUT);
  pinMode(R_CLOCK, OUTPUT);

  // Инициализация портов ШИМ как выходы
  pinMode(pwmMot1, OUTPUT);
  pinMode(pwmMot2, OUTPUT);
  pinMode(pwmMot3, OUTPUT);

  // Инициализация цифровых пинов как входы (используются для подключения энкодеров)
  // Мотора №1
  pinMode(ENC_PIN1_M1, INPUT);
  pinMode(ENC_PIN2_M1, INPUT);

  // Мотора №2
  pinMode(ENC_PIN1_M2, INPUT);
  pinMode(ENC_PIN2_M2, INPUT);

  // Мотора №3
  pinMode(ENC_PIN1_M3, INPUT);
  pinMode(ENC_PIN2_M3, INPUT);

  // Инициализация аналоговых портов, как входы (используются для датчиков линии)
  pinMode(ANALOG1, INPUT);
  pinMode(ANALOG2, INPUT);

  // Инициализация последовательного порта (устанавливаем скорость 9600 bit/s)
  Serial.begin(9600);
}

void loop()
{
  // Устанавливаем скорость мотора №1 в отметку 200
  chappi->setSpeedMotor1(200);
  // Отсылаем команду на сдвиговый регистр вращать мотором №1 в левую сторону
  //  макро определение MOTOR1_L  можно посмотреть в файле config.h
  chappi->setMotionMotor(MOTOR1_L);

  // Отсылаем значение с датчика линии №1 в последовательный порт
  Serial.println(chappi->getS1LineState());
}

Пример использования setMotionMotor:

Для управления несколькими моторами можно пользоваться логическим “ИЛИ”. Например нам надо регулировать направление мотора № 1 и №2, то можно воспользоваться следующим способом:
setMotionMotor(MOTOR1_L | MOTOR2_R)

В данном примере мы задаем движение мотором №1 в левую сторону и мотору №2 в правую сторону.