Arduino Polska Forum
Przycisk bistabilny - Wersja do druku

+- Arduino Polska Forum (https://forum.arduinopolska.pl)
+-- Dział: Korzystanie z Arduino (https://forum.arduinopolska.pl/dzial-korzystanie-z-arduino)
+--- Dział: Piaskownica (https://forum.arduinopolska.pl/dzial-piaskownica)
+--- Wątek: Przycisk bistabilny (/watek-przycisk-bistabilny)



Przycisk bistabilny - pat94 - 23-11-2016

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();
  }
 }



RE: Przycisk bistabilny - adix - 23-11-2016

po pierwsze jeśli nie używasz rezystora podciągającego to włącz go pinMode(przycisk, INPUT_PULLUP);


RE: Przycisk bistabilny - JasQ - 23-11-2016

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;}

}



RE: Przycisk bistabilny - pat94 - 23-11-2016

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();
  }
 }



RE: Przycisk bistabilny - JasQ - 23-11-2016

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;
   }
}
}



RE: Przycisk bistabilny - pat94 - 24-11-2016

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ł


RE: Przycisk bistabilny - krn78 - 25-11-2016

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.


RE: Przycisk bistabilny - pat94 - 11-12-2016

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