Arduino räkna slag med tilt ball switch
-
- Inlägg: 14
- Blev medlem: 30 juni 2015, 10:08:08
Arduino räkna slag med tilt ball switch
Behöver kunna räkna slag med en enkel fattigmansaccelerometer.
Den ska ju kunna stå i både high o low när den börjar och räkna upp 1 när man antingen går från low till high eller från high till low.
Programmeringskunskaperna sviktar känner jag, kanske finns ett enkelt sätt att göra detta på?
tips?
Den ska ju kunna stå i både high o low när den börjar och räkna upp 1 när man antingen går från low till high eller från high till low.
Programmeringskunskaperna sviktar känner jag, kanske finns ett enkelt sätt att göra detta på?
tips?
Re: Arduino räkna slag med tilt ball switch
Så här någonting kanske?
Kod: Markera allt
new_switch_state = current_switch_state;
if(new_switch_state != prev_switch_state){
switch_count++;
prev_switch_state = new_switch_state;
}
Re: Arduino räkna slag med tilt ball switch
Fast det där räknar på både upp och nedåtgående, men vi ville bara räkna en gång per slag. Så något i den här stilen kanske?
Kod: Markera allt
while(1) {
state = get_switch_state();
if (state == 1) && (old_state == 0) {
count++;
}
old_state = state;
}
Re: Arduino räkna slag med tilt ball switch
Jag tror inte att din kod fungerar?
"men vi ville bara räkna en gång per slag"
Okej, jag får väl fortsätta med mina irrfäder
"men vi ville bara räkna en gång per slag"
Okej, jag får väl fortsätta med mina irrfäder
Kod: Markera allt
start_state = GetSwitchState();
while(1){
new_state = GetSwitchState();
if( (new_state != start_state) && (new_state != old_state) ){
count++;
}
old_state = new_state;
}
Re: Arduino räkna slag med tilt ball switch
Jag ville bara förmedla en idé, så jag har inte testkört det. Man behöver ju sätta upp variabler och så också, typ såhär:
Men jag tycker att koden fungerar även när jag kollar på den igen (fortfarande inte testkört). Din kod är ju i princip samma, men du jämför new_state med variabeln start_state som aldrig ändras istället för konstanten 1 som jag gör. Båda uppfyller funktionen att inte räkna två gånger per cykel.
Kod: Markera allt
uint8_t state;
uint8_t old_state = 1;
uint16_t count = 0;
while(1) {
state = get_switch_state();
if ((state == 1) && (old_state == 0)) {
count++;
}
old_state = state;
}
Re: Arduino räkna slag med tilt ball switch
Nu när jag tittar igen ser jag hur vi tänkt olika. Du har tänkt:
"(uteslut hälften av fallen) och (förändring)"
Jag har tänkt:
"räkna vid stigande flank"
En smaksak kanske, men jag klarar mig med en variabel färre.
"(uteslut hälften av fallen) och (förändring)"
Jag har tänkt:
"räkna vid stigande flank"
En smaksak kanske, men jag klarar mig med en variabel färre.
-
- Inlägg: 14
- Blev medlem: 30 juni 2015, 10:08:08
Re: Arduino räkna slag med tilt ball switch
Såhär ser min kod ut nu. jag använder en tryckknapp istället för tilt ball switch och försöker testa den med Arduino men även när knappen inte är inkopplad rullar detta skript igenom villkoret och sista lampan tänds.
Förtydligande av vad jag vill göra:
Denna mackapär ska räkna slag förs ska en led vara tänd sen efter x slag tänds nästa o den innan slocknar sen efter y slag tänd den sista leden och den andra slocknar.
const int strokecounter = 2; // the number of the pushbutton pin
const int ledgreen = 13; // the number of the green LED
const int ledblue = 12; // the number of the blue LED
const int ledred = 11; // the number of the red LED
int counter = 0; //counter
int counterstate = 0; //Buttonstate
uint8_t state;
uint8_t old_state = 1;
uint16_t count = 0;
void setup()
{
pinMode(ledgreen, OUTPUT); // initialize the green LED as an output
pinMode(ledblue, OUTPUT); // initialize the blue LED as an output
pinMode(ledred, OUTPUT); // initialize the red LED as an output
pinMode(strokecounter, INPUT); // initialize the pushbutton pin as an input
digitalWrite(ledred, HIGH); //Red on
}
void loop()
{
while(1) {
state = digitalRead(strokecounter);
if ((state == 1) && (old_state == 0))
{
count++;
}
old_state = state;
if (count == 10)
{
digitalWrite (ledred,LOW);
digitalWrite (ledblue,HIGH);
}
if (count == 20)
{
digitalWrite (ledblue, LOW);
digitalWrite (ledgreen, HIGH);
}
}
}
Förtydligande av vad jag vill göra:
Denna mackapär ska räkna slag förs ska en led vara tänd sen efter x slag tänds nästa o den innan slocknar sen efter y slag tänd den sista leden och den andra slocknar.
const int strokecounter = 2; // the number of the pushbutton pin
const int ledgreen = 13; // the number of the green LED
const int ledblue = 12; // the number of the blue LED
const int ledred = 11; // the number of the red LED
int counter = 0; //counter
int counterstate = 0; //Buttonstate
uint8_t state;
uint8_t old_state = 1;
uint16_t count = 0;
void setup()
{
pinMode(ledgreen, OUTPUT); // initialize the green LED as an output
pinMode(ledblue, OUTPUT); // initialize the blue LED as an output
pinMode(ledred, OUTPUT); // initialize the red LED as an output
pinMode(strokecounter, INPUT); // initialize the pushbutton pin as an input
digitalWrite(ledred, HIGH); //Red on
}
void loop()
{
while(1) {
state = digitalRead(strokecounter);
if ((state == 1) && (old_state == 0))
{
count++;
}
old_state = state;
if (count == 10)
{
digitalWrite (ledred,LOW);
digitalWrite (ledblue,HIGH);
}
if (count == 20)
{
digitalWrite (ledblue, LOW);
digitalWrite (ledgreen, HIGH);
}
}
}
Re: Arduino räkna slag med tilt ball switch
Nu har jag aldrig använt Arduino, så jag vet inte om pinMode() ser till att pullup är aktivt för inputs. Du har heller inte beskrivit så mycket om din krets, men jag gissar att din ingång är helt flytande och att den räknar brus istället. Slå på den inbyggda pullupen eller sätt ett ~10k motstånd till VCC eller GND beroende på vad som är lämpligt.
Re: Arduino räkna slag med tilt ball switch
Det behövs också ett filter för ta bort kontaktstuds.
Re: Arduino räkna slag med tilt ball switch
Har lagt till en kodrad.
Kod: Markera allt
start_state = GetSwitchState();
old_state = start_state; //<----------
while(1){
new_state = GetSwitchState();
if( (new_state != start_state) && (new_state != old_state) ){
count++;
}
old_state = new_state;
}