2014-12-30 2 views
-1

Внутри этой функции я хочу, чтобы пользователь мог выбрать, сколько раз он/она хочет повторить тест. Я переводил ASCII dec (от serial.read) с char (incomingByte), но как только я вхожу в цикл for, число возвращается обратно к его значению dec ... Можете ли вы объяснить, почему?Проблемы с переводом ASCII dec на символ

Serial.println("Choose number of times (max 10) to repeat test : "); 
    while(Serial.available() == 0) { 
    delay(10); 
    } 
    int incomingByte = Serial.read(); 
    // Number of times to repeat test chosen by user. 
    nRepeat = char(incomingByte); 
    Serial.print("You chose : "); 
    Serial.println(char(nRepeat)); 
    for(int i=0; i<nRepeat; i++) { 
    randomSeed(A1); 
    // Assigning a random seed for the random function. 
    timer = random(2000, 5000); 
    // Sets the random timer to vary between 2000 and 5000 ms 
    delay(timer); 
    // The delay is now random between 2000 and 5000 ms 
    digitalWrite(LED, HIGH); 
    // Turn on the LED (pin 13) 
    startTid = millis(); 
    // Saves the current time the Arduino has been powered. 
    while(digitalRead(Buttom) == HIGH) { 
     // Loop until buttom is pressed 
    } 
    stopTid = millis(); 
    // Saves current time since arduino got powered 
    digitalWrite(LED, LOW); 
    // Turns LED off 
    Serial.print("Your time was: ");  
    Serial.print(stopTid-startTid); 
    // Prints the time between the exercise started and finished 
    Serial.println(" milli seconds"); 
    person[cc].reacTime[i] = stopTid-startTid; 
    Serial.print(i); 
    Serial.print(" out of "); 
    Serial.println(nRepeat); 
    delay(1000);           
    } 
+2

, что вы думаете, 'голец (nRepeat)' делает, это не функция ASCII перевод, это стиль функции C++. –

+0

Я предположил, что, поскольку я объявлял nRepeat = char (53), который дал мне nRepeat = 5, я мог бы использовать этот метод для дальнейшего использования in для циклов как целого числа ex. 5. Знать решение этого? – Ivan

+0

Фактически это зависит от того, как вы его распечатываете, если '.print()' метод поддерживает спецификатор '% c', то может быть' Serial.print («% c», nRepeat), 'будет делать это, t знать класс 'Serial', который вы используете. –

ответ

0

Как указал @iharob, char() в C не является функцией для перевода. Самый простой способ в C для преобразования ASCII, который вы ищете, - вычесть «0» из введенного значения. Это зависит от того, что цифры находятся в порядке в таблице ASCII. Тем не менее, вы захотите убедиться, что вход пользователя на самом деле является цифрой. Ваш код также позволит повторять только с 0-9.

nRepeat = incomingByte - '0'; 
if (nRepeat >= 0 && nRepeat <= 9) { 
    // Valid digit entered, proceed 
    //... 
} 
+0

Проблема решена, я написал более длинный код с корпусом switch, определяющим nRepeat, равным 1, когда пользователь вводил 1 и т. Д., Чтобы решить проблему, если пользователь набрал что-то вне 0-10. Спасибо за ввод – Ivan

0

Когда вы Serial.read() вы получаете значение ASCII числа, написанного пользователем, т.е. 0 (zero) = 49. Если вы хотите, чтобы цифры int были записаны, вы можете использовать Serial.parseInt(). Вы можете сделать if заявление убедитесь, что номер находится в пределах от 0 до 10.

Больше документации о Serial.parseInt(): http://arduino.cc/en/Reference/ParseInt

Смежные вопросы