Отправка в COM порт числа и сохранение его в переменной

sashadeg
Offline
Зарегистрирован: 02.03.2016

Здравствуйтеюю. Пожалуйста, помогите найти решение.

Представим такую ситуацию:

Ардуинка висит на COM3. Приложение на компьютере отправляет на COM3 целые числа от 0 до 100. При чтении буфера функция Serial.read() возвращает отправленное число по одной цифре: 

1
0
0
Как можно порлучить на ардуинке готовую переменную с значением отправленного числа?
ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Прочитать по одной цифре, складывая в строку, а потом преобразовать в целов функцией atoi

sashadeg
Offline
Зарегистрирован: 02.03.2016

ЕвгенийП пишет:

Прочитать по одной цифре, складывая в строку, а потом преобразовать в целов функцией atoi

До нельзя понятно и так, но хоть небольшой примерчик можно? 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, приведите свой текст, как Вы по одной цифре читаете. Там будет видно как туда atoi вставлять.

Valera19701
Valera19701 аватар
Offline
Зарегистрирован: 18.10.2015

можно  через "concat" складывать в строку :)

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

sashadeg пишет:

ЕвгенийП пишет:

Прочитать по одной цифре, складывая в строку, а потом преобразовать в целов функцией atoi

До нельзя понятно и так, но хоть небольшой примерчик можно? 

#76 DigiUSB замени на Serial

sashadeg
Offline
Зарегистрирован: 02.03.2016

Переделал под serial, но светодиоды так и не загорелись. 

Кто-нибудь приведите простой пример, чтобы при отправке в терминал цифры 100 на ардуине в переменная (допустим var) имела значение 100. Дальше сам разберусь. Спасибо. 

sashadeg
Offline
Зарегистрирован: 02.03.2016

Вроде нашел то что нужно, но здесь не используется ни atoi ни concat

char a = 0;
long b = 0;
boolean End, minus = 0;

void setup() {                
  Serial.begin(9600);
}

void loop() {
  if(Serial.available()){
    delay(2);
    a = Serial.read();
    if(a == 45){
      minus = 1;
    }
    if(a >= 48 && a <= 57){
      b *= 10;
      b += a - 48;      
      End = 1;
    }
  }
  else if(End == 1){
    if(minus == 1){
      b = -b;
    }
    Serial.println(b, DEC);
    analogWrite(3,b);
    b = 0;
    minus = 0;
    End = 0;   
  }
}

 

Клапауций 232
Offline
Зарегистрирован: 05.04.2016

sashadeg пишет:

Переделал под serial, но светодиоды так и не загорелись. 

если не заработало, значит не переделал.

ВН
Offline
Зарегистрирован: 25.02.2016

у меня так получилось

// Чтение из последовательного порта компа числовых значений и 
// исполнение по ним команд (вкл-выкл светодиод)
// возврат в порт числа и соотв ему символа, если такой имеется
  
int incomingInt = 0; 
void setup() 
{
   Serial.begin(9600);
     pinMode(13,OUTPUT);
}

void loop() 
{
   if (Serial.available()) 
   {
      incomingInt = Serial.parseInt();
        if(incomingInt == 100) digitalWrite(13,1);
          if(incomingInt == 90) digitalWrite(13,0);
      
      Serial.print(incomingInt);
        Serial.print('=');
          Serial.write(incomingInt);
            Serial.print('\n');
   }
}