• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Przycisk bistabilny
#1
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();
  }
 }
 
Odpowiedź
#2
po pierwsze jeśli nie używasz rezystora podciągającego to włącz go pinMode(przycisk, INPUT_PULLUP);
[Obrazek: banerelektronika.jpg]



Jeśli pomogłem podziękuj punktem reputacji Wink
 
Odpowiedź
#3
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;}

}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#4
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();
  }
 }
 
Odpowiedź
#5
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;
   }
}
}
Ważne aby robić co się lubi albo lubić co się robi .
Arduino UNO, TINY, PRO MINI
Pomoc nagradzamy punktami reputacji Wink
 
Odpowiedź
#6
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ł
 
Odpowiedź
#7
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.
 
Odpowiedź
#8
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
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości