Доброго всем дня! Подскажите, пожалуйста, где глянуть, или что сделать, с перепрограммированием датчиков линии. Краткое описание проблемы: собрали робота из набора Амперка для езды по черной линии. А он, по какой-то причине, едет по черной поверхности, белый цвет его наоборот останавливает, т.е. едет по белой линии. Скетч проверял на диске, на сайте, в фирменной Книге идущей в комплекте с набором. Все совпадает Результат тот же. Попытки перепрограммирования ничего не дали.
Спасибо за подсказку. Но поменять 0 на 1 - это первое, что я сделал. Хотите скетчь- пожалуйста: int leftLinePin = 10; int rightLinePin = 11; int leftDirPin = 4; int leftSpeedPin = 5; int rightDirPin = 7; int rightSpeedPin = 6; int runSpeed = 50; void setupMotorShield() { pinMode(leftDirPin, OUTPUT); pinMode(leftSpeedPin, OUTPUT); pinMode(rightDirPin, OUTPUT); pinMode(rightSpeedPin, OUTPUT); } void go() { analogWrite(leftSpeedPin, runSpeed); analogWrite(rightSpeedPin, runSpeed); } void stop() { analogWrite(leftSpeedPin, 0); analogWrite(rightSpeedPin, 0); } void goForward() { digitalWrite(leftDirPin, HIGH); digitalWrite(rightDirPin, HIGH); go(); } void turnLeft() { digitalWrite(leftDirPin, LOW); digitalWrite(rightDirPin, HIGH); go(); } void turnRight() { digitalWrite(leftDirPin, HIGH); digitalWrite(rightDirPin, LOW); go(); } void setup() { setupMotorShield(); } void loop() { // Считываем данные СЃ сенсоров boolean whiteLeft = digitalRead(leftLinePin); boolean whiteRight = digitalRead(rightLinePin); if (whiteLeft && whiteRight) { // РџРѕРґ РѕР±РѕРёРјРё датчиками белый цвет. Р’РёРґРёРјРѕ // линия РїСЂСЏРјРѕ РїРѕРґ нами. Полный вперёд! goForward(); } else if (!whiteLeft && !whiteRight) { // Что-то РЅРµ то: РїРѕРґ РѕР±РѕРёРјРё датчиками чёрный // цвет. Р’РёРґРёРјРѕ РјС‹ выехали Р·Р° пределы трассы. // Лучше остановиться stop(); } else if (whiteRight) { // РџРѕРґ левым датчиком — чёрный, РїРѕРґ правым — // белый. Чтобы выровняться, нужно начать // РїРѕРІРѕСЂРѕС‚ налево turnLeft(); } else { // Последний оставшийся вариант. РџРѕРґ левым // датчиком — белый, РїРѕРґ правым — чёрный. // Чтобы выровняться, нужно начать РїРѕРІРѕСЂРѕС‚ // направо turnRight(); } }
Код (C++): int leftLinePin = 10; int rightLinePin = 11; int leftDirPin = 4; int leftSpeedPin = 5; int rightDirPin = 7; int rightSpeedPin = 6; int runSpeed = 50; void setupMotorShield() { pinMode(leftDirPin, OUTPUT); pinMode(leftSpeedPin, OUTPUT); pinMode(rightDirPin, OUTPUT); pinMode(rightSpeedPin, OUTPUT); } void go() { analogWrite(leftSpeedPin, runSpeed); analogWrite(rightSpeedPin, runSpeed); } void stop() { analogWrite(leftSpeedPin, 0); analogWrite(rightSpeedPin, 0); } void goForward() { digitalWrite(leftDirPin, HIGH); digitalWrite(rightDirPin, HIGH); go(); } void turnLeft() { digitalWrite(leftDirPin, LOW); digitalWrite(rightDirPin, HIGH); go(); } void turnRight() { digitalWrite(leftDirPin, HIGH); digitalWrite(rightDirPin, LOW); go(); } void setup() { setupMotorShield(); } void loop() { // Считываем данные СЃ сенсоров boolean whiteLeft = digitalRead(leftLinePin); boolean whiteRight = digitalRead(rightLinePin); if (whiteLeft && whiteRight) { // РџРѕРґ РѕР±РѕРёРјРё датчиками белый цвет. Р’РёРґРёРјРѕ // линия РїСЂСЏРјРѕ РїРѕРґ нами. Полный вперёд! goForward(); } else if (!whiteLeft && !whiteRight) { // Что-то РЅРµ то: РїРѕРґ РѕР±РѕРёРјРё датчиками чёрный // цвет. Р’РёРґРёРјРѕ РјС‹ выехали Р·Р° пределы трассы. // Лучше остановиться stop(); } else if (whiteRight) { // РџРѕРґ левым датчиком — чёрный, РїРѕРґ правым — // белый. Чтобы выровняться, нужно начать // РїРѕРІРѕСЂРѕС‚ налево turnLeft(); } else { // Последний оставшийся вариант. РџРѕРґ левым // датчиком — белый, РїРѕРґ правым — чёрный. // Чтобы выровняться, нужно начать РїРѕРІРѕСЂРѕС‚ // направо turnRight(); } }
Для начала попробуйте так: Код (C++): boolean whiteLeft = !digitalRead(leftLinePin); boolean whiteRight = !digitalRead(rightLinePin);