Chip, ни чего у меня не получилось со switch... case... ![Печаль](images/smilies/frown.png)
В принципе все понятно, но на моем скетче, запутался в край, тем более, если управлять несколькими устройствами...
Ну да ладно, с трудночитаемостью кода, буду позже разбираться.
Сечас, возникла проблема.
В данном - в скетче:
PHP код:
char inchar;
int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
Serial1.begin(9600);
delay(30000);
Serial1.println("AT+CMGF=1\r");
delay(200);
Serial1.println("AT+CNMI=3,0,0,0\r");
delay(200);
}
void loop()
{
if(Serial1.available() >0)
{
inchar=Serial1.read();
if (inchar=='#')
{
delay(10);
inchar=Serial1.read();
if (inchar=='a')
{
delay(10);
inchar=Serial1.read();
if (inchar=='0')
{
digitalWrite(led1, LOW);
}
else if (inchar=='1')
{
digitalWrite(led1, HIGH);
}
delay(10);
inchar=Serial1.read();
if (inchar=='b')
{
inchar=Serial1.read();
if (inchar=='0')
{
digitalWrite(led2, LOW);
}
else if (inchar=='1')
{
digitalWrite(led2, HIGH);
}
delay(10);
inchar=Serial1.read();
if (inchar=='c')
{
inchar=Serial1.read();
if (inchar=='0')
{
digitalWrite(led3, LOW);
}
else if (inchar=='1')
{
digitalWrite(led3, HIGH);
}
delay(10);
inchar=Serial1.read();
if (inchar=='d')
{
delay(10);
inchar=Serial1.read();
if (inchar=='0')
{
digitalWrite(led4, LOW);
}
else if (inchar=='1')
{
digitalWrite(led4, HIGH);
}
delay(10);
}
}
Serial1.println("AT+CMGD=1,4\r");
}
}
}
}
}
можно управлять 4-мя устройствами, но синтаксис СМС должен быть - #abcd, т.е. что бы ОДНО устройство включить или выключить, нужно писать всю строку (#a0b0c1d0), что не очень удобно. Решил сделать скетч, чтобы можно было писать просто - #d1 например и все (минуя a,b,c)
Однако не получилось. Решил сделать так :
PHP код:
char inchar;
int led1 = 10;
int led2 = 11;
void setup()
{
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
Serial1.begin(9600);
delay(30000);
Serial1.println("AT+CMGF=1\r");
delay(200);
Serial1.println("AT+CNMI=3,0,0,0\r");
delay(200);
}
void loop()
{
device_1();
device_2();
}
void device_1()
{
if(Serial1.available() >0)
{
inchar=Serial1.read();
if (inchar=='#')
{
delay(10);
inchar=Serial1.read();
if (inchar=='a')
{
delay(10);
inchar=Serial1.read();
if (inchar=='0')
{
digitalWrite(led1, LOW);
}
else if (inchar=='1')
{
digitalWrite(led1, HIGH);
}
delay(10);
Serial1.println("AT+CMGD=1,4\r");
}
}
}
}
void device_2()
{
if(Serial1.available() >0)
{
inchar=Serial1.read();
if (inchar=='#')
{
delay(10);
inchar=Serial1.read();
if (inchar=='b')
{
delay(10);
inchar=Serial1.read();
if (inchar=='0')
{
digitalWrite(led2, LOW);
}
else if (inchar=='1')
{
digitalWrite(led2, HIGH);
}
delay(10);
Serial1.println("AT+CMGD=1,4\r");
}
}
}
}
Вроде бы должно все работать, но включается-выключается только 1 устройство. Т.е. - отправляю #a1 - led1 включается, потом отправляю #b1 - никакой реакции, пока не отключу #a0. В чем может быть проблема?