#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
}
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.
Arduino için digitalRead(PIN) komutu vardı hatırladığım kadarıyla.
if(digitalRead(pinx)==HIGH)
{
}
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.
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!");
}
}
}
}
}
{ 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");
}
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.
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 }