Ткните пожалуйста, что не так.

denis707
Offline
Зарегистрирован: 09.09.2013

Уже все испробовал, в терминале показывает 1000 но условие не выполняет, подскажите с чем я затупил )))

#include <SoftwareSerial.h>

SoftwareSerial SerialBT( 2, 3); // RX, TX

int red = 5;
int green = 6;
int blue = 7;

void setup()  
{
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  Serial.begin(9600); // стандартный
  SerialBT.begin(9600); // новый на другой скорости 
}

void loop() 
{
  while (SerialBT.available() > 1);
 int val = SerialBT.parseInt();
 
 //int val = 1000;
  Serial.println(val);
  
  if (val == 1000)
    {
    digitalWrite(red,HIGH);
    }
  if (val = 1001)
    {
    digitalWrite(red,LOW);
    }
}

 

vdk
Offline
Зарегистрирован: 14.04.2013

denis707 пишет:

if (val = 1001) { digitalWrite(red,LOW); } }

 

Вот это

denis707
Offline
Зарегистрирован: 09.09.2013

Столько всего перепробовал, думал только о приеме, даже как-то неловко. )))

Сибки 

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

И подумайте еще над этой строкой:   while (SerialBT.available() > 1);

Зачем она? и что произойдет с вашей программой если в приемном буфере окажется больше одного байта?

 

denis707
Offline
Зарегистрирован: 09.09.2013

насколько я понял эта строчка ждет пока не придут данные больше 1

или это не так работает?

denis707
Offline
Зарегистрирован: 09.09.2013

изучаю, ардинька обрастает устойствами.

буду рад если поправите и укажите куда смотреть

это немного выросший код ))

#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 8, 9, 10, 11, 12);

#include <SoftwareSerial.h>
SoftwareSerial SerialBT( 2, 3); // RX, TX

int red = 5;
int green = 6;
int blue = 7;
int val;

void setup()  
{
  lcd.begin(16,2);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
  pinMode(7,OUTPUT);
  Serial.begin(9600); // стандартный
  SerialBT.begin(9600); // новый на другой скорости 
}

void loop() 
{
  //while (SerialBT.available() > 1);
  val = SerialBT.parseInt();
 
 //int val = 1000;
  if (Serial.println(val)>0);
  
  if (val == 11)
    {
    digitalWrite(red,HIGH);
    lcd.setCursor(0,0);
    lcd.print("Red on ");
    }
  if (val == 12)
    {
    digitalWrite(red,LOW);
    lcd.setCursor(0,0);
    lcd.print("Red off");
    }
   
  if (val == 21)
    {
    digitalWrite(blue,HIGH);
    lcd.setCursor(8,0);
    lcd.print("Blue on ");
    }
  if (val == 22)
    {
    digitalWrite(blue,LOW);
    lcd.setCursor(8,0);
    lcd.print("Blue off");
    }
   
   if (val == 31)
    {
    digitalWrite(green,HIGH);
    lcd.setCursor(0,1);
    lcd.print("Green on ");
    }
  if (val == 32)
    {
    digitalWrite(green,LOW);
    lcd.setCursor(0,1);
    lcd.print("Green off");
    }
}

 

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

какая замечательная строчка!

if (Serial.println(val)>0);

а что она дожна делать?

leshak
Offline
Зарегистрирован: 29.09.2011

switch case - авось пригодится

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

denis707 пишет:

насколько я понял эта строчка ждет пока не придут данные больше 1

или это не так работает?

Вот строки, которые ждут прихода одного байта:

while(SerialBT.available() < 1);
или
while(SerialBT.available() == 0);
или 
while(!SerialBT.available());

в вашем же случае если в буфере окажется более одного байта ваша программа зависнет.

denis707
Offline
Зарегистрирован: 09.09.2013

опять учудил, даже не заметил что написал 

if (Serial.available(val)>0);  <- так и должно было быть, СИБКИ, программа не висла, но работала с ощутимой задержкой.

 

 

denis707
Offline
Зарегистрирован: 09.09.2013

в смысле я хотел написать -> if (Serial.available(val)==0);

denis707
Offline
Зарегистрирован: 09.09.2013

leshak пишет:

switch case - авось пригодится

 

Этой функции еще не видел, спасибо.

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

denis707 пишет:

в смысле я хотел написать -> if (Serial.available(val)==0);

и тоже бред.

denis707
Offline
Зарегистрирован: 09.09.2013

maksim пишет:

denis707 пишет:

в смысле я хотел написать -> if (Serial.available(val)==0);

и тоже бред.

 

нужно наверно отдохнуть ))))

denis707
Offline
Зарегистрирован: 09.09.2013

простите, темы по датчику температуры 18b20 никто не видел?

не могу понять как получить адрес, в смысле скетчем из примера его считывает но не понимаю как.