Помогите написать код для датчика линии!

Тема в разделе "Arduino & Shields", создана пользователем spoonmanka, 26 фев 2014.

  1. spoonmanka

    spoonmanka Нуб

    Хочу что бы каждый раз когда робот наезжает датчиком линии на черную полосу прибавлялась переменная i, но не каждый такт процессора, а только раз за каждую линию! и когда i будет равна 5 робот должен остановиться вот пытался сделать скетч:
    #define LEFT_MOTOR_SPEED 5
    #define RIGHT_MOTOR_SPEED 6
    #define LEFT_MOTOR_DIR 4
    #define RIGHT_MOTOR_DIR 7
    #define SENSOR 2
    #define BLACK 1
    #define WHITE 0
    void stop()
    {
    analogWrite(LEFT_MOTOR_SPEED, 0);
    analogWrite(RIGHT_MOTOR_SPEED, 0);
    digitalWrite(LEFT_MOTOR_SPEED, LOW);
    digitalWrite(RIGHT_MOTOR_SPEED, LOW);
    }
    void go()
    {
    digitalWrite(LEFT_MOTOR_DIR, HIGH);
    analogWrite(LEFT_MOTOR_SPEED, 255);
    digitalWrite(RIGHT_MOTOR_DIR, HIGH);
    analogWrite(RIGHT_MOTOR_SPEED, 255);
    }
    int color;
    int i=0;
    int newColor;
    boolean a= !digitalRead(SENSOR);
    void setup()
    {
    pinMode(LEFT_MOTOR_SPEED, OUTPUT);
    pinMode(RIGHT_MOTOR_SPEED, OUTPUT);
    pinMode(LEFT_MOTOR_DIR, OUTPUT);
    pinMode(RIGHT_MOTOR_DIR, OUTPUT);
    pinMode(SENSOR, INPUT);
    }
    void loop()
    {
    if(i=0)
    {
    if(a)
    {
    color=BLACK;
    i++;
    }
    }
    else if(i>0)
    {
    if(!a)
    {
    newColor=WHITE;
    }
    if(a)
    {
    newColor=BLACK;
    }
    if(newColor != color)
    {
    color=newColor;
    i++;
    }
    }
    do{
    go();
    }
    while(i<5);
    stop();
    delay(1000);
    }
    Не буду спаршивать в чем ошибка, так как тут все в корне не логично, просто дайте скетч, можно без коментариев, сам разбирусь!
     
  2. rav_75

    rav_75 Гик

    какой народ хитрый пошел... Нате нужный вам кусок
    Код (Text):
    int i=0;
    boolean color = false;
    void loop(){
      go();
      boolean newColor=!digitalRead(SENSOR);
      if(newColor && !color){
        i++;
      }
      if(i==5){
        stop();
        delay(1000);
        i=0;
      }
      color=newColor;
    }
    я бы добавил проверку, едет ли машинка, чтоб лишний раз не дергать пины.
    Еще вот это меня смущает
    Код (Text):
    void stop()
    {
    analogWrite(LEFT_MOTOR_SPEED, 0);
    analogWrite(RIGHT_MOTOR_SPEED, 0);
    digitalWrite(LEFT_MOTOR_SPEED, LOW);
    digitalWrite(RIGHT_MOTOR_SPEED, LOW);
    }
    зачем и почему?