Warning, /education/gcompris/src/activities/digital_electricity/components/BcdCounter.qml is written in an unsupported language. File is not indexed.
0001 /* GCompris - BcdCounter.qml
0002 *
0003 * SPDX-FileCopyrightText: 2016 Pulkit Gupta <pulkitnsit@gmail.com>
0004 *
0005 * Authors:
0006 * Bruno Coudoin <bruno.coudoin@gcompris.net> (GTK+ version)
0007 * Pulkit Gupta <pulkitnsit@gmail.com> (Qt Quick port)
0008 *
0009 * SPDX-License-Identifier: GPL-3.0-or-later
0010 */
0011 import QtQuick 2.12
0012 import GCompris 1.0
0013
0014 import "../digital_electricity.js" as Activity
0015
0016 ElectricalComponent {
0017 id: bcdTo7Segment
0018 terminalSize: 0.125
0019 noOfInputs: 1
0020 noOfOutputs: 4
0021 property var outputTerminalPosY: [0.125, 0.375, 0.625, 0.875]
0022 property int count: 0
0023 property int previousInput: 0
0024
0025 information: qsTr("A BCD counter usually takes a signal generator as input. " +
0026 "The output is a BCD number starting from 0 which is increased by one at each tick.")
0027
0028 truthTable: []
0029 property var outputTable: [['0','0','0','0'],
0030 ['0','0','0','1'],
0031 ['0','0','1','0'],
0032 ['0','0','1','1'],
0033 ['0','1','0','0'],
0034 ['0','1','0','1'],
0035 ['0','1','1','0'],
0036 ['0','1','1','1'],
0037 ['1','0','0','0'],
0038 ['1','0','0','1']]
0039
0040 property alias inputTerminals: inputTerminals
0041 property alias outputTerminals: outputTerminals
0042
0043 Repeater {
0044 id: inputTerminals
0045 model: 1
0046 delegate: inputTerminal
0047 Component {
0048 id: inputTerminal
0049 TerminalPoint {
0050 posX: 0.07
0051 posY: 0.5
0052 type: "In"
0053 }
0054 }
0055 }
0056
0057 Repeater {
0058 id: outputTerminals
0059 model: 4
0060 delegate: outputTerminal
0061 Component {
0062 id: outputTerminal
0063 TerminalPoint {
0064 posX: 0.93
0065 posY: outputTerminalPosY[index]
0066 type: "Out"
0067 }
0068 }
0069 }
0070
0071 function updateOutput(wireVisited) {
0072 for(var i = 0 ; i < noOfOutputs ; ++i) {
0073 var terminal = outputTerminals.itemAt(i)
0074 terminal.value = outputTable[count][i]
0075 for(var j = 0 ; j < terminal.wires.length ; ++j)
0076 terminal.wires[j].to.value = terminal.value
0077 }
0078
0079 if(previousInput != inputTerminals.itemAt(0).value) {
0080 previousInput = inputTerminals.itemAt(0).value
0081 count = (count + 1) % 10;
0082
0083 var componentVisited = []
0084 for(var i = 0 ; i < noOfOutputs ; ++i) {
0085 var terminal = outputTerminals.itemAt(i)
0086 for(var j = 0 ; j < terminal.wires.length ; ++j) {
0087 var wire = terminal.wires[j]
0088 var component = wire.to.parent
0089 if(componentVisited[component] != true && wireVisited[wire] != true) {
0090 componentVisited[component] = true
0091 wireVisited[wire] = true
0092 component.updateOutput(wireVisited)
0093 }
0094 }
0095 }
0096 }
0097 }
0098 }