What's problem you are encountering?
Since three days all set-blocks of my and libary custom blocks get to undefined blocks when i load the projekt. Even if there was everything fine when i saved it some seconds before.
I thought i got it fixed yesterday, but today i also got an forever-block change in an undefined block.
Work Conditions
I work with the Arduino App, you can install from Chrome.
I have Google Chrom Version 131.0.6778.109.
I saved my Files in the Cloud.
I use multiple Snap-Programms on the same time and normally i have the same Programm opened twith to test if the communiaction still works if i make changes.
What have you tried that didn't work?
Rewrite the code from the damage file. Sometime this workes and i could load a not damage file but at least after one or two saves i got a damage file again. But even when i rewrite all undefined blocks, it still dont workes like it should, but maybe i got something wrong.
I tryed to us the Recover option in the cloud, but even older file which had no Problem didn't worked.
I reinstaled the app.
I tryed to use snap throug the browser (chrome and firefox) instead.
Saved the files on the computer and in new files on the cloud.
I tryed to hard reset the browser
- shift-command-R
- dev-toll (F12)
- empty chatch and cookies (ctrl-shift-del)
I tryed to ex- and import just single blocks, but still the same result that blocks get undefined.
Post a project example, link, or screenshot:]
The Program with the Problems
Other Project, but much shared code
Code for Arduino
/** Program zum Debuggen.
Arduino Program für einen WMITM-Attack, welches Anna oder Bob wiederspiegelt.
Benötigt das zugehörige Snap Program, über welches die Nachrichten versendet und verschlüsselt werden.
Das Arduino Program ist nur für den Datenaustausch.
Nachrichten mit einem $ am Anfang sind Anweisungen an den Arduino oder Snap
Das # vor Nachrichten wird benötigt, da bei der Kommunikation mit Snap ab und zu das erste Zeichen verloren geht.
*/
#include <SoftwareSerial.h>
SoftwareSerial Serial2(D1, D2); // RX, TX
String message = "";
void setup() {
Serial.begin(115200); // Schnittstelle zu Snap
Serial2.begin(9600); // Serielle Kommunikation zu Anna
//stellt sicher das keine alten Nachrichten noch blockieren
Serial.flush();
Serial2.flush();
//wait for Snap
while(Serial.available() <= 0) {
Serial.write("#$HelloSnap");
delay(500);
}
Serial.write("#$Arduino ist verbunden");
delay(1000);
}
void loop() {
if(Serial.available() > 0) {
message = Serial.readString();
if(message.indexOf("$HelloArduino") >= 0){
//if Snap get resarted
Serial.write("#$Arduino ist verbunden");
} else{
sendMessage(message, Serial2);
Serial.write("#$Nachricht gesendet");
}
}
if(Serial2.available() > 0){
message = receiveMessage(Serial2);
Serial.write(message.c_str());
}
delay(1000);
}
/**
* sendet eine beliebig lange Nachricht über eine SerialeSchnittstelle
* hierzu muss auf der anderen Seite der Kommunikation die receiveMessage Methode benutzt werden
* @param message String | die zu verschickende Nachricht
* @param serial Stream& | die SerialeSchnittstelle auf der geschickt wird
*/
void sendMessage(String message, Stream& serial) {
if(message.length() < 64) {
serial.print(message);
} else{
while(message.length() >= 64) {
serial.print(message.substring(0, 64));
message = message.substring(64);
while(serial.available() == 0) {
delay(10);
}
serial.flush();
}
serial.print(message);
}
}
/**
* empfängt eine beliebig lange Nachricht über eine SerialeSchnittstelle
* hierzu muss auf der anderen Seite der Kommunikation die sendMessage Methode benutzt werden
* @param serial Stream& | die SerialeSchnittstelle auf der geschickt wird
*/
String receiveMessage(Stream& serial) {
boolean newData = false;
String recMessage = "";
String tmpMessage = "";
while (newData == false) {
while (serial.available() == 0) {}
tmpMessage = serial.readString();
recMessage += tmpMessage;
if(tmpMessage.length() < 64) {
newData = true;
}
else{
serial.println();
}
}
return recMessage;
}
Arduino Code for the other Project
/** Program zum Debuggen.
Arduino Program für einen WMITM-Attack, welches Eve wiederspiegelt.
Benötigt das zugehörige Snap Program, über welches die Nachrichten dargestellt werden.
Das Arduino Program ist nur für den Datenaustausch.
Nachrichten mit einem $ am Anfang sind Anweisungen an den Arduino oder Snap
Das # vor Nachrichten wird benötigt, da bei der Kommunikation mit Snap ab und zu das erste Zeichen verloren geht.
*/
#include <SoftwareSerial.h>
SoftwareSerial bobSerial(D1, D2); // RX, TX
SoftwareSerial annaSerial(D4, D3); // RX, TX
String message = "";
void setup() {
Serial.begin(115200); // Schnittstelle zu Snap
bobSerial.begin(9600); // Serielle Kommunikation zu Bob
annaSerial.begin(9600); // Serielle Kommunikation zu Anna
//stellt sicher das nicht noch alten Nachrichten blockieren
Serial.flush();
bobSerial.flush();
annaSerial.flush();
//Warte auf Handshake mit Snap
while(Serial.available() <= 0) {
Serial.write("#$HelloSnap");
delay(500);
}
Serial.write("#$Arduino ist verbunden");
delay(1000);
}
void loop() {
//Nachricht von Snap
if(Serial.available() > 0) {
message = Serial.readString();
//Nachricht an Anna
if(message.indexOf("@anna") >= 0){
message = message.substring(message.indexOf("@anna") + 5);
sendMessage(message, annaSerial);
Serial.write("#$Nachricht gesendet");
//Nachricht an Bob
} else if(message.indexOf("@bob") >= 0){
message = message.substring(message.indexOf("@bob") + 4);
sendMessage(message, bobSerial);
Serial.write("#$Nachricht gesendet");
//Bei einem Neustart von Snap
} else if(message.indexOf("$HelloArduino") >= 0) {
Serial.write("#$Arduino ist verbunden");
}
}
//Nachricht von Bob
if(bobSerial.available() > 0){
message = receiveMessage(bobSerial);
Serial.write(("#@anna" + message).c_str());
}
//Nachricht von Anna
if(annaSerial.available() > 0){
message = receiveMessage(annaSerial);
Serial.write(("#@bob" + message).c_str());
}
delay(1000);
}
/**
* sendet eine beliebig lange Nachricht über eine SerialeSchnittstelle
* hierzu muss auf der anderen Seite der Kommunikation die receiveMessage Methode benutzt werden
* @param message String | die zu verschickende Nachricht
* @param serial Stream& | die SerialeSchnittstelle auf der geschickt wird
*/
void sendMessage(String message, Stream& serial) {
if(message.length() < 64) {
serial.print(message);
} else{
while(message.length() >= 64) {
serial.print(message.substring(0, 64));
message = message.substring(64);
while(serial.available() == 0) {
delay(10);
}
serial.flush();
}
serial.print(message);
}
}
/**
* empfängt eine beliebig lange Nachricht über eine SerialeSchnittstelle
* hierzu muss auf der anderen Seite der Kommunikation die sendMessage Methode benutzt werden
* @param serial Stream& | die SerialeSchnittstelle auf der geschickt wird
*/
String receiveMessage(Stream& serial) {
boolean newData = false;
String recMessage = "";
String tmpMessage = "";
while (newData == false) {
while (serial.available() == 0) {}
tmpMessage = serial.readString();
recMessage += tmpMessage;
if(tmpMessage.length() < 64) {
newData = true;
}
else{
serial.println();
}
}
return recMessage;
}