Вычисление значений

Mcr
Offline
Зарегистрирован: 31.07.2012

Здравствуйте ув. форумчане!
Я новичок в этом деле, и по-этому появился вопрос.
Как мне сделать вычисление переменных в приложении?
Я вот так пишу

int in=0;
int out = 0;
int dif=0;
int pinLed = 10;
int btn = 8;
int btnOUT = 9;
int buttonState = 0;
void setup()
{
pinMode(pinLed,OUTPUT);
pinMode(btn,INPUT);
pinMode(btnOUT, OUTPUT);
digitalWrite(btnOUT,HIGH);
digitalWrite(btn,HIGH);
Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0)
  {
    if(buttonState==digitalRead(btn))
      {
        if(buttonState==LOW)
          {
            in++;
            digitalWrite(pinLed, HIGH);
            //Serial.println(in);
            Serial.print(in);
            delay(200);
          }
      }
      if(buttonState==digitalRead(btnOUT))
      {
        if(buttonState==LOW)
          {
            out++;
            digitalWrite(pinLed, LOW);
            //Serial.println(in);
            Serial.print(out);
            delay(200);
          }
      }
      while(in>0 && out>0){
      int rezult = in-out;
      Serial.print("Raznica"+rezult);
      }
  }
}

 Но у меня ничего не выходит. Т.е. мне надо отнимать накопившиеся переменные in и out. Как это грамотно сделать хочу спросить у Вас.
 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

странный способ считать данные если ты их отправляешь

Serial.print(in);

или ты не считываешь? а если нет зачем 

if(Serial.available()>0)

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

и можно же писать двойные условия

if(buttonState==digitalRead(btn) && buttonState==LOW){
      in++;
      digitalWrite(pinLed, HIGH);
      //Serial.println(in);
      Serial.print(in);
      delay(200);
    }

а на этом куске программа должна зависнуть в бесконечном цикле если условия выполнятся

while(in>0 && out>0){
      int rezult = in-out;
      Serial.print("Raznica"+rezult);
    }

 

Mcr
Offline
Зарегистрирован: 31.07.2012

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

Serial.print(in);

Но как мне сделать правильно вычеслениея?
И можно ли отправить несколько значений в порт (в моем случае In и Out)?

 

com
Offline
Зарегистрирован: 06.09.2013

вы вычитать не умеете?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а вообще не программа а фигня какая то

наверно имелось в виду следующее

buttonState=digitalRead(btn);
if( buttonState==LOW){
      in++;
      digitalWrite(pinLed, HIGH);
      //Serial.println(in);
      Serial.print(in);
      delay(200);
    }

 

Mcr
Offline
Зарегистрирован: 31.07.2012

com пишет:

вы вычитать не умеете?

Я вот сделал вот так!
Но может кто-то чего-то подскажет!

int in=0;
int out = 0;
int pinLed = 10;
int btn = 8;
int btnOUT = 9;
int buttonState = 0;
void setup()
{
pinMode(pinLed,OUTPUT);
pinMode(btn,INPUT);
pinMode(btnOUT, OUTPUT);
digitalWrite(btnOUT,HIGH);
digitalWrite(btn,HIGH);
Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0)
  {
    if(buttonState==digitalRead(btn) && buttonState==LOW)
      {
            in++;
            digitalWrite(pinLed, HIGH);
            Serial.print(in);
            delay(200);
            if(in>0 && out>0){
            int rezult = in-out;
            Serial.print(rezult);
            }
      }
      if(buttonState==digitalRead(btnOUT) && buttonState==LOW)
      {
            out++;
            digitalWrite(pinLed, LOW);
            Serial.print(out);
            delay(200);
            if(in>0 && out>0){
            int rezult = in-out;
            Serial.print(rezult);
            }
      }
  }
}

 

 
 
com
Offline
Зарегистрирован: 06.09.2013

советую. в приказном порядке. читайте про разницу между "=" и "=="

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

немножко поправил. убрал про чтение

#define pinLed 10
#define btn    8
#define btnOUT 9

int in=0;
int out = 0;
int dif=0;

void setup(){
  pinMode(pinLed,OUTPUT);
  pinMode(btn,INPUT);
  pinMode(btnOUT, OUTPUT);
  digitalWrite(btnOUT,HIGH);
  digitalWrite(btn,HIGH);
  Serial.begin(9600);
}

void loop(){
  if(digitalRead(btn)==LOW){
    in++;
    digitalWrite(pinLed, HIGH);
    vivod();
    delay(200);
  }
  if(digitalRead(btnOUT)==LOW)      {
    out++;
    digitalWrite(pinLed, LOW);
    vivod();
    delay(200);
  }
}

void vivod(){
  Serial.print("in=");
  Serial.print(in);
  Serial.print("  out=");
  Serial.print(out);
  Serial.print("  Raznica=");
  Serial.println(in-out);
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

хотя так симпатичнее будет

#define pinLed 10
#define btn    8
#define btnOUT 9

int in=0;
int out = 0;
int dif=0;

void setup(){
  pinMode(pinLed,OUTPUT);
  pinMode(btn,INPUT);
  pinMode(btnOUT, OUTPUT);
  digitalWrite(btnOUT,HIGH);
  digitalWrite(btn,HIGH);
  Serial.begin(9600);
}

void loop(){
  if(digitalRead(btn)==LOW){
    in++;
    digitalWrite(pinLed, HIGH);
    vivod();
    delay(200);
  }
  if(digitalRead(btnOUT)==LOW)      {
    out++;
    digitalWrite(pinLed, LOW);
    vivod();
    delay(200);
  }
}

void vivod(){
  Serial.print("in=");
  Serial.print(in);
  Serial.print("\t");
  Serial.print("out=");
  Serial.print(out);
  Serial.print("\t");
  Serial.print("Raznica=");
  Serial.println(in-out);
}

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

Mcr пишет:

Но может кто-то чего-то подскажет!

так тебе подсказывают. ты наверно этого не видишь

Mcr
Offline
Зарегистрирован: 31.07.2012

jeka_tm пишет:

Mcr пишет:

Но может кто-то чего-то подскажет!

так тебе подсказывают. ты наверно этого не видишь

Спасибо большое.
Я еще хотел узнать, как отправить in и out в порт для чтения на ПК?

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

запусти код который дал. там уже все сделано)))

com
Offline
Зарегистрирован: 06.09.2013

щас еще со схемой разбираться будем :) ибо в оригинале

11   pinMode(btn,INPUT);
12   pinMode(btnOUT, OUTPUT);

 

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

ага)) не заметил

Mcr
Offline
Зарегистрирован: 31.07.2012

jeka_tm пишет:

запусти код который дал. там уже все сделано)))

Да все класс. Спасибо)
Только как мне эти данные разбирать на c#, вопрос, буду разбиратся))
А еще не подскажите, как мне сделать чтобы при отправке числа в порт (от 0 до 7) вызывать устройство от d0 до d7 в зависимости от цыфры?
Может я не правильно излагаю, то сильно не обзывайте.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

нифига не понял

Mcr
Offline
Зарегистрирован: 31.07.2012

нужно чтобы откликалось устройство от d0-d7 в зависимости от цыфры которая будет послана в порт.

Mcr
Offline
Зарегистрирован: 31.07.2012

jeka_tm пишет:

нифига не понял

нужно чтобы откликалось устройство от d0-d7 в зависимости от цыфры которая будет послана в порт.

jeka_tm
jeka_tm аватар
Offline
Зарегистрирован: 19.05.2013

а вот оно что. ну кто нибудь поможет. у меня нет времени писать код за тебя

помог уже. погугли и сам сделаешь