ABLF (8 / 9 steg)

Steg 8: Basic-Program

Detta program ändrades från SparkFun mest grundläggande linje efterföljare. Det fungerar, men inte göra skarp vänder väl. Jag jobbar fortfarande på rätt PID linje avkänning.

/ * ABLB
* ActoBitty linje Bot
*
* bas robot Actobotics ActoBitty:
* https://www.servocity.com/html/actobitty_2_wheel_robot_kit.html#.VthCuvkrI-U
*
* microcontroller ombord DFRobot Romeo 2 (har inbyggd motor controller):
* http://www.dfrobot.com/wiki/index.php/Romeo_V2-All_in_one_Controller _(R3)_(SKU:DFR0225)
*
* montera panel för styrelsen:
* http://www.thingiverse.com/thing:1377159
*
* linje efterföljare matris från Sparkfun:
* https://github.com/sparkfun/Line_Follower_Array
*
*/

#include "Wire.h" / / för I2C
#include "sensorbar.h" / / behov SparkFun bibliotek

Kommentera bort en av de fyra linjerna att matcha din SX1509 adress
stift väljer. SX1509 breakout som standard [0:0] (0x3E).
CONST uint8_t SX1509_ADDRESS = 0x3E; SX1509 I2C adress (00)
CONST byte SX1509_ADDRESS = 0x3F; SX1509 I2C adress (01)
CONST byte SX1509_ADDRESS = 0x70; SX1509 I2C adress (10)
CONST byte SX1509_ADDRESS = 0x71; SX1509 I2C adress (11)

SensorBar mySensorBar(SX1509_ADDRESS);

baserad på SparkFun MostBasicFollower kod
Definiera de stater att beslutsfattandet maskiner använder:
#define IDLE_STATE 0
#define READ_LINE 1
#define GO_FORWARD 2
#define GO_LEFT 3
#define GO_RIGHT 4

uint8_t state = 0;

Romeo standard pins
int Lmotor = 5; M1 Varvtalsreglering
int Rmotor = 6; M2 Varvtalsreglering
int Ldir = 4; M1 Riktning kontroll
int Rdir = 7. M1 Riktning kontroll

void setup() {
Standard: IR bara aktiveras under läsningar.
mySensorBar.setBarStrobe();
Andra alternativet: kommandot att köra hela tiden
mySensorBar.clearBarStrobe();

Standard: mörkt på ljus
mySensorBar.clearInvertBits();
Andra alternativet: ljus linje på mörka
mySensorBar.setInvertBits();

Glöm inte att ringa .begin() för att få baren redo. Detta konfigurerar HW.
uint8_t returnStatus = mySensorBar.begin();
/*
IF(returnStatus)
{
Serial.println ("sx1509 IC kommunikation OK");
}
annat
{
Serial.println ("sx1509 IC kommunikation misslyckades!");
}
Serial.println();
*/

} / / end setup()

void loop() {
uint8_t nextState = staten.
Växla (staten) {
fall IDLE_STATE:
halt(); Stannar båda motorer
nextState = READ_LINE;
bryta;
fall READ_LINE:
om (mySensorBar.getDensity() == 0)
{
nextState = IDLE_STATE;
bryta;
}
annars om (mySensorBar.getDensity() < 7)
{
nextState = GO_FORWARD;
om (mySensorBar.getPosition() < -50)
{
nextState = GO_LEFT;
}
om (mySensorBar.getPosition() > 50)
{
nextState = GO_RIGHT;
}
}
annat
{
nextState = IDLE_STATE;
}
bryta;
fall GO_FORWARD:
FWD(128,128);
nextState = READ_LINE;
bryta;
fall GO_LEFT:
FWD(16,160); L en lite långsammare R lite snabbare
nextState = READ_LINE;
bryta;
fall GO_RIGHT:
FWD (160, 16);
nextState = READ_LINE;
bryta;
standard:
halt(); Stannar båda motorer
bryta;
}
State = nextState;
Delay(100);

} / / end loop()

void halt(void) / / stopp
{
digitalWrite(Lmotor,LOW);
digitalWrite(Rmotor,LOW);
}
void fwd (byte a, byte b) / / flytta fram
{
analogWrite (Lmotor, en); PWM varvtalsreglering
digitalWrite(Ldir,LOW); LÅG för fwd
analogWrite (Rmotor, b);
digitalWrite(Rdir,LOW);
}

Se Steg
Relaterade Ämnen