Arduino mit Gui ansteuern?

Hey,

zuerst will ich euch mal warnen: Ich bin noch ein absoluter Anfänger mit Arduino und habe nicht soo viel Erfahrung im Programmieren, was aber nicht so bleiben soll :slight_smile:

Zum Kontext: Da vor kurzem mein Interesse durch das Programmieren an einem Arduino nano geweckt wurde habe ich durch ein bisschen rumstöbern ein kleines Projekt gefunden welches ich umsetzen wollte.

Das Projekt ist einfach ein Attiny85 mit usb anschluss an den ich eine Tastaturtaste gelötet habe, damit ich per Knopfdruck ein Wort schreiben lassen kann.

Nun ist meine Frage ob ich diese Ausgaben auch mit einer kleinen Gui verändern kann, sodass ich nicht das Programm öffnen muss, die Zeilen ändern, Hochladen und Arduino einmal rein und raus stecken muss.

Das Originalprogramm: https://www.thingiverse.com/download:2907039

Habe schon ein bisschen recherchiert aber habe nichts gefunden wo ich wirklich durchblicke und auf diese spezielle Situation passt.

Danke für alle Antworten im vorraus

Einen Sketch hier als Foto posten, ist die schlechteste Idee.
Das geht per Copy+Paste.
Poste den Sketch bitte in Code-Tags.
Dann kann man den auch lesen.

Hallo,

ebenso das 16k Bild bitte entfernen, auf maximal 800 * y verkleinern/schneiden, als Anhang speichern und verlinken.

Das mit dem Sketch nehme ich dem <hast Du auch einen Namen zum Ansprechen?> ausnahmsweise mal ab:

#include <OneButton.h>
#include <DigiKeyboard.h>


#define LED_PIN 1
#define SWITCH_PIN 0
OneButton button(SWITCH_PIN,true);

//toggles first or second mapping
bool state = true;

//Some strings to type. Use DigiKeyboard.print(strings[index]);
String strings[2] = {"some string","password\n"};

//Some keycodes with modifier. Use sendKeystroke(index) to send an item from this array
const char commands[][3] = {
  {0, 79}, //right
  {0, 80}, //left
  {MOD_CONTROL_LEFT,29} //strg+z
};

void setup() {
  pinMode(SWITCH_PIN, OUTPUT);
  digitalWrite(SWITCH_PIN, HIGH);
  pinMode(LED_PIN, OUTPUT);
  pinMode(SWITCH_PIN, INPUT);

  button.setClickTicks(250);
  button.attachDoubleClick(btndoubleclick);
  button.attachClick(btnclick);
  button.attachPress(btnpress);
}

void loop() {
  digitalWrite(LED_PIN,!state);
  button.tick();
  DigiKeyboard.delay(5);
}

void btnclick(){
  
  if(state) //first state
    sendKeystroke(0);
  else //second state
    sendKeystroke(2);
}
void btndoubleclick(){
  if(state) //first state
    sendKeystroke(1);
  else //second state
    DigiKeyboard.print(strings[1]);
    
}
void btnpress(){
  state=!state;
}

void sendKeystroke(int i){
  DigiKeyboard.sendKeyStroke(commands[i][1],commands[i][0]);
}

Kenne jetzt den 85er nicht aus eigener Anschauung, aber das Datenblatt sagt, dass er auch EEPROM hat.
Wenn Du also Deinen auszugebenden Text dorthin verfrachtest ist das erste Drittel schon geschafft.
Als zweites musst Du Dir einen Eingang schaffen - serielle Schnittstelle? - über den Du z.B. von einem PC über ein geeignetes Programm (Putty?) eine geänderte Zeichenkette in den Chip bekommst.
Und als letzte Tat brauchst Du nur noch die Zeichenkette im EEPROM ablegen.

Da ist also Raum zum Lernen und Experimentieren genug :).

Gruß Walter

wno158:
Das mit dem Sketch nehme ich dem <hast Du auch einen Namen zum Ansprechen?> ausnahmsweise mal ab:

#include <OneButton.h>

#include <DigiKeyboard.h>

#define LED_PIN 1
#define SWITCH_PIN 0
OneButton button(SWITCH_PIN,true);

//toggles first or second mapping
bool state = true;

//Some strings to type. Use DigiKeyboard.print(strings[index]);
String strings[2] = {"some string","password\n"};

//Some keycodes with modifier. Use sendKeystroke(index) to send an item from this array
const char commands[][3] = {
  {0, 79}, //right
  {0, 80}, //left
  {MOD_CONTROL_LEFT,29} //strg+z
};

void setup() {
  pinMode(SWITCH_PIN, OUTPUT);
  digitalWrite(SWITCH_PIN, HIGH);
  pinMode(LED_PIN, OUTPUT);
  pinMode(SWITCH_PIN, INPUT);

button.setClickTicks(250);
  button.attachDoubleClick(btndoubleclick);
  button.attachClick(btnclick);
  button.attachPress(btnpress);
}

void loop() {
  digitalWrite(LED_PIN,!state);
  button.tick();
  DigiKeyboard.delay(5);
}

void btnclick(){
 
  if(state) //first state
    sendKeystroke(0);
  else //second state
    sendKeystroke(2);
}
void btndoubleclick(){
  if(state) //first state
    sendKeystroke(1);
  else //second state
    DigiKeyboard.print(strings[1]);
   
}
void btnpress(){
  state=!state;
}

void sendKeystroke(int i){
  DigiKeyboard.sendKeyStroke(commands[i][1],commands[i][0]);
}





Kenne jetzt den 85er nicht aus eigener Anschauung, aber das Datenblatt sagt, dass er auch EEPROM hat.
Wenn Du also Deinen auszugebenden Text dorthin verfrachtest ist das erste Drittel schon geschafft.
Als zweites musst Du Dir einen Eingang schaffen - serielle Schnittstelle? - über den Du z.B. von einem PC über ein geeignetes Programm (Putty?) eine geänderte Zeichenkette in den Chip bekommst.
Und als letzte Tat brauchst Du nur noch die Zeichenkette im EEPROM ablegen.

Da ist also Raum zum Lernen und Experimentieren genug :).

Gruß Walter

Einen Namen zum Ansprechen habe ich tatsächlich: Luis .
Ich guck mal was ich mit diesem Input an Informationen machen kann und probier ein bisschen rum und melde mich wenn ich mir was überlegt habe.

Vielen Dank schomal

ich übernehme das einmal

VzojsVE.jpg

#include <OneButton.h>
#include <DigiKeyboard.h>

#define LED_PIN 1
#define SWITCH_PIN 0
OneButton button(SWITCH_PIN,true);

//toggles first or second mapping
bool state = true;

//Some strings to type. Use DigiKeyboard.print(strings[index]);
String strings[2] = {"some string","password\n"};

//Some keycodes with modifier. Use sendKeystroke(index) to send an item from this array
const char commands[][3] = {
  {0, 79}, //right
  {0, 80}, //left
  {MOD_CONTROL_LEFT,29} //strg+z
};

void setup() {
  pinMode(SWITCH_PIN, OUTPUT);
  digitalWrite(SWITCH_PIN, HIGH);
  pinMode(LED_PIN, OUTPUT);
  pinMode(SWITCH_PIN, INPUT);

  button.setClickTicks(250);
  button.attachDoubleClick(btndoubleclick);
  button.attachClick(btnclick);
  button.attachPress(btnpress);
}

void loop() {
  digitalWrite(LED_PIN,!state);
  button.tick();
  DigiKeyboard.delay(5);
}

void btnclick(){
  
  if(state) //first state
    sendKeystroke(0);
  else //second state
    sendKeystroke(2);
}
void btndoubleclick(){
  if(state) //first state
    sendKeystroke(1);
  else //second state
    DigiKeyboard.print(strings[1]);
    
}
void btnpress(){
  state=!state;
}

void sendKeystroke(int i){
  DigiKeyboard.sendKeyStroke(commands[i][1],commands[i][0]);
}

VzojsVE.jpg

Kenne jetzt den 85er nicht aus eigener Anschauung

Ich ein bisschen. Läuft gern als Digispark an einer USB Schnittstelle über die er per Arduino-IDE programmiert werden kann und auch wahlweise, wie hier, Tastatur spielen kann. Neben den zwei USB Datenpins und Reset hat er noch 3 Pins. Mit (PB0=SDA / PB2=CLK) könnte er I2C spielen und sich geänderte Texte schicken lassen.

Ob die 512 Byte RAM ok sind für variable String Objekte, glaub ich allerdings nicht.
Wenn dann noch die TinyWire Library dazukommt.

Vermutlich ist es sowieso besser, solche Texte gleich im EEPROM zu halten, wie Walter schon vorgeschlagen hat.

Das "Gui" - Gegenstück wäre dann ein I2C -Aufsatz, der seinerseits ein User Interface realisiert.
( z.B. seriell einen Nextion-Touchscreen via Nano )