Чем неудобно использование чисел с плавающей точкой на Arduino?

Точность вычислений с такими данными невелика, у вас могут возникнуть неожиданные ошибки, например, при использовании float в условном операторе.

4.Что за выражение стоит справа от = при объявлении булевой переменной enableSegment?

Определяем сколько сигментов должно гореть.

Задания для самостоятельного решения

Измените код программы таким образом, чтобы индикатор включался при 0 градусов и его показания прирастали на одно деление каждые 5 градусов.

Листинг:

1. #include <math.h>

2. #define FIRST_LED_PIN 2

3. #define LED_COUNT 10

4. #define TERMIST_B 4300

5. #define VIN 5.0

6. void setup()

7. {

8. pinMode(13, OUTPUT);

9. for (int i = 0; i < LED_COUNT; ++i)

10. pinMode(i + FIRST_LED_PIN, OUTPUT);

11. }

12. void loop()

13. {

14. digitalWrite(13, HIGH);

15. float voltage = analogRead(A0) * VIN / 1023.0;

16. float r1 = voltage / (VIN - voltage);

17. float temperature = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

18. for (int i = 0; i < LED_COUNT; i=i+5) {

19. boolean enableSegment = (temperature >= 0+i);

20. digitalWrite(i + FIRST_LED_PIN, enableSegment);

21. }

22. }

2.Добавьте в схему пьезопищалку и доработайте программу так, чтобы срабатывала звуковая сигнализация при достижении температуры, например, 25 градусов.

Листинг:

1. #include <math.h>

2. #define FIRST_LED_PIN 4

3. #define LED_COUNT 10

4. #define TERMIST_B 4300

5. #define VIN 5.0

6. #define BUZZER_PIN 3

7. void setup()

8. {

9. pinMode(13, OUTPUT);

10. for (int i = 0; i < LED_COUNT; ++i)

11. pinMode(i + FIRST_LED_PIN, OUTPUT);

12. pinMode(BUZZER_PIN, OUTPUT);

13. }

14. void loop()

15. {

16. digitalWrite(13, HIGH);

17. float voltage = analogRead(A0) * VIN / 1023.0;

18. float r1 = voltage / (VIN - voltage);

19. float temperature = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

20. for (int i = 0; i < LED_COUNT; ++i) {

21. boolean enableSegment = (temperature >= 21+i);

22. digitalWrite(i + FIRST_LED_PIN, enableSegment);

23. if (temperature == 25)

24. tone(BUZZER_PIN, 3500, 100);

25. }

26. }

Эксперимент 16. Метеостанция

В этом эксперименте мы передаем данные об измерениях температуры на компьютер (например, для последующей обработки).

Принципиальная схема

Чем неудобно использование чисел с плавающей точкой на Arduino? - student2.ru

Чем неудобно использование чисел с плавающей точкой на Arduino? - student2.ru Чем неудобно использование чисел с плавающей точкой на Arduino? - student2.ru

Код

1. #include <math.h>

2. int minute = 1;

3. #define TERMIST_B 4300

4. #define VIN 5.0

5. void setup()

6. {

7. pinMode(13, OUTPUT);

8. Serial.begin(9600);

9. Serial.println("Minute\tTemperature");

10. }

11. void loop()

12. {

13. digitalWrite(13, HIGH);

14. float voltage = analogRead(A0) * VIN / 1024.0;

15. float r1 = voltage / (VIN - voltage);

16. float temperature = 1./( 1./(TERMIST_B)*log(r1)+1./(25. + 273.) ) - 273;

17. Serial.print(minute);

18. Serial.print("\t");

19. Serial.println(temperature);

20. delay(60000);

21. ++minute;

22. }

Вопросы для проверки себя

Какие действия нужно предпринять, чтобы читать на компьютере данные с Arduino?

· чтобы обмениваться данными, нужно начать соединение, поэтому Serial.begin(baudrate)вызывается в setup()

· Serial.print(data) отправляет содержимое data. Если мы хотим отправить текст, можно просто заключить его в пару двойных кавычек: "". Кириллица, скорее всего, будет отображаться некорректно.

· Serial.println(data) делает то же самое, только добавляет в конце невидимый символ новой строки.



Наши рекомендации