Beginner: Binaire teller die via een schakelaar op/af telt
7 berichten
• Pagina 1 van 1
Beginner: Binaire teller die via een schakelaar op/af telt
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
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
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Beginner: Binaire teller die via een schakelaar op/af te
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
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
Re: Beginner: Binaire teller die via een schakelaar op/af te
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);
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);
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Beginner: Binaire teller die via een schakelaar op/af te
Als je pullup weerstanden gebruikt schakel je naar gnd. Moet dus low zijn voor aan
Re: Beginner: Binaire teller die via een schakelaar op/af te
- 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
shooter@home.nl
Re: Beginner: Binaire teller die via een schakelaar op/af te
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!
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!
Re: Beginner: Binaire teller die via een schakelaar op/af te
tja moet je maar fritzing gebruiken.
paul deelen
shooter@home.nl
shooter@home.nl
7 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 23 gasten