Хочу что бы каждый раз когда робот наезжает датчиком линии на черную полосу прибавлялась переменная 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); } Не буду спаршивать в чем ошибка, так как тут все в корне не логично, просто дайте скетч, можно без коментариев, сам разбирусь!
какой народ хитрый пошел... Нате нужный вам кусок Код (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); } зачем и почему?