Oppure

Loading
19/01/15 12:37
alex1995
buon giorno, sto facendo con arduino uno sketch che se il led è spento lo accende e se io continuo a tenere il pulsante premuto per un secondo lui abbassa l' intensità della luce del led, solo che il led si accende alla massima intensità e poi la diminuisce continuamente. il pulsante è una variabile siccome non ne ho uno al momento.
#include <SPI.h>
#include <WString.h>
#include <SD.h>

void setup()
{
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  SD.begin(4);
}

void scriviFile(char *nomeFile, String datiFile)
{
  File scriviFile = SD.open(nomeFile, FILE_WRITE);
  if(scriviFile)
  {
    scriviFile.println(datiFile);
    scriviFile.close();
    Serial.write("ok");
  }
  else
  {
    Serial.write("errore scrivi\n");
  }
}

String leggiFile(char *nomeFile)
{
  String getFile = String();
  File leggiFile = SD.open(nomeFile);
  if(leggiFile)
  {
    while(leggiFile.available())
    {
      char fileChar = leggiFile.read();
      getFile += fileChar;
    }
    leggiFile.close();
    return getFile;
  }
  else
  {
    Serial.write("errore leggi\n");
  }
}

int StringContains(String s, String search)
{
  //s.replace("Ú", "");
  int max = s.length() - search.length();
  int lgsearch = search.length();

  for (int i = 0; i <= max; i++)
  {
    if (s.substring(i, i + lgsearch) == search) return i;
  }

  return -1;
}

void loop()
{
  String leggifile = String(leggiFile("file.txt"));
  int pulsante = 1;
  if(pulsante == 1)
  {
    if(StringContains(leggifile, "off"))
    {
      digitalWrite(6, HIGH);
      SD.remove("file.txt");
      scriviFile("file.txt", "on");
      delay(1000);
    }
  }
  String leggifile2 = String(leggiFile("file.txt"));
  if(pulsante == 1)
  {
    if(StringContains(leggifile2, "on"))
    {
      analogWrite(6, 64);
      SD.remove("file.txt");
      scriviFile("file.txt", "25p");
    }
  }
}


dove sbaglio?
aaa
19/01/15 13:24
Roby94
Postato originariamente da alex1995: il pulsante è una variabile siccome non ne ho uno al momento.

Puoi usare due cavi in corto per i test.

Comunque come mai cosi tanti accessi al file su SD per le verifiche? Per organizzare le sequenza temporali non usare delay, facendo cosi "freeze" il micro, adopera la funzione millis() che ti fa capire bene quanto tempo sia trascorso senza bloccare i controlli, poi te la cavi con un paio di variabili.
In loop verifichi che il pulsante sia premuto, prendi il tempo e ti segni che è stato premuto, continui a verificare che sia tenuto premuto e simultaneamente controlli il tempo passato, allo scadere del secondo o quando il pulsante risulta non più premuto, esci dal ciclo e ti comporti di conseguenza, è passato un secondo? abbasso la luminosità se no ritorno ai controlli.

aaa
19/01/15 16:48
alex1995
grazie :D
aaa