Display
5 berichten
• Pagina 1 van 1
Display
hallo,
ik heb mijn arduino aangesloten aan een display van 1 cijfer, zie http://osoyoo.com/2014/12/18/display-digit-0-to-9-in-7-seg-nixie-led-tube/, en probeer ervoor te zorgen dat als ik op de knop druk, dat het cijfertje van 1 naar 2 springt, is hij 2 en druk ik op de knop dan (is de bedoeling) gaat hij naar 3 enz. maar het werkt niet, hij blijft op 0 staan. code:
kan iemand mij helpen
alvast bedankt.
ik heb mijn arduino aangesloten aan een display van 1 cijfer, zie http://osoyoo.com/2014/12/18/display-digit-0-to-9-in-7-seg-nixie-led-tube/, en probeer ervoor te zorgen dat als ik op de knop druk, dat het cijfertje van 1 naar 2 springt, is hij 2 en druk ik op de knop dan (is de bedoeling) gaat hij naar 3 enz. maar het werkt niet, hij blijft op 0 staan. code:
- Code: Alles selecteren
#define knop 3
int a=7;
int b=6;
int c=5;
int d=11;
int e=10;
int f=8;
int g=9;
int dp=4;
int buttonstate = 0;
int cijfer = 0;
//display number 1
void loop()
{
if (cijfer == 1)
{
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
clearDisplay();
}
//display number2
if (cijfer == 2)
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(e,HIGH);
digitalWrite(d,HIGH);
clearDisplay();
}
// display number3
if (cijfer == 3)
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
clearDisplay();
}
// display number4
if (cijfer == 4)
{
digitalWrite(f,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
clearDisplay();
}
// display number5
if (cijfer == 5)
{
digitalWrite(a,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
clearDisplay();
}
// display number6
if (cijfer == 6)
{
digitalWrite(a,HIGH);
digitalWrite(f,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
clearDisplay();
}
// display number7
if (cijfer == 7)
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
clearDisplay();
}
// display number8
if (cijfer == 8)
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
clearDisplay();
}
if (cijfer == 9)
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(g,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(f,HIGH);
clearDisplay();
}
if (cijfer == 0)
{
digitalWrite(a,HIGH);
digitalWrite(b,HIGH);
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
clearDisplay();
}
buttonstate = digitalRead(knop);
if (buttonstate = HIGH)
{
cijfer = +1;
}
if (cijfer = 10)
{
cijfer = 0;
}
}
void setup()
{
int i;
for(i=4;i<=11;i++)
pinMode(i,OUTPUT);
}
void clearDisplay(void)
{
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(g,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
}
kan iemand mij helpen
alvast bedankt.
- Code: Alles selecteren
void loop()
digitalWrite (Eat, HIGH)
digitalWrite (Sleep, HIGH)
digitalWrite (Program, HIGH)
Advertisement
- nicoverduin
- Berichten: 5043
- Geregistreerd: 13 Mei 2013, 20:57
- Woonplaats: Heemskerk
Re: Display
Je zou eens kunnenproberen om wat meer basiskennis op te doen. En dan zelf proberen te begrijpen wat hier gebeurt.
Re: Display
Als je met een if-statement twee dingen wilt vergelijken, gebruik dan '=='. Dat is dus een dubbele '='.
Je wilt niet dat teller heel snel oploopt, zolang je de knop hebt ingedrukt.
Je wilt dus het moment detecteren waarop de knop wordt ingedrukt. Dat is de State-Change-Detection: https://www.arduino.cc/en/Tutorial/StateChangeDetection
Probeer in je sketch ook eens om het inpringen overal goed te zetten.
Bij ieder nummer roep je clearDisplay() aan. Dan verdwijnt het nummer toch weer ?
- Code: Alles selecteren
if (buttonstate == HIGH) // gebruik dubbele '=='
{
cijfer = +1;
}
if (cijfer == 10) // gebruik dubbele '=='
{
cijfer = 0;
}
Je wilt niet dat teller heel snel oploopt, zolang je de knop hebt ingedrukt.
Je wilt dus het moment detecteren waarop de knop wordt ingedrukt. Dat is de State-Change-Detection: https://www.arduino.cc/en/Tutorial/StateChangeDetection
Probeer in je sketch ook eens om het inpringen overal goed te zetten.
Bij ieder nummer roep je clearDisplay() aan. Dan verdwijnt het nummer toch weer ?
- Gij Kieken
- Berichten: 631
- Geregistreerd: 15 Nov 2015, 11:54
Re: Display
Hey Ann,
Dit is een stukje recht-uit,recht-aan code om een 7-seg display aan te sturen,lees het misschien een tiental keren en probeer zo de code te begrijpen.
De code kan hier en daar zeker wat bij geschroefd worden, maar het is de bedoeling het stapsgewijs op te bouwen.
De code werkt.
Het is niet direct wat jij in gedachten hebt, maar als je een en ander beter begrijpt kun je ze aanpassen naar uw wens.
Dit is een stukje recht-uit,recht-aan code om een 7-seg display aan te sturen,lees het misschien een tiental keren en probeer zo de code te begrijpen.
De code kan hier en daar zeker wat bij geschroefd worden, maar het is de bedoeling het stapsgewijs op te bouwen.
De code werkt.
Het is niet direct wat jij in gedachten hebt, maar als je een en ander beter begrijpt kun je ze aanpassen naar uw wens.
- Code: Alles selecteren
/*
@ Sketch is written for Arduino Nano and Uno (A0--A5).
@ Control 7-segment display via relay's.
@ 7-segment display's made of individual Led stripes.
@ Input is controlled via 10-pos.rotary-switch,common to ground.
@ All inputs are INPUT_PULLUP resistor to 5v.
@ Connect Arduino inputs DI 2..DI 11 to rotary-switch pos.1--10.
@ Notice that analog pin's can be addressed as OUTPUT(14)--OUTPUT(19).
@ Led stripes connected in common Anode (common Kathode is also possible).
@ Sketch is written for common Anode because of relay-card is active low.
@ 0=Led-On, 1=Led-Off
@ Connect Arduino pin numbers: DI12,A0,A1,A2,A3,A4,A5 to 7-segment display : a,b,c,d ,e ,f ,g.
@ In programming skip DI13, because at start_up the bootloader makes pin DI13 flash a few times.
@ Error mesages, <broken wire [o]>, <short circuit [E]>.
@ For Leading or Blanking Zero, comment or uncomment specific lines in seven_seg_display array.
*/
//#define DEBUG // Uncomment this line for debug purposes
// Setup an 2-dimensional array, ten numbers 0-9, 7-segments
byte totalVal = 0;
byte seven_seg_display[12][7]={ // Setup for common Anode display or Arduino relay-card
//{ 1,1,1,1,1,1,1 } , // 0, switch off the bits for number 0 (a,b,c,d,e,f,g) comment this line for Blanking Zero
{ 0,0,0,0,0,0,1 } , // 0, switch off the bits for number 0 (a,b,c,d,e,f,g) comment this line for Leading Zero
{ 1,0,0,1,1,1,1 } , // 1, switch off the bits for number 1 (a,b,c,d,e,f,g)
{ 0,0,1,0,0,1,0 } , // 2, switch off the bits for number 2 (a,b,c,d,e,f,g)
{ 0,0,0,0,1,1,0 } , // 3, switch off the bits for number 3 (a,b,c,d,e,f,g)
{ 1,0,0,1,1,0,0 } , // 4, switch off the bits for number 4 (a,b,c,d,e,f,g)
{ 0,1,0,0,1,0,0 } , // 5, switch off the bits for number 5 (a,b,c,d,e,f,g)
{ 0,1,0,0,0,0,0 } , // 6, switch off the bits for number 6 (a,b,c,d,e,f,g)
{ 0,0,0,1,1,1,1 } , // 7, switch off the bits for number 7 (a,b,c,d,e,f,g)
{ 0,0,0,0,0,0,0 } , // 8, switch off the bits for number 8 (a,b,c,d,e,f,g)
{ 0,0,0,0,1,0,0 } , // 9, switch off the bits for number 9 (a,b,c,d,e,f,g)
{ 1,1,0,0,0,1,0 } , // error, broken wire ( o )
{ 0,1,1,0,0,0,0 } , // error, short circuit ( E )
};
/*
byte seven_seg_display[12][7]={ // Setup for common Kathode display
//{ 0,0,0,0,0,0,0 } , // 0, highlight the bits for number 0 (a,b,c,d,e,f,g) comment this line for Leading Zero
{ 1,1,1,1,1,1,0 } , // 0, highlight the bits for number 0 (a,b,c,d,e,f,g) comment this line for Blanking Zero
{ 0,1,1,0,0,0,0 } , // 1, highlight the bits for number 1 (a,b,c,d,e,f,g)
{ 1,1,0,1,1,0,1 } , // 2, highlight the bits for number 2 (a,b,c,d,e,f,g)
{ 1,1,1,1,0,0,1 } , // 3, highlight the bits for number 3 (a,b,c,d,e,f,g)
{ 0,1,1,0,0,1,1 } , // 4, highlight the bits for number 4 (a,b,c,d,e,f,g)
{ 1,0,1,1,0,1,1 } , // 5, highlight the bits for number 5 (a,b,c,d,e,f,g)
{ 1,0,1,1,1,1,1 } , // 6, highlight the bits for number 6 (a,b,c,d,e,f,g)
{ 1,1,1,0,0,0,0 } , // 7, highlight the bits for number 7 (a,b,c,d,e,f,g)
{ 1,1,1,1,1,1,1 } , // 8, highlight the bits for number 8 (a,b,c,d,e,f,g)
{ 1,1,1,1,0,1,1 } , // 9, highlight the bits for number 9 (a,b,c,d,e,f,g)
{ 0,0,1,1,1,0,1 } , // error, broken wire ( o )
{ 1,0,0,1,1,1,1 } , // error, short circuit ( E )
};
*/
void setup(){
// Setup Arduino pin configuration
pinMode(2,INPUT); // Dec input 0
pinMode(3,INPUT); // Dec input 1
pinMode(4,INPUT); // Dec input 2
pinMode(5,INPUT); // Dec input 3
pinMode(6,INPUT); // Dec input 4
pinMode(7,INPUT); // Dec input 5
pinMode(8,INPUT); // Dec input 6
pinMode(9,INPUT); // Dec input 7
pinMode(10,INPUT); // Dec input 8
pinMode(11,INPUT); // Dec input 9
// Set INTERNAL_PULLUP for all inputs
pinMode(2, INPUT_PULLUP); // Dec input 0
pinMode(3, INPUT_PULLUP); // Dec input 1
pinMode(4, INPUT_PULLUP); // Dec input 2
pinMode(5, INPUT_PULLUP); // Dec input 3
pinMode(6, INPUT_PULLUP); // Dec input 4
pinMode(7, INPUT_PULLUP); // Dec input 5
pinMode(8, INPUT_PULLUP); // Dec input 6
pinMode(9, INPUT_PULLUP); // Dec input 7
pinMode(10,INPUT_PULLUP); // Dec input 8
pinMode(11,INPUT_PULLUP); // Dec input 9
// Configure the outputs
pinMode(12,OUTPUT); // Display segment a
pinMode(A0,OUTPUT); // Display segment b
pinMode(A1,OUTPUT); // Display segment c
pinMode(A2,OUTPUT); // Display segment d
pinMode(A3,OUTPUT); // Display segment e
pinMode(A4,OUTPUT); // Display segment f
pinMode(A5,OUTPUT); // Display segment g
// Only runs one time for test purpose
for(byte downCount = 10; downCount > 0; downCount --){
delay(1000);
sevenSeg_write(downCount-1);
}
delay(1000); // Give the system time to stabilize
}
void sevenSeg_write(byte digit){
byte pin=12; // Display segments, segDisplay(0)=a,..., segDisplay(6)=g
for(byte segDisplay = 0; segDisplay < 7; segDisplay ++){
digitalWrite(pin, seven_seg_display[digit][segDisplay]);
pin ++;
if( pin == 13 ) {pin ++;} // Skip pin13 because the bootloader makes it flash
}
}
byte readSwitch(){ // Function to read the state of the Inputs
totalVal = 0; // If all Inputs are High,(broken wire)display ( o )
if (digitalRead(2 ) == HIGH) {totalVal += 1;} //Dec input 0
if (digitalRead(3 ) == HIGH) {totalVal += 1;} //Dec input 1
if (digitalRead(4 ) == HIGH) {totalVal += 1;} //Dec input 2
if (digitalRead(5 ) == HIGH) {totalVal += 1;} //Dec input 3
if (digitalRead(6 ) == HIGH) {totalVal += 1;} //Dec input 4
if (digitalRead(7 ) == HIGH) {totalVal += 1;} //Dec input 5
if (digitalRead(8 ) == HIGH) {totalVal += 1;} //Dec input 6
if (digitalRead(9 ) == HIGH) {totalVal += 1;} //Dec input 7
if (digitalRead(10) == HIGH) {totalVal += 1;} //Dec input 8
if (digitalRead(11) == HIGH) {totalVal += 1;} //Dec input 9
return totalVal; // If totalVal < 9 ,Short circuit display ( E )
}
void loop(){
for (byte i = 2; i < 12; i ++){
if (digitalRead(i) == LOW){
sevenSeg_write(i-2);
}
}
readSwitch();
#ifdef DEBUG
Serial.println(totalVal);
#endif
if (totalVal > 9) { // Check for broken wire
sevenSeg_write(10);
}
if (totalVal < 9) { // Check for short circuit
sevenSeg_write(11);
}
delay(1000);
}
Re: Display
allereerst even de opbouw, zet setup boven de loop dat leest wat fijner.
zet al die if statements in een aparte functie, dan wordt de loop een stuk simpeler.
daarna kun je al die if dingen vervangen door een case, dat leest lekker simpel.
wel telkens een break ertussen zetten (zie de reference )
verder zet je er telkens een aantal aan en direct zet je alles weer uit, zonder delay of wachten.
(je kunt gewoon alle pinnen sturen dan blijven ze staan, of vlak voor je de pinnen aan zet eerst even clearen.
dan kun je ook nog andere dingen doen, want het display blijft dan gewoon aanstaan.
zet al die if statements in een aparte functie, dan wordt de loop een stuk simpeler.
daarna kun je al die if dingen vervangen door een case, dat leest lekker simpel.
wel telkens een break ertussen zetten (zie de reference )
verder zet je er telkens een aantal aan en direct zet je alles weer uit, zonder delay of wachten.
(je kunt gewoon alle pinnen sturen dan blijven ze staan, of vlak voor je de pinnen aan zet eerst even clearen.
dan kun je ook nog andere dingen doen, want het display blijft dan gewoon aanstaan.
paul deelen
shooter@home.nl
shooter@home.nl
5 berichten
• Pagina 1 van 1
Wie is er online?
Gebruikers in dit forum: Geen geregistreerde gebruikers en 25 gasten