Arduino Toggle yapamıyorum.

Başlatan veliusta, 06 Mart 2014, 01:39:49

veliusta

#include <SoftwareSerial.h>
SoftwareSerial myBluetooth(10, 11); // RX, TX
int ledpin=13;
int deger;
void setup() {
// put your setup code here, to run once:
myBluetooth.begin(9600);
myBluetooth.println("Bluetooth Mode:ON / 1 ve 0′ı tuslayin.");
pinMode(ledpin,OUTPUT);
}

void loop(){
if (myBluetooth.available())
{
deger=myBluetooth.read();
if(deger=='1')
if(ledpin==HIGH)
{
digitalWrite(ledpin,LOW);
myBluetooth.println("D13 Led OFF");
}
else{digitalWrite(ledpin,HIGH);
myBluetooth.println("D13 Led ON");
}
}
delay(10);// bir sonraki veriyi hazırlamak için
}

ttg

#1
Sorun şu:
ledpin=13;
tanımlamasının ardından
ledpin==HIGH her zaman false döndürecek. Çünkü ledpin sabit bir değer. ledpin'i okumak yerine şunu kullanmak bir çözüm olabilir:

#define LEDPIN 13
void toggle(int pin, bool* state){
 *state = !(*state);
 digitalWrite(pin, *state);
}


Kullanımı:
bool durum = HIGH;
toggle(LEDPIN, &durum);


Biraz amele bir çözüm oldu sanırım. Alternatifleri ben de merak ediyorum.
4 Buçuk Saatlik Python Eğitimi [Ücretsiz] www.youtube.com/gryyldrm

atomx

Arduino için digitalRead(PIN) komutu vardı hatırladığım kadarıyla.

if(digitalRead(pinx)==HIGH)
{
}
Hüseyin TECER

elektronart

eğer yanlış anlamadıysam bluetoothdan veri geldikçe ledi değiştirmek istiyorsunuz.

if(deger=='1') den sonra bir parantez { olsa şık olabilir. Tabi altındaki if ve else grubundan sonra kapatılması gerek.

if(ledpin==HIGH) yerine if(digitalRead(ledpin) == HIGH)
ttg nin dediği gibi pinden okumak yerine pinle birlikte hareket eden bir değişken tanıplanıp o da kontrol edilebilir.
Açık Elektronik

veliusta

#4
Toogle yapmayı başardım. internetten örnek kod buldum. Şimdi sadace 1 çıkışlıydı. 2 çıkışlı yapamadım. Yardım Lazım.
#include <SoftwareSerial.h>
SoftwareSerial myBluetooth(11, 10); // RX, TX
int ledpin0=13;
int ledpin1=12;

void setup(){
  myBluetooth.begin(9600);
  myBluetooth.println("Bluetooth Mode:ON / 1 ve 0′ı tuslayin.");
  pinMode(ledpin0,OUTPUT);
  digitalWrite(ledpin0,LOW);
  pinMode(ledpin1,OUTPUT);
  digitalWrite(ledpin1,LOW);
}

void loop()
{
   if (myBluetooth.available()) {
   delay(10);
   while (myBluetooth.available() > 0) {
// -------------------------------------------------     
     if((myBluetooth.read())=='1')
     {
       if(digitalRead(ledpin0)==LOW)
       {
         digitalWrite(ledpin0,HIGH);
         myBluetooth.println("1.LED ON!");
       }
       else
       {
         digitalWrite(ledpin0,LOW);
         myBluetooth.println("1.LED OFF!");
// -------------------------------------------------        
      if((myBluetooth.read())=='2')
      {
        if(digitalRead(ledpin1)==LOW)
        {
          digitalWrite(ledpin1,HIGH);
          myBluetooth.println("2.LED ON!");
        }
        else
        {
          digitalWrite(ledpin1,LOW);
          myBluetooth.println("2.LED OFF!");
// -------------------------------------------------
        }
      }
    }
  }
}
}
}



KODU Bozmadığım hali (Çalışan);
#include <SoftwareSerial.h>
SoftwareSerial myBluetooth(11, 10); // RX, TX
int ledpin=13;

void setup(){
  myBluetooth.begin(9600);
  myBluetooth.println("Bluetooth Mode:ON / 1 ve 0′ı tuslayin.");
  pinMode(ledpin,OUTPUT);
  digitalWrite(ledpin,LOW);
}

void loop()
{
   if (myBluetooth.available()) {
   delay(10);
   while (myBluetooth.available() > 0) {

     if((myBluetooth.read())=='1')
     {
       if(digitalRead(ledpin)==LOW)
       {
         digitalWrite(ledpin,HIGH);
         myBluetooth.println("1.LED ON!");
       }
       else
       {
         digitalWrite(ledpin,LOW);
         myBluetooth.println("1.LED OFF!");
       }
     }
   }
 }
}

picusta

#5
{ ve } 'lere dikkat. (1. kismin sonundaki kapatmalar)

Ayrica bir kere read() yaptinmi okudugun karakter gidiyor, ikinci if 'e birsey kalmiyor.
degeri saklayip öyle if'ler den geçir :
char okunankar;
okunankar =myBluetooth.read();




Daha da iyisi if'ler yerine  switch kullan:
switch(okunankar)
{
case '1':
//...
   break;
case '2':
// ...
  break;
}


Daha da iyisi ledpin  tablosu yap, oradan hangi pine etki edecegini bul.
#define MX_LED  2
char IdxKar;
char okunankar;
ledpin[MX_LED] = {13,12};

okunankar =myBluetooth.read();
IdxKar = okunankar - '1';


if (IdxKar< MX_LED && IdxKar >= 0)
 {
   digitalWrite(ledpin[IdxKar], !digitalRead(ledpin[IdxKar]));
    myBluetooth.print(IdxKar+1, DEC);
    myBluetooth.println(".LED toggle");
  }
else
  {
  myBluetooth.println("Geçersiz tus");
  }

veliusta

#6
Alıntı yapılan: picusta - 02 Nisan 2014, 11:59:18
{ ve } 'lere dikkat. (1. kismin sonundaki kapatmalar)

Ayrica bir kere read() yaptinmi okudugun karakter gidiyor, ikinci if 'e birsey kalmiyor.
degeri saklayip öyle if'ler den geçir :
char okunankar;
okunankar =myBluetooth.read();




Daha da iyisi if'ler yerine  switch kullan:
switch(okunankar)
{
case '1':
//...
   break;
case '2':
// ...
  break;
}


Daha da iyisi ledpin  tablosu yap, oradan hangi pine etki edecegini bul.
#define MX_LED  2
char IdxKar;
char okunankar;
ledpin[MX_LED] = {13,12};

okunankar =myBluetooth.read();
IdxKar = okunankar - '1';


if (IdxKar< MX_LED && IdxKar >= 0)
 {
   digitalWrite(ledpin[IdxKar], !digitalRead(ledpin[IdxKar]));
    myBluetooth.print(IdxKar+1, DEC);
    myBluetooth.println(".LED toggle");
  }
else
  {
  myBluetooth.println("Geçersiz tus");
  }


Break-Case ile 8 çıkış yaptım. Gayet iyi Çalışıyor. Fakat son yaptığınız çok ilginç onu da yapmak istiyorum. ledpin[MX_LED] = {13,12}; kısmı derlenmiyor. Rica etsem yapabilirmisiniz.

mesaj birleştirme:: 02 Nisan 2014, 23:43:08

Birde başka birşey daha sormak istiyorum.

void loop()
{
   if (myBluetooth.available()) {
   delay(10);
   while (myBluetooth.available() > 0) {
   okunankar =myBluetooth.read();
   switch(okunankar){
     
   case '1':
   if(digitalRead(ledpin1)==HIGH)             
  {
    digitalWrite(ledpin1, LOW);
    myBluetooth.println("1.LED OFF!");
  } else { 
    digitalWrite(ledpin1, HIGH);
    myBluetooth.println("1.LED ON!");
  }
   break;


   if(digitalRead(ledpin1)==HIGH)         bu kodu yazdıktan sonra neden endif le bitirmiyoruz. Visual Basic'te öyle yapıyoruz.

picusta

Bastaki veri tipi unutulmus :
int ledpin[MX_LED] = {13,12};

olmali.
Alıntı Yapif(digitalRead(ledpin1)==HIGH)         bu kodu yazdıktan sonra neden endif le bitirmiyoruz. Visual Basic'te öyle yapıyoruz.
Visual basic'teki End  C'de } karakteri. { ise VB deki Begin.
O yüzden her çikisin bir inisi vardir : her { karakterin bir sonu vardir }