Arduino Polska Forum

Pełna wersja: Przycisk bistabilny
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Witam mam mały problem z dodaniem do układu przycisku bistabilnego. Otóż sam kod zapisu danych na kartę działa problem pojawia się gdy chcę ów zapis rozpoczynać po naciśnięciu przycisku i wtedy zapisuje się tylko pusty plik. 
Z góry dzięki za wszelką pomoc 
Kod:
#include <HX711.h>
#include <SD.h>
#include <SPI.h>

HX711 cell (3,2);
int przycisk = 9;
File plik;
void setup(){ 
pinMode(przycisk, INPUT);
  Serial.begin(9600);
  Serial.print("Initalizing SD car...");
  if(!SD.begin(10)){
  Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("Card intialized"); 
}
 void loop (){
  
  if(digitalRead(przycisk) == HIGH){
  SD.begin(SS);
  long val = 0; 
  val=cell.read(); 
  File plik=SD.open("Badanie.txt", FILE_WRITE) ; //Zapis pliku o nazwie badanie
  plik.println(val);
  Serial.println(val);
  }
 
  else 
  {
    plik.close();
  }
 }
po pierwsze jeśli nie używasz rezystora podciągającego to włącz go pinMode(przycisk, INPUT_PULLUP);
Tutaj masz prosty kodzik ci pomoże

Kod:
byte stat = 0;
byte przycisk = 5;

void setup() {}

void loop() {
if(digitalRead(przycisk) == HIGH and stat == 0 ){
delay(150); // opóźnienie lekkie dla przycisku
stat = 1;
}

if(digitalRead(przycisk) == LOW){stat = 0;}

}
Dzięki za podpowiedź udało uruchomić zapis po naciśnięciu przycisku lecz dalej zapisuje tylko pusty plik bez wartości z belki. Macie może jakiś pomysł co robię nie tak ?

Kod:
#include <HX711.h>
#include <SD.h>
#include <SPI.h>

HX711 cell (3,2);
byte stat =0;
byte przycisk=5;
File plik;
void setup(){ 

  Serial.begin(9600);
  Serial.print("Initalizing SD car...");
  if(!SD.begin(10)){
  Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("Card intialized"); 
}
 
 void loop (){
   
  if(digitalRead(przycisk) == HIGH and stat == 0){
   delay(10);
   stat=1;
  long val = 0; 
  val=cell.read(); 
  SD.begin(SS);
  File plik=SD.open("Badanie.txt", FILE_WRITE) ;
  plik.println(val);
  Serial.println(val);
  }
  if(digitalRead(przycisk)==LOW){
   stat=0;
   plik.close();
  }
 }
zobacz ten kod

Kod:
#include <HX711.h>
#include <SD.h>
#include <SPI.h>

HX711 cell (3,2);
byte stat =0;
byte przycisk=5;
File plik;
void setup(){

  Serial.begin(9600);
  Serial.print("Initalizing SD car...");
  if(!SD.begin(10)){
  Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("Card intialized");
}

void loop (){
  
  if(digitalRead(przycisk) == HIGH and stat == 0){
  delay(10);
   stat=1;
  long val = 0;
  val=cell.read();
  plik = SD.open("Badanie.txt", FILE_WRITE) ;
  if (plik){
  plik.println(val);
  plik.close();
  Serial.println(val);
     }
  }
  
  if(digitalRead(przycisk)==LOW){
   stat=0;
   }
}
}
A wiec rozbudowałem układ o wyświetlacz i teraz mam znowu problem z zapisem danych na kartę mógłby ktoś podrzucić jakiś trop co robię źle (dopiero zaczynam więc jestem zielony trochę ).
Dzięki za wszelką pomoc Smile
Kod:
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <HX711.h>
#include <SD.h>
#include <SPI.h>
#define BACKLIGHT_PIN 3
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7);
HX711 scale (A1,A0);
byte stat =0;
byte przycisk=5;
File plik;
void setup(){ 
  lcd.begin(16,2);
  lcd.setBacklightPin(BACKLIGHT_PIN, POSITIVE);
  lcd.setBacklight(HIGH);
  lcd.home();
  Serial.begin(9600);
  Serial.print("Initalizing SD car...");
  if(!SD.begin(10)){
  Serial.println("Card failed, or not present");
    return;
  }
  Serial.println("Card intialized"); 
}
long val=0;
 void loop (){ 
  if(digitalRead(przycisk) == HIGH and stat == 0){
   delay(10);
   stat=1;
   lcd.setCursor(0,0);
   lcd.print("F=");
  lcd.print(val);
  lcd.print(" N");
  val=scale.read(); 
  SD.begin(SS);
  File plik=SD.open("Badanie.txt", FILE_WRITE) ;
  if (plik){
    plik.println(val);
    plik.close();
  Serial.println(val);
  }
  }
  if(digitalRead(przycisk)==LOW){
   stat=0; 
  }
 }

po raz kolejny poprawiam twojego posta , jeszcze raz będę musiał wstawić "code" i będę się gniewał
Hmmm... a to nie jest tak aby, że w Arduino o niebo łatwiej jest (przy pinMode(przycisk, INPUT_PULLUP)Wink podłączyć przycisk tak, aby zwierał dany pin z masą, a w kodzie napisać:
Kod:
if(digitalRead(przycisk) == LOW and stat == 0){
Jeśli przycisk skonfigurowany jest jako 'INPUT_PULLUP)', to kiedy nie jest wciśnięty, automatycznie osiąga stan wysoki. Wciśnięcie sprawia, że osiąga stan niski.
Dzięki za podpowiedzi układzik działa jak marzenie Smile
Mam jeszcze jedno pytania mianowicie jak rozwiązać funkcję tarowania
Próbowałem czegoś takiego lecz z marnym skutkiem
bibilioteka do HX711 to HX711master
if (digitalRead(button) == LOW and stat==0);{
double val = scale.read_average(5);
scale.set_offset(val);
scale.tare();
}
Dzięki za odpowiedź Smile