Обмен данными через USB
- Войдите на сайт для отправки комментариев
Сб, 16/07/2022 - 01:00
Всех приветствую!
Соорудил код как смог, понятно что он не идеальный, но дальше лучше. То есть задумка такая есть датчик света на BH1750 и в зависимости от освещения подается шим сигнал на драйвер светодиода и чтобы можно было добавлять уровень шим сигнала через Смартфон. Но все бы ничего, только этот шим сигнал при добавлении через терминал работает всего лишь на время которое задано в delay(). Почему так, не могу понять.
#include <Wire.h> #include <BH1750.h> BH1750 lightMeter; int ledTftBrig; int ledTftDriverPwm = 9; int pwm1 = 50; int pwm2 = 130; int pwm3 = 220; int pwm1Sum; int pwm2Sum; int pwm3Sum; void setup() { pinMode(ledTftDriverPwm, OUTPUT); // объявляет 9 пин в качестве выхода: Serial.begin(9600); / lightMeter.begin(); lightMeter.setMTreg(254); } void loop() { //считываем показания с BH1750: uint32_t lux = lightMeter.readLightLevel(); //считываем показания с датчика if (Serial.available() > 0){ ledTftBrig = Serial.read(); //считываем значение с андроид приложения pwm1Sum = pwm1 + ledTftBrig; pwm2Sum = pwm2 + ledTftBrig; pwm3Sum = pwm3 + ledTftBrig; }else{ pwm1Sum = pwm1; pwm2Sum = pwm2; pwm3Sum = pwm3; } if (lux<=100) { //если показания меньше или равно 100 analogWrite(ledTftDriverPwm, pwm1Sum); } if (lux>100 && lux<=1000) { //если показания больше 100 и меньше или равно 1000 analogWrite(ledTftDriverPwm, pwm2Sum); } if (lux>1000) { //если показания больше 1000 analogWrite(ledTftDriverPwm, pwm3Sum); } delay(1000); }
только этот шим сигнал при добавлении через терминал работает всего лишь на время которое задано в delay(). Почему так, не могу понять.
Наверное потому, что в стр.37 всё сбрасывается, т.к. приложение шлёт данные один раз
только этот шим сигнал при добавлении через терминал работает всего лишь на время которое задано в delay(). Почему так, не могу понять.
Наверное потому, что в стр.37 всё сбрасывается, т.к. приложение шлёт данные один раз
Да все верно, если убрать то шим работает, но если вводить разные значения в терминал, то сам уровень шим сигнала не меняется
Мне не понятно почему не работает PWM через Serial, ввожу разные значения в терминал но ШИм не меняется, подскажите почему так
Выведите в терминал значение, полученное из приложения после 33 строки
ввожу разные значения в терминал но ШИм не меняется, подскажите почему так
он меняется, только очень мало - ведь ты читаешь из Сериал только один символ. Ввел ты на смартфоне поправку "51", а в ардуине прочиталось только "1" - вот на этот"1" ШИМ и поменялся
Выведите в терминал значение, полученное из приложения после 33 строки
Ввожу например значение 100
В терминале получаю
Ввожу например значение 100
В терминале получаю
все верно, это и есть '1' + '0' + '0'
У тебя со смарта передается не число, а символы
Ввожу например значение 100
В терминале получаю
все верно, это и есть '1' + '0' + '0'
У тебя со смарта передается не число, а символы
А как же тогда сделать чтобы это работало
А можно как то сделать в коде чтобы по serial приходило все то что отправляю
так оно ВСЕ приходит. Только не в том виде, что ты ждешь.
Тебе надо сначала принять всю строку - почитай про readString()
А потом преобразовать ее в число String.toIint(), если не путаю