Обмен данными через 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 всё сбрасывается, т.к. приложение шлёт данные один раз
Да все верно, если убрать то шим работает, но если вводить разные значения в терминал, то сам уровень шим сигнала не меняется
}else{ pwm1Sum = pwm1; pwm2Sum = pwm2; pwm3Sum = pwm3; }Мне не понятно почему не работает PWM через Serial, ввожу разные значения в терминал но ШИм не меняется, подскажите почему так
Выведите в терминал значение, полученное из приложения после 33 строки
ввожу разные значения в терминал но ШИм не меняется, подскажите почему так
он меняется, только очень мало - ведь ты читаешь из Сериал только один символ. Ввел ты на смартфоне поправку "51", а в ардуине прочиталось только "1" - вот на этот"1" ШИМ и поменялся
Выведите в терминал значение, полученное из приложения после 33 строки
Ввожу например значение 100
В терминале получаю
Ввожу например значение 100
В терминале получаю
все верно, это и есть '1' + '0' + '0'
У тебя со смарта передается не число, а символы
Ввожу например значение 100
В терминале получаю
все верно, это и есть '1' + '0' + '0'
У тебя со смарта передается не число, а символы
А как же тогда сделать чтобы это работало
А можно как то сделать в коде чтобы по serial приходило все то что отправляю
так оно ВСЕ приходит. Только не в том виде, что ты ждешь.
Тебе надо сначала принять всю строку - почитай про readString()
А потом преобразовать ее в число String.toIint(), если не путаю