Автор Тема: analog Reading - грешен резултат  (Прочетена 1045 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
analog Reading - грешен резултат
« -: 14 Октомври 2016, 20:12:09 »
Здравейте,

опитвам се да взема и вкарам 10 четения от от аналовия порт на ардуино в масив и след това да изкарам  средната статистика. Всичко уж работи нормално, обаче в момента в който поставя  условие да речем - ако средно намереният резултат е по-малък от 72F да се пусне 5v изходно напрежение от някой дигитален изход резултата фейлва :)

Е тва ми е кода:


Код: C
  1.  
  2. const int numReadings = 10;
  3. int readings[numReadings];  // the readings from the analog input
  4. int readIndex = 0;          // the index of the current reading
  5. int total = 0;      
  6. int average = 0;  
  7. int inputPin = A0;
  8. int LEDpin = 8;          
  9.  
  10. void setup() {
  11.   // initialize serial communication with computer:
  12.   Serial.begin(9600);
  13.  
  14.   pinMode(LEDpin,OUTPUT);
  15.  
  16.   //initialize all the readings to 0:
  17.   for (int thisReading = 0; thisReading < numReadings; thisReading++) {
  18.     readings[thisReading] = 0;
  19.   }
  20. }
  21.  
  22. void loop() {
  23.   // subtract the last reading:
  24.   total = total - readings[readIndex];
  25.  
  26.   // read from the sensor:
  27.   int rawvoltage= analogRead(inputPin);
  28.  
  29.   float fahrenheit = (5.0 * rawvoltage * 100.0)/1024.0;
  30.  
  31.   readings[readIndex]= fahrenheit;
  32.  
  33.   total = total + readings[readIndex];
  34.  
  35.   // advance to the next position in the array:
  36.   readIndex = readIndex + 1;
  37.  
  38.   // if we're at the end of the array...
  39.   if (readIndex >= numReadings) {
  40.     // ...wrap around to the beginning:
  41.     readIndex = 0;
  42.   }
  43.   // calculate the average:
  44.   average = total / numReadings;
  45.   if(readIndex == 9) {
  46.     //Serial.print("Total: ");
  47.     //Serial.println(total);  
  48.     //Serial.print("Avarage: ");
  49.     //Serial.println(average);
  50.     if(average < 72 ) {
  51.     digitalWrite(LEDpin, HIGH);  
  52.     } else {
  53.     digitalWrite(LEDpin, LOW);  
  54.     }
  55.   }
  56.   Serial.print("Current: ");
  57.   Serial.println(fahrenheit);
  58.   delay(500);
  59. }
  60.  

Ето и изходите с if-ва в краят.  Ако го махна всичко се оправя и рийдинга стои стабилен...... а тук играе от 70 до 72.

Код: Bash
  1. Current: 70.80
  2. Current: 72.27
  3. Current: 72.27
  4. Current: 72.75
  5. Current: 72.27
  6. Current: 72.75
  7. Current: 72.75
  8. Current: 72.27
  9. Current: 72.75
  10. Current: 72.75
  11. Avarage: 72
  12.  
  13. Current: 72.27
  14. Current: 70.31
  15. Current: 70.31
  16. Current: 70.80
  17. Current: 70.31
  18. Current: 70.31
  19. Current: 70.31
  20. Current: 70.80
  21. Current: 70.80
  22. Current: 70.31
  23. Avarage: 70
  24. Current: 72.75
  25. Current: 70.80
  26. Current: 70.80
  27. Current: 70.31
  28. Current: 70.80
  29. Current: 70.80
  30. Current: 70.31
  31. Current: 70.80
  32. Current: 70.31
  33. Current: 70.80
  34. Avarage: 70
  35. Current: 70.80
  36. Current: 72.75
  37. Current: 72.75
  38. Current: 72.75
  39. Current: 72.75
  40. Current: 72.75
  41. Current: 72.75
  42. Current: 72.75
  43. Current: 72.75
  44. Current: 72.75
  45. Avarage: 72
  46.  
  47.  
  48.  
« Последна редакция: 14 Октомври 2016, 20:18:12 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: analog Reading - грешен резултат
« Отговор #1 -: 15 Октомври 2016, 00:38:37 »
Разбрах къде е грешката и тя не е програмна. Написах нов скрипт далеч по разбираем от този дето намерих в мрежата и резултата фейлна отново:

Код: C
  1. / Arrays to save our results in
  2. unsigned long values[10];
  3.  
  4. // preset variables
  5. int inputPin = A0;
  6. int LEDpin = 13;
  7. // Setup the serial port and pin 13
  8. void setup() {
  9.   Serial.begin(9600);
  10.   pinMode(LEDpin,OUTPUT);
  11. }
  12.  
  13.  
  14. void loop() {  
  15.   unsigned int i;
  16.   unsigned int total = 0;
  17.   unsigned int average;
  18.  
  19.   for(i=0;i<10;i++) {
  20.     values[i] = analogRead(A0);
  21.     delay(500);
  22.   }
  23.   // print out the results
  24.   Serial.println("--- Results ---");
  25.  
  26.   for(i=0;i<10;i++) {
  27.     total = total + values[i];
  28.   }
  29.   average = total / 10;
  30.   // calculate the average result
  31.   Serial.print("Average mтхilivolts: ");
  32.   Serial.println(average);
  33.    
  34.   if (average < 142 ) {
  35.    digitalWrite(LEDpin,HIGH);
  36.   } else {
  37.    digitalWrite(LEDpin, LOW);
  38.   }
  39. }
  40.  

Като посоча вграденият LED към борда всичко си идва на място, като сложа мой външен резултата фейлва, понеже има голям волтидж дроп (предвиден е за 12v с ). Както и да е, загадката е решена :)
« Последна редакция: 15 Октомври 2016, 00:41:36 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: analog Reading - грешен резултат
« Отговор #2 -: 16 Октомври 2016, 19:27:06 »
Ами като бачкаш с хардуер трябва да дебъгваш освен код и хардуера. Един мултиметър е задължителен ;)

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3624
Re: analog Reading - грешен резултат
« Отговор #3 -: 17 Октомври 2016, 01:52:25 »
Забавно е - да :)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html