Проблема с типами данных

Madina
Offline
Зарегистрирован: 11.06.2013

Всем привет!Имеется лампа, яркостью которой необходимо управлять дистанционно с помощью беспроводных модулей 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);
  }    
}

 

Geronimo
Offline
Зарегистрирован: 06.05.2013

а вы как ей 0 передаете:
вот так правильней:
0- выкл 9 - макс яркость

void loop()
{
  if( (Serial.available())
  {
     char c = Serial.read() - '0';
    int i = map(i,'0','9',0,255);
     analogWrite(9,i).
  }
}

 

maksim
Offline
Зарегистрирован: 12.02.2012
Madina
Offline
Зарегистрирован: 11.06.2013

Geronimo, спасибо! все работает)и вентилятором поуправляла)

maksim, спасибо за полезные ссылки, обязательно все прочту.

Madina
Offline
Зарегистрирован: 11.06.2013

Здравствуйте!

Возникла еще одна проблема,но на этот раз с данными с датчика температуры(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());
   
  }

}

 

Geronimo
Offline
Зарегистрирован: 06.05.2013

А как все подключено?

Датчик на 0-вом пине, Serial - через юсб к монитору, Serial1 к xbee?

Madina
Offline
Зарегистрирован: 11.06.2013

Да датчик на 0-пине, один модуль xbee подключен через usb к монитору,а  другой с ардуино и датчиком.

maksim
Offline
Зарегистрирован: 12.02.2012

Датчик к аналоговому выводу подключен?

Geronimo
Offline
Зарегистрирован: 06.05.2013

тогда зачем ардуино с датчиком, что-то пишет и читает в сериал?

мб. оставить только

void loop() {
	  delay(3000);
	   
	  //user must call ReadTemp before any valid temp data is available
	  InsideTemp.ReadTemp(); 
	 
	  Serial1.print("Celsius: ");
	  Serial1.println(InsideTemp.Celsius());
	 
	}

 

Geronimo
Offline
Зарегистрирован: 06.05.2013

а на втором ардуино:

void loop()

{

if(Serial1.available())

{

Serial.print(Setial1.read());

}

}

Madina
Offline
Зарегистрирован: 11.06.2013

Но я использую один ардуино.

Madina
Offline
Зарегистрирован: 11.06.2013

maksim, Да датчик к аналоговому выводу подключен.

maksim
Offline
Зарегистрирован: 12.02.2012

Когда подключаете через хВее дуину с датчиком от чего питаете?

Geronimo
Offline
Зарегистрирован: 06.05.2013

а скем он беспроводно связывается? с хбии через переходник на комп?

тогда второй кусок кода не нужен

Madina
Offline
Зарегистрирован: 11.06.2013

питается от батарейки

maksim
Offline
Зарегистрирован: 12.02.2012

от какой батарейки? куда батарейка подключена и куда подключего питание датчика?

maksim
Offline
Зарегистрирован: 12.02.2012

И кстати, а как у вас датчик подключен к дуине?

Madina
Offline
Зарегистрирован: 11.06.2013

9-вольтовая батарея подключена к ардуино. У нас имеется стендд-коробка по управлению температурой, внутри датчик тем-ры, лампа для нагрева и вентилятор для охлаждения, вот у этой коробки свое питание, к ардуино подключены один провод земля от коробки и другой к аналоговому входу от датчика

Madina
Offline
Зарегистрирован: 11.06.2013

я удалила лишнее все оставила толька данный код,и всеравно данные идут от 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());
  
 
}

 

maksim
Offline
Зарегистрирован: 12.02.2012

По описанию схемы "стендд-коробка" не ясно как у вас подключен датчик, поэтому помочь ничем не могу.

Madina
Offline
Зарегистрирован: 11.06.2013

Стенд - коробка выглядит таким образом:

maksim
Offline
Зарегистрирован: 12.02.2012

К сожалению по этим фото не видно как подключен датчик. Нужна схема. В общем в чем заключаются мои предположения. Вы когда питаете дуину от УСБ на схеме датчика 5 вольт, а когда от батареи либо на схеме датчика напряжение батареи, либо наоборот падение напряжения ниже 5 вольт.

Madina
Offline
Зарегистрирован: 11.06.2013

Я - новичок,можете подробнее написать,что Вы имели ввиду??

Madina
Offline
Зарегистрирован: 11.06.2013

maksim, Вы были правы. Проблема была в питании, мы подключили ардуино к другому компьютеру и данные пошли верные. Спасибо!)