Arduino Due Basic that works with serial keyboard and oled display

I have built a little project with an Arduino Due an oled adafruit display connected with sda and sdl in pin 20 and 21 and gnd to gnd and vcc to 3.3 volts and a serial keyboard working from the arduino ide or a serial terminal program with an implemented limited BASIC language, it works and i think can be built more over this code, like a true BASIC Code. An Apple ii very limited!!!!

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define SCREEN_WIDTH 128 // Larghezza dello schermo OLED, in pixel
#define SCREEN_HEIGHT 64 // Altezza dello schermo OLED, in pixel

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);

String inputBuffer = ""; // Buffer per memorizzare l'input da seriale
bool programEnded = false; // Flag per indicare se il programma è terminato

// Funzione per eseguire l'interpretazione dei comandi BASIC
void runBasicCommand(String command) {
  if (command.startsWith("PRINT")) {
    // Esegui il comando PRINT
    String textToPrint = command.substring(6); // Rimuovi "PRINT " dalla stringa
    display.clearDisplay(); // Cancella il display
    display.setTextSize(1); // Imposta la dimensione del testo
    display.setTextColor(SSD1306_WHITE); // Imposta il colore del testo
    display.setCursor(0, 0); // Imposta la posizione del cursore
    display.println(textToPrint); // Stampa il testo sul display
    display.display(); // Aggiorna il display per visualizzare le modifiche
  } else if (command.startsWith("INPUT")) {
    // Esegui il comando INPUT
    String prompt = command.substring(6); // Rimuovi "INPUT " dalla stringa
    display.clearDisplay(); // Cancella il display
    display.setTextSize(1); // Imposta la dimensione del testo
    display.setTextColor(SSD1306_WHITE); // Imposta il colore del testo
    display.setCursor(0, 0); // Imposta la posizione del cursore
    display.println(prompt); // Visualizza il prompt sul display
    display.display(); // Aggiorna il display per visualizzare le modifiche
    
    // Attendi l'input dall'utente
    while (!Serial.available()) {
      delay(100);
    }
    inputBuffer = Serial.readStringUntil('\n'); // Leggi l'input dalla seriale
    display.clearDisplay(); // Cancella il display
  } else if (command.startsWith("GOTO")) {
    // Esegui il comando GOTO
    int lineNumber = command.substring(5).toInt(); // Rimuovi "GOTO " dalla stringa e converti in intero
    Serial.print("Vai alla riga ");
    Serial.println(lineNumber); // Stampa il numero della riga sulla seriale (per debugging)
    // Implementa il salto alla riga desiderata
    // ...
  } else if (command == "END") {
    // Esegui il comando END
    programEnded = true; // Imposta il flag per indicare che il programma è terminato
    Serial.println("Programma terminato.");
  } else {
    // Comando non supportato
    Serial.println("Comando non supportato");
  }
}

void setup() {
  Wire.begin(); // Inizializza la comunicazione I2C
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // Inizializza il display OLED
  display.display(); // Aggiorna il display per visualizzare le modifiche
  delay(2000); // Attendere 2 secondi
  display.clearDisplay(); // Cancella il display
  Serial.begin(9600); // Inizializza la comunicazione seriale
}

void loop() {
  if (!programEnded && Serial.available() > 0) {
    String receivedLine = Serial.readStringUntil('\n'); // Leggi una riga dalla porta seriale
    Serial.println(receivedLine); // Stampa la riga ricevuta sulla seriale (per debugging)
    
    // Esegui l'interpretazione del comando BASIC
    runBasicCommand(receivedLine);
  }
}

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