Beginner: Binaire teller die via een schakelaar op/af telt

Projecten die niet passen in bovenstaande onderwerpen
Berichten: 3
Geregistreerd: 27 Mrt 2016, 16:05

Beginner: Binaire teller die via een schakelaar op/af telt

Berichtdoor Gilbert » 27 Mrt 2016, 16:32

Beste hobbyisten,

Ik wil een volume regelaar bouwen die 5 relais aansturen en die dus 32 stappen kunnen maken. Dit op basis van een Arduino Nano en een zelf gebouwde print. Ik loop alleen vast op mijn programmering. Het is super basis, maar toch maak ik ergens een denk fout/programmeer foutje. De teller telt nu al automatisch op en als ik de schakelaar indruk dan gebeurd wel wat maar niet wat ik verwacht. Hij telt wel 1x af als ik continue blijf drukker. Is er iemand die zit waar ik de fout maak.

Alvast bedankt voor het meedenken!
cpp code
const int buttonPin1 = 12;
const int buttonPin2 = 13;
int buttonState1 = LOW;
int buttonState2 = LOW;
int i = 1;

void setup()
{
pinMode(buttonPin1, INPUT);
pinMode(buttonPin2, INPUT);
pinMode(2,OUTPUT); // declare LED/ relais pins as output pins
pinMode(3,OUTPUT); // declare LED/ relais pins as output pins
pinMode(4,OUTPUT); // declare LED/ relais pins as output pins
pinMode(5,OUTPUT); // declare LED/ relais pins as output pins
pinMode(6,OUTPUT); // declare LED/ relais pins as output pins
}

void loop() {
buttonState1 = digitalRead(buttonPin1);
buttonState2 = digitalRead(buttonPin2);

{
if (buttonState1 == HIGH)
i = i+1;} //teller ophogen met 1
{
if (buttonState2 == LOW)
i = i-1;} //teller verlagen met 1

{
int a=i%2; // calculate LSB
int b=i/2 %2;
int c=i/4 %2;
int d=i/8 %2;
int e=i/16 %2; //claculate MSB
digitalWrite(6,e); //write MSB
digitalWrite(5,d);
digitalWrite(4,c);
digitalWrite(3,b);
digitalWrite(2,a); // write LSB

delay(250);
}

}

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Beginner: Binaire teller die via een schakelaar op/af te

Berichtdoor nicoverduin » 27 Mrt 2016, 17:19

En wat doe je nu als je de 5 gehaald hebt? Of weer bij 0 bent?
En hoe schakel je de buttons? Actief naar laag of actief naar hoog? En gebruik je pullup weerstanden? En ik zou alle accolades nalopen. Zeker bij ne if statements?
Tenslotte vind ik bet raar dat de ene switch hoog moet zijn en de ander laag om iets te doen
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 3
Geregistreerd: 27 Mrt 2016, 16:05

Re: Beginner: Binaire teller die via een schakelaar op/af te

Berichtdoor Gilbert » 27 Mrt 2016, 18:30

Hoi Nico,

Bedankt voor je reactie!
Ik zie inderdaad dat ik daar een foutje hebt gemaakt, want die moet inderdaad ook op HIGH staan. Op dit moment is het een basis programmering die nu tot inderdaad geen stop heeft voor het tellen. Ik gebruik inderdaad pull-up weerstanden van 10K. Ik heb even de programmering aangepast zodat ik via de serial monitor mee kan kijken. Ik zie alleen dat i niet opgehoogd of verlaagd word, maar ik doe iets fout in de programmering, want ik wil alleen dat hij i ophoogt en laat zien op de serial monitor als ik de schakelaar in druk. Het laten zien in de serial monitor gebeurd continue (0 of een 1).

{
{if (buttonState1 == HIGH)
i = i+1; //teller ophogen met 1
Serial.println(buttonState1);
Serial.print(i);
delay(250); }

{if (buttonState2 == HIGH)
i = i-1; //teller verlagen met 1
Serial.println(buttonState2);
Serial.print(i);
delay(250); }

int a=i%2; // calculate LSB
int b=i/2 %2;
int c=i/4 %2;
int d=i/8 %2;
int e=i/16 %2; //claculate MSB
digitalWrite(6,e); //write MSB
digitalWrite(5,d);
digitalWrite(4,c);
digitalWrite(3,b);
digitalWrite(2,a); // write LSB

delay(500);

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: Beginner: Binaire teller die via een schakelaar op/af te

Berichtdoor nicoverduin » 27 Mrt 2016, 19:34

Als je pullup weerstanden gebruikt schakel je naar gnd. Moet dus low zijn voor aan
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Beginner: Binaire teller die via een schakelaar op/af te

Berichtdoor shooter » 27 Mrt 2016, 20:23

Code: Alles selecteren
const int buttonPin1 = 11; // 13 heeft een led in dat gaat dan fout met pullup.
const int buttonPin2 = 12;
int buttonState1 = LOW;
int buttonState2 = LOW;
int i = 0; // anders kun je de teringherrie niet uitzetten
 
void setup() 
 {
  pinMode(buttonPin1, INPUT);  // waar gaat de weerstand naar toe naar de 5V of de Gnd (zie NICO)
  pinMode(buttonPin2, INPUT);
  pinMode(2,OUTPUT);   // declare LED/ relais pins as output pins 
  pinMode(3,OUTPUT);   // declare LED/ relais pins as output pins
  pinMode(4,OUTPUT);   // declare LED/ relais pins as output pins
  pinMode(5,OUTPUT);   // declare LED/ relais pins as output pins
  pinMode(6,OUTPUT);   // declare LED/ relais pins as output pins
 } 
 
void loop() { 
 buttonState1 = digitalRead(buttonPin1);
 buttonState2 = digitalRead(buttonPin2);
   
 
   if (buttonState1 == HIGH && i < 31)    // of LOW afhankelijk van je pullup
   {    i = i+1;            //teller ophogen met 1
   }
   if (buttonState2 == LOW && i > 1)   // of HIGH zie hoerboven
   {       i = i-1;}            //teller verlagen met 1
             

   int a=i%2;      // calculate LSB maak logische variabelen mogen langer zijn hoor dus bijv bit0, bit1 etc. 
   int b=i/2 %2;     
   int c=i/4 %2;       
   int d=i/8 %2;
   int e=i/16 %2;   //claculate MSB
   digitalWrite(6,e);   //write MSB dit is eigenlijk niet netjes want een uitgang moet je HIGH of LOW sturen dus
   digitalWrite(5,d);   // dus netter is digitalWrite(5, boolean(d))
   digitalWrite(4,c);   
   digitalWrite(3,b);   
   digitalWrite(2,a);  // write LSB
   
   delay(250);
 
je had ook een stappenmotor en een potmeter kunnen gebruiken , dan heb je een hogere resolutie. maar ach dat is je volgende product.

     
 }
paul deelen
shooter@home.nl

Berichten: 3
Geregistreerd: 27 Mrt 2016, 16:05

Re: Beginner: Binaire teller die via een schakelaar op/af te

Berichtdoor Gilbert » 27 Mrt 2016, 21:20

Hoi Shooter,

Bedankt voor je aanpassing en dit is inderdaad een stuk netter zo en het werkt!
Alleen heb ik een mega domme fout gemaakt waardoor ik rare uitslagen vanmiddag kreeg. Ik had namelijk maar 1 weerstand gebruikt om de verbinding naar massa te maken voor de schakelaars. Dit gaat natuurlijk niet werken omdat als schakelaar 1 hoog word dan gaat schakelaar 2 ook om hoog.

Wat een beginners fout!!!
Hele dag mee bezig geweest, maar super bedankt allemaal!

Berichten: 4067
Geregistreerd: 16 Okt 2013, 14:31
Woonplaats: s hertogenbosch

Re: Beginner: Binaire teller die via een schakelaar op/af te

Berichtdoor shooter » 28 Mrt 2016, 10:29

tja moet je maar fritzing gebruiken.
paul deelen
shooter@home.nl

Terug naar Overige projecten

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 23 gasten