Blocks turn to undefined when i load projects3

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;
}

It seems that all "primitives" are stored as custom blocks.
There are new experimental options Shift:gear: "Blocks all the way" , "Primitives palette", "Customize primitives". I'm unsure if switching between desktop Snap4Arduino, browser version, and plain Snap! malformed your project.

If you load your project make sure that "Block all the way" is not checked or force "Primitves palette" before saving.

BTW: SnapArduino has built-in Arduino communication. "Web Serial" library is intended mostly for plain Snap!

"Block all the way" wasn't checked, but looks like the "Primitives palette" helped with saving. Maybe it was just lucky, will see it if i work al little.

As far as i know SnapArduino works just with Firmata and can manipulate and read the single pins. For me it looked like for Communication the WebSerial is far better.

I already fined some new undefined blocks with this methode of saving.
Now he turns me some Variables into undefined.

Changing to another device solved my Problems.

But if anyone has another idea, I would be very grateful if it would work again on my main device.

Try [Ctrl][F5], [Shift]F5 or clear the service worker cache (dev tools)

Thanks a lot, looks like that solved the Problem

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.