MCU-1: En budget-medvetna Intel Edison MCU baserat Rover leksaksbil. (Intel IoT) (9 / 13 steg)
Steg 9: Kod--MCU ansökan.
{{{
< p > #include "mcu_api.h" < br > #include "mcu_errno.h" < /p >< p > #define ingång 0
#define utgång 1 < /p >< p > int echoPin = 128; 2
int trigPin = 13. 5
int blinkPin = 40; 13
int leftMotor = 0; pwm3
int rightMotor = 2; pwm6
osignerade långa startT endT, elapTime, stopTime, tmpTime1;
osignerade långa counter = 1; < /p >< p > void pulseIn2 (unsigned int tillstånd, int timeout) {
int count = timeout;
medan (gpio_read(echoPin)! = staten & & räkna > 0)
Count--;
} < /p >< p > void svängvänster (int leftMotor, int rightMotor, int varaktighet) {
pwm_configure (leftMotor, 2000000, 20000000);
pwm_configure (rightMotor, 2000000, 20000000);
pwm_enable(leftMotor);
pwm_enable(rightMotor);
mcu_sleep(duration);
} < /p >< p > void svänghöger (int leftMotor, int rightMotor, int varaktighet) {< /p >< p > pwm_configure (leftMotor, 700000, 20000000);
pwm_configure (rightMotor, 700000, 20000000);
pwm_enable(leftMotor);
pwm_enable(rightMotor);
mcu_sleep(duration);
} < /p >< p > void go (int leftMotor, int rightMotor) {< /p >< p > gpio_write (blinkPin, 0); < /p >< p > pwm_configure (leftMotor, 700000, 20000000);
pwm_configure (rightMotor, 2000000, 20000000);
pwm_enable(leftMotor);
pwm_enable(rightMotor); < /p >< p >} < /p >< p > tomrum bakåt (int leftMotor, int rightMotor, int varaktighet) {
gpio_write (blinkPin, 1); < /p >< p > pwm_configure (leftMotor, 2000000, 20000000);
pwm_configure (rightMotor, 700000, 20000000);
pwm_enable(leftMotor);
pwm_enable(rightMotor);
mcu_sleep(duration);
} < /p >< p > void stopMotor (int leftMotor, int rightMotor) {
host_send ((unsigned char*) "Stopped\n", 8); < /p >< p > pwm_disable(leftMotor);
pwm_disable(rightMotor);
} < /p >< p > void incrStopTime (int reset) {
om (tmpTime1 > 0) {
stopTime += (time_ms() - tmpTime1);
om (reset) tmpTime1 = 0;
annat tmpTime1=time_ms();
};
} < /p >< p > void mcu_main() {
unsigned int runMotor = 1;
unsigned char btInput = 0;
char buf [64];
int len;
osignerade långa distTraveled;
/ * din konfigurationskod börjar här * /
startT = time_ms();
elapTime = time_ms();
stopTime = 0; < /p >< p > gpio_setup (echoPin, ingång); i
gpio_setup (trigPin, produktionen); ute
gpio_setup (blinkPin, produktionen); ut < /p >< p > samtidigt (1) {
mcu_sleep(50);
btInput = 0;
len = host_receive ((unsigned char *) buf, 64);
om (len > 0) {
btInput = (char) buf [0];
växel (btInput) {
fallet ":
gpio_write (blinkPin, 1);
stopMotor (leftMotor, rightMotor);
tmpTime1 = time_ms();
runMotor = 0;
Break; < /p >< p > fallet "A":
gpio_write (blinkPin, 1);
gå (leftMotor, rightMotor);
runMotor = 1;
incrStopTime(1);
Break; < /p >< p > fallet "L":
gpio_write (blinkPin, 1);
svängvänster (leftMotor, rightMotor, 95);
gå (leftMotor, rightMotor);
runMotor = 1;
incrStopTime(1); < /p >< p > semester.
fallet "R":
gpio_write (blinkPin, 1);
Reverse(1000);
stopMotor();
svänghöger (leftMotor, rightMotor, 95);
gå (leftMotor, rightMotor);
runMotor = 1;
incrStopTime(1); < /p >< p > semester.
fallet "B":
gpio_write (blinkPin, 1);
svängvänster (leftMotor, rightMotor, 95);
svängvänster (leftMotor, rightMotor, 95);
gå (leftMotor, rightMotor);
runMotor = 1;
incrStopTime(1);
bryta;
standard:
bryta;
}
}
om (runMotor) {
gpio_write (trigPin, 0);
gpio_write (trigPin, 1); < /p >< p > gpio_write (trigPin, 0); < /p >< p > pulseIn2 (1, 10000);
långa startTime = time_us(); < /p >< p > pulseIn2 (0, 10000);
långa endTime = time_us();
int längd = endTime - startTime; < /p >< p > int avstånd = varaktighet / 2 / 29; 29,1? < /p >< p > om ((avstånd! = 0) & & (distanserar < 15)) {
bakåt (leftMotor, rightMotor, 95);
stopMotor (leftMotor, rightMotor);
svängvänster (leftMotor, rightMotor, 95);
gå (leftMotor, rightMotor);
} annat {
gå (leftMotor, rightMotor);
}
}
endT = time_ms();
om ((endT-startT) > 10000) {
incrStopTime(0);
startT = time_ms();
distTraveled = (endT - elapTime - stopTime) * 12 / 60000; ungefärliga feed driven baserad till statiska RPM av servon.
};
len = mcu_snprintf (buf, 16, "%d\n", distTraveled);
host_send ((unsigned char *) buf, len);
}
} < /p >
}}}