Oppure

Loading
22/03/19 6:58
alex1995
salve sto cercando di fare 2 arduino mega come slave usando json su seriale ma io scrivo il comando ma arduino non risponde questo è il sorgente come mai?

char byteBuffer;
String commandBuffer;

void setup()
{
	pinMode(13, OUTPUT);
	Serial.begin(9600);
}

void loop()
{
	if((Serial.available()) && (String(Serial.read()) == "["))
	{
		while(Serial.available()) 
		{
			byteBuffer = (char)Serial.read();
	  		if(String(byteBuffer) != String("]"))
	  		{
	  			commandBuffer += String(byteBuffer);
	  		}
	  		else
	  		{
				break;
	  		}
		}
	}

		if(String(commandBuffer) == String("[01131]"))
		{
			digitalWrite(13, HIGH);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
			commandBuffer = "";
		}
		if(String(commandBuffer) == String("[01130]"))
		{
			digitalWrite(13, LOW);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
			commandBuffer = "";
		}

}
aaa
22/03/19 7:46
nessuno
Ma commandBuffer può contenere di tutto e di più dato che accumuli sempre
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità;) chiamava il gioco del Lotto Tassa sulla stupidità.
22/03/19 8:31
alex1995
dopo aver inviato la risposta lo svuoto comunque ho aggiunto questo e non funziona lo stesso:

char byteBuffer;
String commandBuffer;

void setup()
{
	pinMode(13, OUTPUT);
	Serial.begin(9600);
}

void loop()
{
	commandBuffer = "";
	if((Serial.available()) && (String(Serial.read()) == "["))
	{
		while(Serial.available()) 
		{
			byteBuffer = (char)Serial.read();
	  		if(String(byteBuffer) != String("]"))
	  		{
	  			commandBuffer += String(byteBuffer);
	  		}
	  		else
	  		{
				break;
	  		}
		}
	}

		if(String(commandBuffer) == String("[01131]"))
		{
			digitalWrite(13, HIGH);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
			commandBuffer = "";
		}
		if(String(commandBuffer) == String("[01130]"))
		{
			digitalWrite(13, LOW);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
			commandBuffer = "";
		}

}
aaa
22/03/19 14:55
nessuno
Oltre al fatto (necessario) di dover svuotare la stringa del comando, devi capire, quando termini di riceverla, cosa hai al suo interno, magari visualizzandola.

Insomma devi fare un po' di debugging.
Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità;) chiamava il gioco del Lotto Tassa sulla stupidità.
25/03/19 8:12
alex1995
ho provato ma a quanto pare non legge niente comunque ho risolto così:

void setup()
{
	Serial.begin(9600);
	pinMode(13, OUTPUT);
}

void loop(){

  while(Serial.available() > 0 )
  {
	String str = Serial.readString();
	    if(str == "[1131]\n")
	    {
	    	digitalWrite(13, HIGH);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
		} 
	    if(str == "[1130]\n")
	    {
			digitalWrite(13, LOW);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
		} 
	}
}
aaa
25/03/19 8:14
alex1995
ho provato ma a quanto pare non legge niente comunque ho risolto così:

void setup()
{
	Serial.begin(9600);
	pinMode(13, OUTPUT);
}

void loop(){

  while(Serial.available() > 0 )
  {
	String str = Serial.readString();
	    if(str == "[1131]\n")
	    {
	    	digitalWrite(13, HIGH);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
		} 
	    if(str == "[1130]\n")
	    {
			digitalWrite(13, LOW);
			delay(10);
			Serial.println("{\"13\":" + String(digitalRead(13)) + "}");
		} 
	}
}
aaa