Проблема с типами данных
- Войдите на сайт для отправки комментариев
Втр, 11/06/2013 - 15:32
Всем привет!Имеется лампа, яркостью которой необходимо управлять дистанционно с помощью беспроводных модулей Xbee и arduino. Один модуль и ардуино подключены к лампе другой соединен с компьютером. Сигнал идет и лампа горит, но не так хочется. В общем проблема с типами данных. Яркость задаю через протокол UART( tx rx), уровень яркости задаю в компьютере. Введенные мной значения ардуино понимает как char, которые потом преобразуются в dec. В итоге максимум яркости лампы я получаю введя "с", а минимум при "!", а потушить лампу вообще не получается.
Код программы:
void setup()
{
pinMode(9,OUTPUT);
Serial.begin(9600);
Serial1.begin(9600);
}
void loop()
{
if (Serial1.available())
{
char incoming=Serial1.read();
Serial.println(incoming);
}
if (Serial.available())
{
int i=Serial.read();
i=int(i);
Serial1.println(Serial.read());
i=map(i,0,99,0,255);
analogWrite(9,i);
Serial.println(i);
delay(500);
}
}
а вы как ей 0 передаете:
вот так правильней:
0- выкл 9 - макс яркость
void loop() { if( (Serial.available()) { char c = Serial.read() - '0'; int i = map(i,'0','9',0,255); analogWrite(9,i). } }http://arduino.ru/forum/programmirovanie/ne-mogu-razobratsya-s-xbee
http://arduino.ru/forum/programmirovanie/perevod-prinyatogo-simvola-s-com-porta-v-chislo
http://arduino.ru/forum/programmirovanie/upravlenie-arduinoi-iz-terinala
http://arduino.ru/forum/programmirovanie/upravlenie-pwm-s-pk
http://arduino.ru/forum/programmirovanie/peredacha-pary-dannykh-cherez-xbee-i-sobstvenno-sbor-obratno
Geronimo, спасибо! все работает)и вентилятором поуправляла)
maksim, спасибо за полезные ссылки, обязательно все прочту.
Здравствуйте!
Возникла еще одна проблема,но на этот раз с данными с датчика температуры(LM335Z). Имеются все также один ардуино и два беспроводных модуля. В программе использовала специальную библиотеку LM335A, чтобы без проблем получать данные с датчика и проводно без модулей значения выходят верные. А беспроводно значения выходят большими, т.е. если температура в комнате 23 градуса, то с модулями уже 146 градусов и далее все растет.
#include <LM335A.h> LM335A InsideTemp(0); //pass the analog input pin number void setup() { Serial.begin(9600); Serial1.begin(9600); } void loop() { delay(3000); if (Serial1.available()) { char incoming=Serial1.read(); Serial.println(incoming); } //user must call ReadTemp before any valid temp data is available InsideTemp.ReadTemp(); Serial.print("Celsius: "); Serial.println(InsideTemp.Celsius()); if (Serial.available()) { Serial1.println(Serial.read()); } }А как все подключено?
Датчик на 0-вом пине, Serial - через юсб к монитору, Serial1 к xbee?
Да датчик на 0-пине, один модуль xbee подключен через usb к монитору,а другой с ардуино и датчиком.
Датчик к аналоговому выводу подключен?
тогда зачем ардуино с датчиком, что-то пишет и читает в сериал?
мб. оставить только
void loop() { delay(3000); //user must call ReadTemp before any valid temp data is available InsideTemp.ReadTemp(); Serial1.print("Celsius: "); Serial1.println(InsideTemp.Celsius()); }а на втором ардуино:
void loop()
{
if(Serial1.available())
{
Serial.print(Setial1.read());
}
}
Но я использую один ардуино.
maksim, Да датчик к аналоговому выводу подключен.
Когда подключаете через хВее дуину с датчиком от чего питаете?
а скем он беспроводно связывается? с хбии через переходник на комп?
тогда второй кусок кода не нужен
питается от батарейки
от какой батарейки? куда батарейка подключена и куда подключего питание датчика?
И кстати, а как у вас датчик подключен к дуине?
9-вольтовая батарея подключена к ардуино. У нас имеется стендд-коробка по управлению температурой, внутри датчик тем-ры, лампа для нагрева и вентилятор для охлаждения, вот у этой коробки свое питание, к ардуино подключены один провод земля от коробки и другой к аналоговому входу от датчика
я удалила лишнее все оставила толька данный код,и всеравно данные идут от 150 и увеличиваются,когда на самом деле температура составляет 23 градуса.
#include <LM335A.h> LM335A InsideTemp(0); //pass the analog input pin number void setup() { Serial.begin(9600); } void loop() { delay(3000); //user must call ReadTemp before any valid temp data is available InsideTemp.ReadTemp(); Serial.print("Celsius: "); Serial.println(InsideTemp.Celsius()); }По описанию схемы "стендд-коробка" не ясно как у вас подключен датчик, поэтому помочь ничем не могу.
Стенд - коробка выглядит таким образом:
К сожалению по этим фото не видно как подключен датчик. Нужна схема. В общем в чем заключаются мои предположения. Вы когда питаете дуину от УСБ на схеме датчика 5 вольт, а когда от батареи либо на схеме датчика напряжение батареи, либо наоборот падение напряжения ниже 5 вольт.
Я - новичок,можете подробнее написать,что Вы имели ввиду??
maksim, Вы были правы. Проблема была в питании, мы подключили ардуино к другому компьютеру и данные пошли верные. Спасибо!)