Rad efterföljare Robot använder kameran Shield i 1Sheeld & Arduino (3 / 5 steg)
Steg 3: Programvara: Arduino kod
Denna del är bäst och beskriva kärnan i projektet. I grund och botten vi använder kameran i mobiltelefonen att få de mest dominerande färgerna, fungerar "setCalculationMode", och "setPalette" funktionen, det göra skärmen som ett rutnät (till exempel 3 x 3) med en färg i varje cell motsvarar den mest dominerande färgen i cellen.
Vi är så bekymrade endast med de första och tredje celler som är cellen till vänster övre och övre högra cellen som anger gränserna för kameran Visa. Så om någon av tredje eller första cellerna får en färg i stället för vit så innebär det att har roboten att glida i den riktningen att upprätthålla roboten för att vara i mitten av den vita färgen som är förresten har en hex värde (0xFFFFFF).
#define CUSTOM_SETTINGS
#define INCLUDE_TERMINAL_SHIELD
#define INCLUDE_COLOR_DETECTOR_SHIELD
#include < OneSheeld.h >
osignerade långa vita = 0xFFFFFF;
int motor1PWM = 3;
int motor1DIR = 4;
int motor2PWM = 6;
int motor2DIR = 7.
void setup() {
OneSheeld.begin();
ColorDetector.setOnSelected(&selected);
pinMode (motor1PWM, produktionen);
pinMode (motor1DIR, produktionen);
pinMode (motor2PWM, produktionen);
pinMode (motor2DIR, produktionen);
digitalWrite (motor1DIR, låg);
digitalWrite (motor2DIR, hög);
}
void loop() {
}
void selected()
{
ColorDetector.setPalette(_3_BIT_RGB_PALETTE);
ColorDetector.enableFullOperation();
ColorDetector.setCalculationMode(MOST_DOMINANT_COLOR);
ColorDetector.setOnNewColor(&newColor);
}
void newColor(Color one,Color two,Color three,Color four,Color five,Color six,Color seven,Color eight,Color nine)
{
om (tre == white & & en == vit)
{moveForward();}
annars om (tre == white & & en! = vit)
{moveLeft();}
annars om (en == white & & tre! = vit)
{moveRight();}
}
void moveForward()
{
analogWrite (motor1PWM, 25);
analogWrite (motor2PWM, 25);
}
void moveRight()
{
analogWrite (motor1PWM, 20);
analogWrite (motor2PWM, 12);
}
void moveLeft()
{
analogWrite (motor1PWM, 12);
analogWrite (motor2PWM, 20);
}