2015-06-18 1 views
-1

У меня возникают проблемы с программированием линейного следящего робота (с двигателями и с использованием Arduino Uno) и с помощью оператора switch для объявления различных движений для двигателей.
До сих пор у меня есть:Необъявленная область действия (заявление о переключении в Arduino)

void loop() { 
int sensorValueright = analogRead(A0); 
int sensorValuecentre = analogRead(A1); 
int sensorValueleft = analogRead(A2); 

switch (direction1) { 
    case "right": 
    digitalWrite(12, HIGH); //Establishes forward direction of Channel A 
    digitalWrite(9, LOW); //Disengage the Brake for Channel A 
    analogWrite(3, 60); //Motor A at quarter speed 

    digitalWrite(13, HIGH); //Establishes forward direction of Channel B 
    digitalWrite(8, LOW); //Disengage the Brake for Channel B 
    analogWrite(11, 125); //Motor B at half speed 
    delay(1000); 
    break; 

    case "centre": 
    digitalWrite(12, HIGH); //Forward A 
    digitalWrite(9, LOW); //Disengage the Brake for Channel A 
    analogWrite(3, 100); //Motor A = Motor B speed 

    digitalWrite(13, HIGH); //Forward B 
    digitalWrite(8, LOW); //Disengage the Brake for Channel B 
    analogWrite(11, 100); //Motor A = Motor B speed 
    delay(500); 
    break; 

    case "left": 
    digitalWrite(12, HIGH); //Establishes forward direction of Channel A 
    digitalWrite(9, LOW); //Disengage the Brake for Channel A 
    analogWrite(3, 125); //Motor A at Half Speed 

    digitalWrite(13, HIGH); //Establishes forward direction of Channel B 
    digitalWrite(8, LOW); //Disengage the Brake for Channel B 
    analogWrite(11, 60); //Motor B at Quarter Speed 
    delay(1000); 
    break; 

    } 

    if (sensorValuecentre < 1){ 
    direction1 == "centre" 
    } 

    else if (sensorValueright < 1){ 
    direction1 == "right" 
    } 

    else if (sensorValueleft < 1){ 
    direction1 == "left" 
    } 

    else{ 
    digitalWrite(12, HIGH); //Establishes forward direction of Channel A 
    digitalWrite(9, LOW); //Disengage the Brake for Channel A 
    analogWrite(3, 50); //Motor A at low speed 

    digitalWrite(13, HIGH); //Establishes forward direction of Channel B 
    digitalWrite(8, LOW); //Disengage the Brake for Channel B 
    analogWrite(11, 50); //Motor B at low speed 
    delay(500); 
    } 

    delay(1); 
} 

Но я получаю следующее сообщение об ошибке при компиляции:

line_tracker_test_switch.ino: In function 'void loop()': 
line_tracker_test_switch.ino:20:9: error: 'direction1' was not declared in this scope 
line_tracker_test_switch.ino:60:3: error: expected ';' before '}' token 
line_tracker_test_switch.ino:64:3: error: expected ';' before '}' token 
line_tracker_test_switch.ino:68:3: error: expected ';' before '}' token 
Error compiling. 

Любая помощь будет принята с благодарностью!

+1

Я не вижу декларации направления1. Вы? – bmargulies

+2

Прочтите ошибку - 'direction1' не объявлен, и вы не показали, как/где он объявлен! – John3136

+3

Кроме того, 'direction1 ==" right "' не делает то, что вы думаете. –

ответ

2

«direction1» не был объявлен нигде в вставленном вами коде. Где-то должна быть строка вида type direction1; например char *direction1; или int direction1; сообщить компилятору, в каком направлении1.

Другие 3 ошибки указывают, что в этих строках отсутствуют точки с запятой в конце. direction1 == "left"; Это тоже маловероятно, что вы хотите. == - оператор равенства. = - оператор присваивания. Это также странный способ использования этих операторов, потому что строки работают по-другому от примитивных типов, таких как int и float. Вы не можете сравнивать или назначать их напрямую. Вместо этого вы получите доступ к значению указателя.

Использование строк с заявлениями выключателя не допускается в стандартных C.

Создание целочисленных констант вместо enum {LEFT, RIGHT, CENTRE}; и заменить «влево» с левым и так далее.