Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Feb 01 10:35
    benolayinka commented #442
  • Jan 27 15:16
    benolayinka commented #442
  • Jan 27 14:53
    modlfo opened #444
  • Jan 20 17:13

    soundanalogous on master

    [STM32] Fix version checking S… Merge pull request #443 from fp… (compare)

  • Jan 20 17:13
    soundanalogous closed #443
  • Jan 20 06:54
    fpistm opened #443
  • Jan 16 15:01
    benolayinka commented #442
  • Jan 15 19:38
    dtex commented #442
  • Jan 15 18:48
    benolayinka edited #442
  • Jan 15 18:47
    benolayinka edited #442
  • Jan 15 18:45
    benolayinka opened #442
  • Jan 08 04:18
    soundanalogous commented #441
  • Jan 07 08:36
    Burnich commented #441
  • Jan 07 05:48
    soundanalogous commented #441
  • Jan 07 05:48
    soundanalogous commented #441
  • Jan 07 05:47
    soundanalogous commented #441
  • Jan 06 08:52
    Burnich commented #441
  • Jan 06 08:51
    Burnich commented #441
  • Jan 04 15:54
    soundanalogous commented #441
  • Jan 04 15:53
    soundanalogous commented #441
Jeff Hoefs
@soundanalogous
1 bit per pin
Clive Galway
@evilC
so port 0 might be like 001234567
but in binary of course
so all I am saying is maybe allow a mode like 00110
Jeff Hoefs
@soundanalogous
That's how it works today
Clive Galway
@evilC
meaning "Port 0/ Pin 0 changed to 1 / Pin 1 changed to 0
but it can be sparse
ah I see, bits
duh
yeah I see, much bigger
4 bits to desribe which pin in port, plus 1 for state
Jeff Hoefs
@soundanalogous
Here's an example of parsing a digital message in firmata.js: https://github.com/firmata/firmata.js/blob/master/lib/firmata.js#L124-L149
Clive Galway
@evilC
I don't think I would have any trouble in doing it, I already have to do similar things when I process DirectInput and XInput
Clive Galway
@evilC
        private Dictionary<int, bool> pinStates = new Dictionary<int, bool>();

        private void Session_OnDigitalStateReceived(object sender, FirmataEventArgs<DigitalPortState> eventArgs)
        {
            var basePin = eventArgs.Value.Port * 8;
            for (var portPin = 0; portPin < 8; portPin++)
            {
                var fullPin = basePin + portPin;
                var isSet = eventArgs.Value.IsSet(portPin);
                if (!pinStates.ContainsKey(fullPin))
                {
                    pinStates.Add(fullPin, !isSet);
                }
                if (isSet == pinStates[fullPin]) continue;
                pinStates[fullPin] = isSet;
                Console.WriteLine($"Port {eventArgs.Value.Port}, Pin {portPin} (Pin #{fullPin}) changed to {isSet}");
            }
        }
I spose I may need to check if mode is pullup and stuff tho?
as from what I can tell, in pullup mode, unpressed is 1, but in normal mode, 0 is unpressed?
Clive Galway
@evilC
Hmm, the C# library does not seem to have a GetDigitalPinMode()
Clive Galway
@evilC
using Solid.Arduino;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Solid.Arduino.Firmata;

namespace FermataTest
{
    public class Class1
    {
        private readonly ArduinoSession _session;
        private readonly Dictionary<int, bool> _pinStates = new Dictionary<int, bool>();
        private readonly Dictionary<int, PinMode> _pinModes = new Dictionary<int, PinMode>();

        public Class1()
        {
            var connection = GetConnection();
            _session = new ArduinoSession(connection);

            SubscribeDigitalPin(2, PinMode.InputPullup);
            SubscribeDigitalPin(3, PinMode.InputPullup);
            SubscribeDigitalPin(4, PinMode.InputPullup);
            SubscribeDigitalPin(5, PinMode.InputPullup);
            SubscribeDigitalPin(6, PinMode.InputPullup);
            SubscribeDigitalPin(7, PinMode.InputPullup);
            SubscribeDigitalPin(8, PinMode.InputPullup);
            SubscribeDigitalPin(9, PinMode.InputPullup);
            SubscribeDigitalPin(10, PinMode.InputPullup);
            SubscribeDigitalPin(11, PinMode.InputPullup);
            SubscribeDigitalPin(12, PinMode.InputPullup);
            SubscribeDigitalPin(13, PinMode.InputPullup);

            _session.DigitalStateReceived += Session_OnDigitalStateReceived;
            Console.ReadLine();
            _session.Dispose();
            connection.Dispose();
        }

        public void SubscribeDigitalPin(int pin, PinMode mode)
        {
            _session.SetDigitalPinMode(pin, mode);
            _pinModes[pin] = mode;
            var port = pin / 8;
            _session.SetDigitalReportMode(port, true);
        }

        private void Session_OnDigitalStateReceived(object sender, FirmataEventArgs<DigitalPortState> eventArgs)
        {
            var basePin = eventArgs.Value.Port * 8;
            for (var portPin = 0; portPin < 8; portPin++)
            {
                var fullPin = basePin + portPin;
                if (!_pinModes.ContainsKey(fullPin))
                {
                    continue;
                }

                var pinMode = _pinModes[fullPin];
                var pressedValue = pinMode != PinMode.InputPullup;
                var isSet = eventArgs.Value.IsSet(portPin) == pressedValue;
                if (!_pinStates.ContainsKey(fullPin))
                {
                    _pinStates.Add(fullPin, false);
                }
                if (isSet == _pinStates[fullPin]) continue;
                _pinStates[fullPin] = isSet;
                Console.WriteLine($"Port {eventArgs.Value.Port}, Pin {portPin} (Pin #{fullPin}) changed to {isSet}");
            }
        }

        private static ISerialConnection GetConnection()
        {
            Console.WriteLine("Searching Arduino connection...");
            var connection = EnhancedSerialConnection.Find();

            Console.WriteLine(connection == null
                ? "No connection found. Make shure your Arduino board is attached to a USB port."
                : $"Connected to port {connection.PortName} at {connection.BaudRate} baud.");

            return connection;
        }
    }
}
Jeff Hoefs
@soundanalogous
Regarding pull-ups, that's correct. The value is 1 normally and 0 if pressed because the current is pulled up to VCC and when you press the button, it's pulled down to ground. You can find a thorough explanation here: https://learn.sparkfun.com/tutorials/pull-up-resistors.
Rabin Shrestha
@jyapujuju
Hello
I set pinb as input
When i read all six pin as it show me 0
It only work upto 31
Why??
KoToZ
@Mohamedtareque
Hey is there any documentation to start with