66 lines
1.7 KiB
C++
66 lines
1.7 KiB
C++
#include "Adafruit_Crickit.h"
|
|
|
|
// the pwm pins
|
|
#define CRICKIT_NUM_PWM 12
|
|
static const uint8_t CRICKIT_pwms[CRICKIT_NUM_PWM] = {
|
|
CRICKIT_SERVO4, CRICKIT_SERVO3, CRICKIT_SERVO2, CRICKIT_SERVO1,
|
|
CRICKIT_MOTOR_B1, CRICKIT_MOTOR_B2, CRICKIT_MOTOR_A1, CRICKIT_MOTOR_A2,
|
|
CRICKIT_DRIVE4, CRICKIT_DRIVE3, CRICKIT_DRIVE2, CRICKIT_DRIVE1};
|
|
|
|
// the adc pin
|
|
#define CRICKIT_NUM_ADC 8
|
|
static const uint8_t CRICKIT_adc[CRICKIT_NUM_ADC] = {
|
|
CRICKIT_SIGNAL1, CRICKIT_SIGNAL2, CRICKIT_SIGNAL3, CRICKIT_SIGNAL4,
|
|
CRICKIT_SIGNAL5, CRICKIT_SIGNAL6, CRICKIT_SIGNAL7, CRICKIT_SIGNAL8};
|
|
|
|
void Adafruit_Crickit::analogWrite(uint8_t pin, uint16_t value, uint8_t width) {
|
|
(void)width;
|
|
|
|
int8_t p = -1;
|
|
for (int i = 0; i < CRICKIT_NUM_PWM; i++) {
|
|
if (CRICKIT_pwms[i] == pin) {
|
|
p = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (p > -1) {
|
|
uint8_t cmd[] = {(uint8_t)p, (uint8_t)(value >> 8), (uint8_t)value};
|
|
this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_PWM, cmd, 3);
|
|
}
|
|
}
|
|
|
|
uint16_t Adafruit_Crickit::analogRead(uint8_t pin) {
|
|
uint8_t buf[2];
|
|
int8_t p = -1;
|
|
for (int i = 0; i < CRICKIT_NUM_ADC; i++) {
|
|
if (CRICKIT_adc[i] == pin) {
|
|
p = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (p > -1) {
|
|
this->read(SEESAW_ADC_BASE, SEESAW_ADC_CHANNEL_OFFSET + p, buf, 2, 500);
|
|
uint16_t ret = ((uint16_t)buf[0] << 8) | buf[1];
|
|
delay(1);
|
|
return ret;
|
|
} else
|
|
return 0;
|
|
}
|
|
|
|
void Adafruit_Crickit::setPWMFreq(uint8_t pin, uint16_t freq) {
|
|
int8_t p = -1;
|
|
for (int i = 0; i < CRICKIT_NUM_PWM; i++) {
|
|
if (CRICKIT_pwms[i] == pin) {
|
|
p = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (p > -1) {
|
|
uint8_t cmd[] = {(uint8_t)p, (uint8_t)(freq >> 8), (uint8_t)freq};
|
|
this->write(SEESAW_TIMER_BASE, SEESAW_TIMER_FREQ, cmd, 3);
|
|
}
|
|
}
|