[RISOLTO] Digispark e serial monitor.

Buongiorno, vorrei realizzare un misuratore di distanza usando Digispark con Attiny 85.
Vorrei leggere anche le misure, ma non potendo usare serial monitor lo devo fare con notepad o simili, usando i comandi appropriati, senza il sensore di distanza ad ultrasuoni HC-SR05 la comunicazione avviene. Preciso che per provare la comunicazione ho usato il programma in esempi dell’ ide.

Quando lo collego e gli carico il programma in calce non comunica più, non visualizza nemmeno il testo di prova nel setup. Ma il cursore nell’editor di testo smette di lampeggiare, quindi qualcosa “sente”.

I pin dedicati all’ USB li ho lasciati liberi.
Ho usato i restanti 4 per un relè un led trigger ed echo… ma come detto non comunica più.
Ho notato che se collego anche la VIN (9 volt) il dispositivo USB non viene riconosciuto.
Grazie.

#include <DigiKeyboard.h>
const int trigger = 1;
const int echo = 2;
const int led = 3;
const int rele = 6;
long durata;
long distanza;
void setup()
{
  pinMode(trigger, OUTPUT);
  pinMode(rele, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(echo, INPUT);
  delay(3000);     //tempo prima dell'entrata in servizio
  DigiKeyboard.println("Hello Digispark!");      //segnalino  prima del loop per vedere se comunica
}

void loop()
{
  digitalWrite(trigger, LOW);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  durata = pulseIn(echo, HIGH);
  distanza =  0.01717 * durata;
  if (distanza >= 120) {
    digitalWrite(rele, LOW);
    digitalWrite(led, LOW);
  }
  else {
    digitalWrite(rele, HIGH);
    digitalWrite(led, HIGH);
  }

  if (durata > 38000) {
    DigiKeyboard.println("Fuori range!");
  }
  else if (durata >= 23500) {
    DigiKeyboard.println("Oltre i 4 metri!");
  }
  else {
    DigiKeyboard.print("Distanza: ");
    DigiKeyboard.print(distanza);
    DigiKeyboard.println(" cm     ");
  }

  delay(500);
}

Non è che c'è un conflitto di timers da parte di pulsein?

zoomx:
Non è che c'è un conflitto di timers da parte di pulsein?

Non riesco a dari una risposta, non ho le necessarie competenze, dico solo che a quel segnalino che ho messo non arriva, perché non stampa, quindi il problema è prima di questa riga.
Se cancello tutte le dichiarazioni, tipo const, long... allora va.

Per curiosità, è fattibile il progettino che ho presentato? Non chiedo la pappa bella e pronta.

PS. se lo sketch (con le opportune modifiche per quanto riguarda la visualizzazione della distanza) lo do in pasto a Nano funziona perfettamente.

Ciao

Non conosco bene i digispark con Attiny 85 ma so che è parecchio limitato per cui ho ipotizzato conflitti tra timers.
MA sulla nano la DigiKeyboard non dovrebbe funzionare.
Invece non capisco come mai la DigiKeyboard funziona e la seriale, che viaggia sempre sullo stesso canale USB emulato, no.

zoomx:
... per cui ho ipotizzato conflitti tra timers.

Non so, so solo che sembra non arrivare nemmeno a questa riga "DigiKeyboard.println("Hello Digispark!"; che
ho messo nel setup, perché non me la printa.

zoomx:
MA sulla nano la DigiKeyboard non dovrebbe funzionare.

Con qualche piccolo cambiamento funziona, al posto di DigiKeyboard.println metto Serial.println e va.

zoomx:
Invece non capisco come mai la DigiKeyboard funziona e la seriale, che viaggia sempre sullo stesso canale USB emulato, no.

Se ti ricordi, prima di caricare un programma, esempio su Nano, devi prima selezionare la porta di comunicazione, e quindi quando si apre il serial monitor lui punta a quella porta e comunica.Invece il Digispark non avendo a bordo il chip CH340G convertitore USB-seriale se lo colleghi prima non si collega a nessuna COM, prima si da il comando di caricare il programma, la ide da il messaggio di collegarlo entro 60'' e carica.
Poi dopo se apri il serial monitor da un errore perché non vede nessuna scheda collegata.

In questo filmato ho visto com'è possibile stampare su un editor di testo

ma attenzione, stampa anche nella ide di Arduino se portata in primo piano, e salva in automatico.

Bye

Risolto, dovevo lasciare liberi i pin 3 e 4 (quelli dedicati all’USB, disattenzione), e non 4 e 5.
Il solo fatto che ho dichiarato il pin 3 all’inizio ha portato all’errore.
E ho cambiato anche i pin a trigger ed echo, perchè come sappiamo tutti, i pin delle porte sono numerati a partire dallo 0… mannaggia :confused:

Bye

#include <DigiKeyboard.h>
const int trigger = 0;
const int echo = 1;
const int led = 2;
const int rele = 5;
long durata;
long distanza;
void setup()
{
  pinMode(trigger, OUTPUT);
  pinMode(rele, OUTPUT);
  pinMode(led, OUTPUT);
  pinMode(echo, INPUT);
  delay(1000);     //tempo prima dell'entrata in servizio
}

void loop()
{
  digitalWrite(trigger, LOW);
  digitalWrite(trigger, HIGH);
  delayMicroseconds(10);
  digitalWrite(trigger, LOW);
  durata = pulseIn(echo, HIGH);
  distanza =  0.01717 * durata;
  if (distanza >= 120) {
    digitalWrite(rele, LOW);
    digitalWrite(led, LOW);
  }
  else {
    digitalWrite(rele, HIGH);
    digitalWrite(led, HIGH);
  }

  if (durata > 38000) {
    DigiKeyboard.println("Fuori range!");
  }
  else if (durata >= 23500) {
    DigiKeyboard.println("Oltre i 4 metri!");
  }
  else {
    DigiKeyboard.print("Distanza: ");
    DigiKeyboard.print(distanza);
    DigiKeyboard.println(" cm     ");
  }

  delay(500);
}

Mi era sfuggito il conflitto dei piedini, complimenti e karma+ per il suggerimento.
Ho una digispark usata solo un paio di volte e mai con la seriale.

Ti puoi divertire a usarla per immettere la password quando accendi il pc, funziona alla grande
metti la password nel setup così la stampa una sola volta.
Esempio:

#include "DigiKeyboard.h"
void setup() {
  DigiKeyboard.delay(1000);
  DigiKeyboard.sendKeyStroke(0);
  DigiKeyboard.println("PASSWORD");
}
void loop() {

}