Временная развертка с АЦП

TxBr
Offline
Зарегистрирован: 26.03.2015

Увожаемые форумчане, прошу вашей объективной помощи :)

Будучи новичком в мире ардуино, решил сразу провернуть проект: вывести временную разверку напряжений, считанных с АЦП на ардуинке
Со считыванием АЦП и построением графиков проблем нет, проблема в передаче данных, сразу привожу ответсвенные участки скетчей:

-Ардуино:
if (Serial.available() > 0)  //если есть входные данные, то начать процесс передачи данных

  {    

    byte Data = Serial.read();
    int ADC0 = analogRead(A0);  // Запись АЦП0
    int ADC1 = analogRead(A1);  // Запись АЦП1
    int ADC2 = analogRead(A2);  // Запись АЦП2
    
    float V1 = (ADC0 * (5.0 / 1023.0));   // перевод в В, опорное напряжение 5В
    float V2 = (ADC1 * (5.0 / 1023.0));
    float V3 = (ADC2 * (5.0 / 1023.0));
  
    Serial.write(ADC0);    // Отправка через порт
    Serial.write(ADC1);    
    Serial.write(ADC2);    
 
    outled(byte(Data)); //Вывод на цифровой выход принятых данных
    } 
Пояснялка: Когда приходят внешние данные, опрашиваются АЦП и отправляются в эфир

-Процессинг:
if (millis()%100 <= 20)

 {  test++;
    COMport.write(test);
    delay(5);
    adc1 = COMport.read()*5/1023;
    delay(5);
    adc2 = COMport.read()*5/1023; 
    delay(5);
    adc3 = COMport.read()*5/1023; 
    delay(5);
 }
Пояснялка: Каждые 100мс комп в эфир отправляет данные (test) и спустя небольшую задержку надеется считать из буфера значения АЦП. Переменные adc объявленны, как глобальные, разумеется.
 
В чем проблема? Сигнал с компьютера доходит до МК (загораются диодики, соответсвующие отправленому коду), а вот считываю с МК я решительно только ноль. Использование на ардуино для отправки print вместо write результатов не дало :(
TxBr
Offline
Зарегистрирован: 26.03.2015

Сразу хочу извиниться, что не свернул код в {code}
Но в форме форума я не вижу "редактировать" или типо того для первого сообщения темы, так что в другой раз буду внимательнее.. и еще я пару опечаток вижу, но так же исправиться не могу :(

TxBr
Offline
Зарегистрирован: 26.03.2015

Сам отвечаю на свой вопрос
Помогло шаманство
Было:

 {  test++;
    COMport.write(test);
    delay(5);
    adc1 = COMport.read()*5/1023;
    delay(5);
    adc2 = COMport.read()*5/1023; 
    delay(5);
    adc3 = COMport.read()*5/1023; 
    delay(5);
 }

Должно быть:
 

 {  test++;
    COMport.write(test);
    delay(5);
    adc1 = COMport.read();
    delay(5);
    adc2 = COMport.read(); 
    delay(5);
    adc3 = COMport.read(); 
    delay(5);
 }

Убрав масштабный коэффициент (перенес *5/1023 на момент построения графиков) и подобрав время задержки для гарантированной передачи даннх, все пошло как по маслу ^^